天天看點

使用 kubeadm 快速部署 K8S V1.18

使用 kubeadm 快速部署 K8S V1.18

鏡像下載下傳、域名解析、時間同步請點選

阿裡巴巴開源鏡像站

1、基礎環境,至少1個Master和1個Worker;

2、基本配置

1) 伺服器開啟硬體虛拟化支援;
2) 作業系統版本大于CentOS7.5,Minimal模式,可update到最新版本;
3) 關閉SElinux和Firewalld服務;
#sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
#setenforce 0
#systemctl disable firewalld
#systemctl stop firewalld
4) 設定hostname并在/etc/hosts配置本地解析;
#hostnamectl set-hostname master1.lab.com
5) 關閉Swap服務
#swapoff -a
#sed -i '/swap/d' /etc/fstab
6) 修改sysctl.conf
#echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
#echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf
#echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf
#sysctl -p
若提示cannot stat /proc/sys/net/bridge/bridge-nf-call-ip6tables: No such file or directory
#modprobe net_brfilter
#sysctl -p           

3、所有節點安裝Docker服務

1) 如果已安裝過舊版本需要删除:
#yum -y remove docker-client docker-client-latest docker-common docker-latest docker-logrotate docker-latest-logrotate \ docker-selinux docker-engine-selinux docker-engine
2) 設定阿裡雲docker倉庫,并安裝Docker服務;
#yum -y install yum-utils lvm2 device-mapper-persistent-data nfs-utils xfsprogs wget
#yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#yum -y install docker-ce docker-ce-cli containerd.io
#systemctl enable docker
#systemctl start docker           

4、所有節點安裝K8S服務

1) 如果已安裝過舊版本,需要删除:
#yum -y remove kubelet kubadm kubctl
2) 設定阿裡雲的倉庫,并安裝新版本
#cat <<EOF > /etc/yum.repos.d/kubernetes.repo
   [kubernetes]
   name=Kubernetes
   baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
   enabled=1
   gpgcheck=0
   repo_gpgcheck=0
   gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
       http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
   EOF
#yum -y install kubelet kubeadm kubectl
Node節點不需要按照kubectl
3) 修改Docker Cgroup Driver為systemd,如果不修改則在後續添加Worker節點時可能會遇到“detected cgroupfs as ths Docker driver.xx”的報錯資訊,并配置Docker本地鏡像庫;
cat > /etc/docker/daemon.json <<EOF
{
    "exec-opts": ["native.cgroupdriver=systemd"],
    "log-driver": "json-file",
    "log-opts": {
    "max-size": "100m"
    },
    "storage-driver": "overlay2",
    "registry-mirrors":[
        "https://kfwkfulq.mirror.aliyuncs.com",
        "https://2lqq34jg.mirror.aliyuncs.com",
        "https://pee6w651.mirror.aliyuncs.com",
        "http://hub-mirror.c.163.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://registry.docker-cn.com"
    ]
}
4) 重新開機Docker,并啟動Kubelet
#systemctl daemon-reload
#systemctl restart docker
#systemctl enable kubelet
#systemctl start kubelet           

5、Master節點部署

1) 如果需要初始化Master節點,請執行#kubeadm reset;
2) 配置環境變量:
#echo export MASTER_IP=10.33.0.51 > k8s.env.sh
#echo export APISERVER_NAME=master1.lab.com >> k8s.env.sh
#sh k8s.env.sh
3) Master節點初始化:
#kubeadm init \
        --apiserver-advertise-address 0.0.0.0 \
        --apiserver-bind-port 6443 \
        --cert-dir /etc/kubernetes/pki \
        --control-plane-endpoint master1.lab.com \
        --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
        --kubernetes-version 1.18.2 \
        --pod-network-cidr 10.11.0.0/16 \
        --service-cidr 10.20.0.0/16 \
        --service-dns-domain cluster.local \
        --upload-certs 
# 初始化 Control-plane/Master 節點,命名參數說明           

kubeadm init \

