K8S基本操作-27-更新K8S Cluster
基本概念
以下是更新 K8S 需要更新的組件:
(以下為同版本的組件)
- kube-apiserver (位於 Master 上)
- Controller-manager (位於 Master 上)
- kube-scheduler (位於 Master 上)
- kubelet (位於 Worker上)
- kube-proxy (位於 Worker上)
- kubectl (命令行工具,可以在任何地方)
(以下為不同版本的組件)
- ETCD CLUSTER
- CoreDNS
安全穩健的更新
請記住每次只更新一個版本,例如:v1.11更新到v1.12。
更新時建議採用的工具
如果沒有雲供應商提供便利更新,則建議用kubeadm
進行更新。
更新時服務是否會停擺?
如果從 Master 開始更新,接著更新 Worker ,只要中途不要有 Pod 損壞, Master 消失後 Worker 仍會持續運作。(但 Worker 無法自行補充損壞的 Pod。 )
更新順序
可以用以下更新方式一次更新一個 Node。
Master -> Worker1 -> Worker2 -> Worker3
單個 Node 更新流程
將 Node 上的 Pod 移動到其他的 Node
使用 Drain 指令:
kubectl drain <Node名稱>
例如,Node名稱為node-1
。
kubectl drain node-1
檢查更新計畫
以下指令可以看到可用的最新版本,跟目前版本的差異。
kubeadm upgrade plan
更新 kubeadm 到要更新道的版本
apt-get upgrade -y kubeadm=1.12.0-00
Kubeadm 進行更新
kubeadm upgrade apply v1.12.0
更新 Kubelet
Kubelet 是 Kubernetes 集群中運行在每個節點上的核心組件,它負責管理節點上的容器和與 Master 節點的通信。
Kubelet 不會由 kubeadm 進行更新,需要手動更新:
apt-get upgrade -y kubelet=1.12.0-00
更新後由於 Kubelet 是以 Daemon 的型態執行,所以需要重新啟動:
systemctl restart kubelet
取消 Node 的封鎖,重新允許節點調度
kubectl uncordon <Node名稱>
例如,Node名稱為node-1
。
kubectl uncordon node-1