升級之前
- 運行的版本為1.14的kubeadm Kubernetes集群
- 確保備份所有重要組件,例如存儲在數據庫中的應用程序級狀態。kubeadm upgrade 不會觸及您的工作負載,只會觸及Kubernetes內部的組件,但備份始終是最佳實踐。
附加信息
- 升級后重新啟動所有容器,因為容器規范哈希值已更改。
- 您只能從一個MINOR版本升級到下一個MINOR版本,或者在同一個MINOR的PATCH版本之間升級。也就是說,升級時不能跳過MINOR版本。例如,您可以從1.y升級到1.y + 1,但不能從1.y升級到1.y + 2。
升級順序:
master --> node
升級前
# kubectl get nodes NAME STATUS ROLES AGE VERSION huoban-k8s-master01 Ready master 28d v1.14.1 huoban-k8s-master02 Ready master 28d v1.14.1 huoban-k8s-master03 Ready master 28d v1.14.1 huoban-k8s-node01 Ready <none> 28d v1.14.1 huoban-k8s-node02 Ready <none> 28d v1.14.1
准備工作
1、編譯自定義kubeadm,主要修改證書過期時間 # cd /usr/local/src/ # wget https://dl.google.com/go/go1.12.9.linux-amd64.tar.gz # wget https://github.com/kubernetes/kubernetes/archive/v1.15.1.tar.gz # tar -C /usr/local -xzf go1.12.9.linux-amd64.tar.gz # echo "export PATH=$PATH:/usr/local/go/bin" >> /etc/profile # source /etc/profile # go version # tar -xf v1.15.1.tar.gz # cd kubernetes-1.15.1/ # vim cmd/kubeadm/app/util/pkiutil/pki_helpers.go NotAfter: time.Now().Add(kubeadmconstants.CertificateValidity * 100).UTC() #修改成100年 # vim staging/src/k8s.io/client-go/util/cert/cert.go NotAfter: now.Add(duration365d * 100).UTC(), NotAfter: validFrom.Add(maxAge * 100) NotAfter: validFrom.Add(maxAge * 100), # make all WHAT=cmd/kubeadm GOFLAGS=-v 2、替換自帶kuberadm # cp /usr/local/src/kubernetes-1.15.1/_output/local/bin/linux/amd64/kubeadm /bin
一、升級第一個master節點
1、升級kubeadm # yum install -y kubeadm-1.15.1-0 --disableexcludes=kubernetes 2、驗證升級是否符合預期 # kubeadm version 3、 檢查升級信息 # kubeadm upgrade plan 4、 查看升級相關配置(可選) # kubectl -n kube-system get cm kubeadm-config -o yaml 5、選擇要升級到的版本 # kubeadm upgrade apply v1.15.1 # 升級不更新證書的方式 # kubeadm upgrade apply v1.15.1 --certificate-renewal=false 6、升級節點上的kubelet和kubectl # yum install -y kubelet-1.15.1-0 kubectl-1.15.1-0 --disableexcludes=kubernetes 7、重啟kubelet # systemctl daemon-reload # systemctl restart kubelet 8、更新節點 # kubeadm upgrade node 9、檢查master節點是否升級成功 # kubectl get nodes
二、升級其他master和其他node節點
1、升級所有node節點 # yum install -y kubeadm-1.15.1-0 --disableexcludes=kubernetes 2、使用master上的kubeadm替換其他節點的kubeadm # scp /bin/kubeadm root@node1:/bin # scp /bin/kubeadm root@node2:/bin 3、在master上執行,驅逐node節點好的pod
# kubectl drain k8s-node-15-84 --ignore-daemonsets # kubectl drain node1 --ignore-daemonsets # kubectl drain node2 --ignore-daemonsets 4、各node節點上執行 # kubeadm upgrade node 5、node節點升級kubelet
# yum install -y kubelet-1.15.1-0 kubectl-1.15.1-0 --disableexcludes=kubernetes
# systemctl daemon-reload # systemctl restart kubelet 6、在master上執行,將node節點設置可調度狀態
# kubectl uncordon k8s-node-15-84 # kubectl uncordon node1 # kubectl uncordon node2 7、查看各節點狀態信息 # kubectl get nodes 8、查看升級狀態 # kubectl get nodes NAME STATUS ROLES AGE VERSION huoban-k8s-master01 Ready master 11d v1.15.1 huoban-k8s-master02 Ready master 11d v1.15.1 huoban-k8s-master03 Ready master 11d v1.15.1 huoban-k8s-node01 Ready <none> 11d v1.15.1 huoban-k8s-node02 Ready <none> 11d v1.15.1
注意:
node節點不一定做驅逐pod,可以能會造成其它node節點負載問題,
pod在node節點來回調度也會出現問題.最好直接服務掛維護一次性
全部升級所有node節點,pod只重啟一次
1人點贊
kubernetes
備注:
2、替換自帶kuberadm # cp /usr/local/src/kubernetes-1.15.1/_output/local/bin/linux/amd64/kubeadm /bin
升級完成后發現證書有效期沒有變成100年。說明這部操作是無效的
實際上kubeadm路徑為:
[root@k8s-master-15-81 ~]# which kubeadm /usr/bin/kubeadm
作者:成功在於嘗試
鏈接: https://www.jianshu.com/p/4bf8c2584915
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。