--apiserver-advertise-address 0.0.0.0 \
# API 伺服器所公布的其正在監聽的 IP 位址,指定“0.0.0.0”以使用預設網絡接口的位址
# 切記隻可以是内網IP,不能是外網IP,如果有多網卡,可以使用此選項指定某個網卡
--apiserver-bind-port 6443 \
# API 伺服器綁定的端口,預設 6443
--cert-dir /etc/kubernetes/pki \
# 儲存和存儲證書的路徑,預設值:"/etc/kubernetes/pki"
--control-plane-endpoint kuber4s.api \
# 為控制平面指定一個穩定的 IP 位址或 DNS 名稱,
# 這裡指定的 kuber4s.api 已經在 /etc/hosts 配置解析為本機IP
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
# 選擇用于拉取Control-plane的鏡像的容器倉庫,預設值:"k8s.gcr.io"
# 因 Google被牆,這裡選擇國内倉庫
--kubernetes-version 1.17.3 \
# 為Control-plane選擇一個特定的 Kubernetes 版本, 預設值:"stable-1"
--node-name master01 \
#  指定節點的名稱,不指定的話為主機hostname,預設可以不指定
--pod-network-cidr 10.10.0.0/16 \
# 指定pod的IP位址範圍
--service-cidr 10.20.0.0/16 \
# 指定Service的VIP位址範圍
--service-dns-domain cluster.local \
# 為Service另外指定域名,預設"cluster.local"
--upload-certs
# 将 Control-plane 證書上傳到 kubeadm-certs Secret
4) 配置kubectl:
#rm -f .kube && mkdir .kube
#cp -i /etc/kubernets/admin.conf .kube/config
#chown $(id -u):$(id -g) $HOME/.kube/config   //可用于為普通使用者配置設定kubectl權限           

6、安裝Calico網絡插件:

叢集必須安裝網絡插件以實作Pod間通信,隻需要在Master節點操作,其他Node節點會自動建立相關Pod;
#wget https://docs.projectcalico.org/v3.8/manifests/calico.yaml
該配置檔案預設采用的Pod的IP位址為192.168.0.0/16,需要修改為叢集初始化參數中采用的值,本例中為10.10.0.0/16;
#sed -i "s#192\.168\.0\.0/16#10\.10\.0\.0/16#" calico.yaml
#kubectl apply -f calico.yaml
1) 等待所有容器狀态處于Running狀态:
#watch -n 2 kubectl get pods -n kube-system -o wide
#kubectl get nodes -o wide //檢視所有node狀态
2) 擷取join指令參數,并儲存輸出結果:
#kubeadm token create --print-join-command > node.join.sh           

7、Worker節點部署

1) 如果需要初始化Worker節點,請執行#kubeadm reset;
2) 從Master複制環境變量和加入叢集腳本:
#scp master:/root/k8s.env.sh master:/root/mode.join.sh .
#sh k8s.env.sh
#sh node.join.sh
或直接執行
#kubeadm join master1.lab.com:6443 --token e1xszv.7fa46uw7intwcbwi  \
    --discovery-token-ca-cert-hash sha256:2637022ef0928d0b390bf10b246ccf20e00f73966667bc711d683a8d71492e5a
3) 在Master節點檢視Worker狀态:
#kubectl get nodes -o wide
4) 移除Worker節點:
在Worker節點執行
#kubeadm reset -f
 在Master節點執行
#kubectl delete node <worker節點主機名>           

7、增加Master節點

1) 在待增加Master節點執行
#kubeadm join master1.lab.com:6443 --token e1xszv.7fa46uw7intwcbwi  \
    --discovery-token-ca-cert-hash sha256:2637022ef0928d0b390bf10b246ccf20e00f73966667bc711d683a8d71492e5a\
--control-plane --certificate-key 5253fc7e9a4e6204d0683ed2d60db336b3ff64ddad30ba59b4c0bf40d8ccadcd           

8、安裝Ingress Controller

1) 在Master節點執行,具體可以參考https://github.com/nginxinc/kubernetes-ingress/blob/v1.5.3/docs/installation.md
#kubectl apply -f https://kuboard.cn/install-script/v1.16.0/nginx-ingress.yaml           

9、安裝Kuboard圖形化管理界面

1) 在Master節點執行
#kubectl apply -f https://kuboard.cn/install-script/kuboard.yaml
檢視運作狀态,可能需要幾分鐘才能成為Running狀态:
#kubectl get pods -l k8s.eip.work/name=kuboard -n kube-system
2) 擷取Token權限,用于界面登入
#kubectl -n kube-system get secret $(kubectl -n kube-system get secret | grep kuboard-user | awk '{print $1}') -o go-template='{{.data.token}}' | base64 -d > admin-token.txt
#kubectl -n kube-system get secret $(kubectl -n kube-system get secret | grep kuboard-viewer | awk '{print $1}') -o go-template='{{.data.token}}' | base64 -d > read-only-token.txt
3) 管理節目通路
http://任意一個Worker節點的IP位址:32567           
參考連結
提供全面,高效和穩定的鏡像下載下傳服務。釘釘搜尋 ' 21746399 ‘ 加入鏡像站官方使用者交流群。”