1. 關閉swap、防火牆
# vim /etc/fstab,注釋包含swap行並重啟 # systemctl stop ufw && systemctl disable ufw
2. 配置阿里源
# echo "deb http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list
# apt update
如果遇到以下問題: 記錄提示的PUBKEY的最后8位,這里是BA07F4FB,然后執行:
# g#pg --keyserver keyserver.ubuntu.com --recv-keys BA07F4FB
# gpg --export --armor BA07F4FB | sudo apt-key add - # apt update
3. 安裝組件
# sudo apt install -y kubelet kubeadm kubectl
# apt-mark hold kubelet kubeadm kubectl
4. 安裝docker
配置阿里源/etc/apt/sources.list,寫入以下內容
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
# apt install docker.io -y
5. 配置kubelet的cgroup drive
需要確保kubelet的cgroup drive在docker的一致。 分別可以通過以下命令查看:
docker info | grep -i cgroup cat /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
若顯示不一樣,則添加或修改Environment="KUBELET_CGROUP_ARGS=--cgroup-dirver=cgroupfs"
:
systemctl daemon-reload systemctl restart kubelet
6. 啟動kubelet
systemctl enable kubelet && systemctl start kubelet
7. 下載K8S的Docker鏡像
使用kubeadm config images list
顯示需要下載的鏡像 k8s.gcr.io/kube-apiserver:v1.18.12 k8s.gcr.io/kube-controller-manager:v1.18.12 k8s.gcr.io/kube-scheduler:v1.18.12 k8s.gcr.io/kube-proxy:v1.18.12 k8s.gcr.io/pause:3.2 k8s.gcr.io/etcd:3.4.3-0 k8s.gcr.io/coredns:1.6.7 然后替換鏡像源為registry.cn-hangzhou.aliyuncs.com/google_containers拉取鏡像
# docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.18.12
# docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.18.12
# docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.18.12
# docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.18.12
# docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
# docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.3-0
# docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.6.7
然后修改tag 至此基礎的組件安裝完成,接下來要根據是master節點還是普通node節點來分別配置
8. master節點配置
# kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.18.12 --pod-network-cidr=10.0.0.0/24 --apiserver-advertise-address=192.168.10.105
注意: --image-repository 設置鏡像源
--pod-network-cidr=10.0.0.0/24表示集群將使用網絡的子網范圍
--kubernetes-version=v1.18.12指定K8S版本 --apiserver-advertise-address表示綁定的網卡IP,這里是master所在節點 若執行kubeadm init出錯或強制終止,則再需要執行該命令時,需要先執行kubeadm reset重置
執行成功后,它提示還需要執行:
# mkdir -p $HOME/.kube # sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config # sudo chown $(id -u):$(id -g) $HOME/.kube/config
此外最后還會提示其他節點加入集群時的命令:
# kubeadm join 192.168.10.10:6443 --token xrlg63.d1h8o7an82qevjv6 \ --discovery-token-ca-cert-hash sha256:6085f8dc1d0e19f531e2a2feda136bd9aef28c840e62da636acc1b2ffb83a51d
不過需要注意的是這里的token值24小時后會失效,因此,當以后還想加入節點時,可以先用kubeadm token list
命令查看當前的token表,並在master節點上執行openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
來查看hash 此時我們查看網絡狀態kubectl get pod -n kube-system
,可以發現都處於Pending阻塞狀態,此時,我們需要配置網絡,直接使用Calico,即執行:
# kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml # kubectl apply -f https://docs.projectcalico.org/v3.8/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml
(注意這里也是有版本號的,如果不是很清楚是多少,可以直接訪問官網獲取最新的進行嘗試:https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/) 過段時間,再執行kubectl get pod -n kube-system
就會發現都處於running狀態了。 最后將master設為工作節點:
# kubectl taint nodes --all node-role.kubernetes.io/master-
執行成功時會顯示
node/xl-virtualbox untainted
對於mater至此配置成功,可以使用kubectl get nodes
命令查看節點狀態。當然目前只有一個master節點。
9. node節點
對於普通的node節點,只需執行:
# kubeadm join 10.0.2.15:6443 --token zuhiop.bmxq2jofv1j68o9o \ --discovery-token-ca-cert-hash sha256:b65ca09d1f18ef0af3ded2c831c609dfe48b19c5dc53a8398af5b735603828fb
如果此時在master節點上使用kubectl get nodes
查看節點的狀態時'NotReady',請在對應主機上重啟docker服務即可:
# systemctl restart docker