集羣框架:
172.30.0.81 k8s-master1
172.30.0.109 k8s-master2
172.30.0.89 k8s-node1
172.30.2.60 nginx vip
K8S master高可用配置 方便升級集羣的流量切換:
K8S集羣初始化安裝的版本爲1.10.1,後續考慮到集羣平滑升級方案,再次做了一系列測試,方案適用於1.10.1升級至1.11.0,1.11.0升級至1.12.0親測,整個升級過程不影響正常業務容器,需要提前設置後master負載均衡,摘除準備升級的master節點,將master節點上的容器“排幹”,在升級node節點的時候如是,對容器“排幹”操作,避免業務容器出現中斷的可能。
注意:kubeadm 集羣升級,只能按階梯升級,不能跨兩級從1.10直接升級至1.12
準備工作:
1.準備版本升級所需要的master,node節點的容器鏡像,可以到官網下載指定版本,或者通過獲取kubeadm默認版本的配置文件,拉取指定的鏡像,如
# kubeadm config print init-defaults > init-default.yaml
更換鏡像拉取地址爲阿里雲的,默認是k8s官網的,需要×××
imageRepository: registry.aliyuncs.com/google_containers
# kubeadm upgrade image pull --config=init-default.yaml
鏡像拉取到之後,需要修改標籤,要不然在升級部署的過程k8s會報鏡像拉取失敗,如
升級過程:
1.切換master節點的流量,將需要升級的master節點下掉
2.升級kubeadm到指定版本
# yum update kubeadm-1.12.0 --disableexcludes=kubernetes
查看是否爲預期版本
# kubeadm version
3.查看升級計劃是否正常
# kubeadm upgrade plan
正常則返回success
4.kubeadm upgrade apply v1.12.0
注意:升級過程中若遇到阻塞,可以查看控制檯的master相關pod,一般是因爲標籤不對拉不到鏡像,需要更改鏡像標籤
此時這臺升級的master的kube-apiserver,controller-manager,scheduler,kube-proxy組件均已升級完畢,可以通過kubectl describe pod查看版本
5.升級kubelet,修改kubelet配置文件,升級爲升級版本的配置
# yum upgrade kubelet-1.12.0 -y
# kubeadm upgrade node config --kubelet-version 1.12.0
重啓kubelet
# systemctl daemon-reload && systemctl restart kubelet
查看系統日誌看節點是否正常
# tail -F /var/log/message
查看節點是否升級成功
# kubectl get node 節點已升級至1.12.0
6.切換nginx流量,下掉另一臺沒有升級的master'
7.升級第二臺master的kubelet至1.12.0,重新加載kubelet配置
# yum upgrade kubelet-1.12.0 -y
# kubeadm upgrade node config --kubelet-version 1.12.0
重啓kubelet
# systemctl daemon-reload && systemctl restart kubelet
查看系統日誌看節點是否正常
# tail -F /var/log/message
查看節點是否升級成功
# kubectl get node 節點已升級至1.12.0
8.node worker節點升級,升級kubelet,加載新版本配置,重新啓動kubelet即可
9.升級完成