Kubernetes系列之kubeadm升級1.14.1到1.15.1版本


升級之前

  • 運行的版本為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
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM