一 升級場景
1.1 小版本更新
小版本更新側重於穩定性更新。
1.2 大版本更新
大版本更新側重於功能更新,需要先在測試環境升級,更新后需要測試現有業務兼容性。測試通過后升級線上版本。
二 升級方案
2.1 藍綠部署
- 新部署一套新版本環境,
- 現有服務在新環境運行,兩套環境同時提供服務,
- 運行一段時間后,刪除舊環境。
缺點:成本高
2.2 滾動升級
- 先在負載均衡器中踢出需要升級的master節點。
- 升級master節點。
- 把升級后的master節點加入負載均衡器。
- 輪流按上面流程更新其它master節點。
- 更新完master節點后,開始更新node節點。
缺點:升級過程中,升級的節點不可提供服務,大版本更新時可能會出現兼容性問題。
三 升級准備
3.1 升級版本信息
現有運行版本k8s-v1.21.0
升級的版本k8s-v1.21.6
3.2 下載升級包
點擊查看代碼
root@k8s-deploy:~# k8s_version=v1.21.6
root@k8s-deploy:~# wget https://dl.k8s.io/${k8s_version}/kubernetes.tar.gz
root@k8s-deploy:~# wget https://dl.k8s.io/${k8s_version}/kubernetes-client-linux-amd64.tar.gz
root@k8s-deploy:~# wget https://dl.k8s.io/${k8s_version}/kubernetes-server-linux-amd64.tar.gz
root@k8s-deploy:~# wget https://dl.k8s.io/${k8s_version}/kubernetes-node-linux-amd64.tar.gz
root@k8s-deploy:/opt/kubernetes_v1.21.6# tar xf kubernetes.tar.gz
root@k8s-deploy:/opt/kubernetes_v1.21.6# tar xf kubernetes-server-linux-amd64.tar.gz
root@k8s-deploy:/opt/kubernetes_v1.21.6# tar xf kubernetes-client-linux-amd64.tar.gz
root@k8s-deploy:/opt/kubernetes_v1.21.6# tar xf kubernetes-node-linux-amd64.tar.gz
root@k8s-deploy:/opt/kubernetes_v1.21.6# ls -l kubernetes/server/bin/
total 1075200
-rwxr-xr-x 1 root root 50794496 Oct 28 02:02 apiextensions-apiserver
-rwxr-xr-x 1 root root 48570368 Oct 28 02:02 kube-aggregator
-rwxr-xr-x 1 root root 122175488 Oct 28 02:02 kube-apiserver
-rw-r--r-- 1 root root 8 Oct 28 02:00 kube-apiserver.docker_tag
-rw------- 1 root root 126966784 Oct 28 02:00 kube-apiserver.tar
-rwxr-xr-x 1 root root 116371456 Oct 28 02:02 kube-controller-manager
-rw-r--r-- 1 root root 8 Oct 28 02:00 kube-controller-manager.docker_tag
-rw------- 1 root root 121162752 Oct 28 02:00 kube-controller-manager.tar
-rwxr-xr-x 1 root root 43364352 Oct 28 02:02 kube-proxy
-rw-r--r-- 1 root root 8 Oct 28 02:00 kube-proxy.docker_tag
-rw------- 1 root root 105366528 Oct 28 02:00 kube-proxy.tar
-rwxr-xr-x 1 root root 47321088 Oct 28 02:02 kube-scheduler
-rw-r--r-- 1 root root 8 Oct 28 02:00 kube-scheduler.docker_tag
-rw------- 1 root root 52112384 Oct 28 02:00 kube-scheduler.tar
-rwxr-xr-x 1 root root 44851200 Oct 28 02:02 kubeadm
-rwxr-xr-x 1 root root 46645248 Oct 28 02:02 kubectl
-rwxr-xr-x 1 root root 55305384 Oct 28 02:02 kubectl-convert
-rwxr-xr-x 1 root root 118365552 Oct 28 02:02 kubelet
-rwxr-xr-x 1 root root 1593344 Oct 28 02:02 mounter
3.3 升級內容
3.3.1 master節點
root@k8s-master-01:~# ls -l /usr/local/bin/kube*
-rwxr-xr-x 1 root root 122064896 Nov 10 19:35 /usr/local/bin/kube-apiserver
-rwxr-xr-x 1 root root 116281344 Nov 10 19:35 /usr/local/bin/kube-controller-manager
-rwxr-xr-x 1 root root 43130880 Nov 10 19:36 /usr/local/bin/kube-proxy
-rwxr-xr-x 1 root root 47104000 Nov 10 19:35 /usr/local/bin/kube-scheduler
-rwxr-xr-x 1 root root 46436352 Nov 10 19:35 /usr/local/bin/kubectl
-rwxr-xr-x 1 root root 118062928 Nov 10 19:36 /usr/local/bin/kubelet
3.3.2 node節點
root@k8s-node-01:~# ls -l /usr/local/bin/kube*
-rwxr-xr-x 1 root root 43130880 Nov 10 20:40 /usr/local/bin/kube-proxy
-rwxr-xr-x 1 root root 46436352 Nov 10 20:40 /usr/local/bin/kubectl
-rwxr-xr-x 1 root root 118062928 Nov 10 20:40 /usr/local/bin/kubelet
四 升級master節點
4.1 踢出升級節點
4.1.1 修改負載均衡器
點擊查看代碼
root@ha-01:~# cat /usr/local/haproxy/haproxy.cfg
global
maxconn 100000
chroot /usr/local/haproxy
stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
user haproxy
group haproxy
daemon
pidfile /var/lib/haproxy/haproxy.pid
log 127.0.0.1 local2 info
defaults
option http-keep-alive
maxconn 100000
mode http
timeout connect 300000ms
timeout client 300000ms
timeout server 300000ms
listen stats
mode http
bind 0.0.0.0:9999
stats enable
log global
stats uri /haproxy-status
stats auth haadmin:123456
listen k8s-6443
bind 192.168.174.20:6443
mode tcp
log global
#server k8s-master-01 192.168.174.100:6443 check inter 3s fall 2 rise 5
server k8s-master-02 192.168.174.101:6443 check inter 3s fall 2 rise 5
server k8s-master-03 192.168.174.102:6443 check inter 3s fall 2 rise 5
4.1.2 重啟haproxy
root@ha-01:~# systemctl restart haproxy
4.2 停止服務
root@k8s-master-01:~# systemctl stop kube-apiserver.service kube-controller-manager.service kube-proxy.service kube-scheduler.service kubelet
4.3 復制二進制文件
root@k8s-deploy:/opt/kubernetes_v1.21.6# scp kubernetes/server/bin/kube-proxy kubernetes/server/bin/kube-apiserver kubernetes/server/bin/kube-controller-manager kubernetes/server/bin/kube-scheduler kubernetes/server/bin/kubelet kubernetes/server/bin/kubectl 192.168.174.100:/usr/local/bin/
kube-proxy 100% 41MB 2.5MB/s 00:16
kube-apiserver 100% 117MB 2.1MB/s 00:56
kube-controller-manager 100% 111MB 7.1MB/s 00:15
kube-scheduler 100% 45MB 8.3MB/s 00:05
kubelet 100% 113MB 11.5MB/s 00:09
kubectl 100% 44MB 11.7MB/s 00:03
4.4 啟動服務
root@k8s-master-01:~# systemctl start kube-apiserver.service kube-controller-manager.service kube-proxy.service kube-scheduler.service kubelet
4.5 驗證版本信息
root@k8s-master-01:~# kubectl get nodes
NAME STATUS ROLES AGE VERSION
192.168.174.100 Ready,SchedulingDisabled master 9h v1.21.6
192.168.174.101 Ready,SchedulingDisabled master 9h v1.21.0
192.168.174.102 Ready,SchedulingDisabled master 157m v1.21.0
192.168.174.106 Ready node 9h v1.21.0
192.168.174.107 Ready node 9h v1.21.0
192.168.174.108 Ready node 145m v1.21.0
4.6 升級其它master節點
依次執行以上步驟
4.7 驗證升級后版本信息
root@k8s-master-01:~# kubectl get nodes
NAME STATUS ROLES AGE VERSION
192.168.174.100 Ready,SchedulingDisabled master 9h v1.21.6
192.168.174.101 Ready,SchedulingDisabled master 9h v1.21.6
192.168.174.102 Ready,SchedulingDisabled master 164m v1.21.6
192.168.174.106 Ready node 9h v1.21.0
192.168.174.107 Ready node 9h v1.21.0
192.168.174.108 Ready node 152m v1.21.0
五 升級node 節點
注意:升級node節點docker版本需要對該節點做pod驅逐。
5.1 停止服務
root@k8s-node-01:~# systemctl stop kube-proxy.service kubelet.service
5.2 復制二進制文件
root@k8s-deploy:/opt/kubernetes_v1.21.6# scp kubernetes/server/bin/kube-proxy kubernetes/server/bin/kubelet kubernetes/server/bin/kubectl 192.168.174.106:/usr/local/bin/
kube-proxy 100% 41MB 108.2MB/s 00:00
kubelet 100% 113MB 91.7MB/s 00:01
kubectl 100% 44MB 70.5MB/s 00:00
5.3 啟動服務
root@k8s-node-01:~# systemctl start kube-proxy.service kubelet.service
5.4 驗證升級版本
root@k8s-node-01:~# kubectl get node
NAME STATUS ROLES AGE VERSION
192.168.174.100 Ready,SchedulingDisabled master 9h v1.21.6
192.168.174.101 Ready,SchedulingDisabled master 9h v1.21.6
192.168.174.102 Ready,SchedulingDisabled master 172m v1.21.6
192.168.174.106 Ready node 9h v1.21.6
192.168.174.107 Ready node 9h v1.21.0
192.168.174.108 Ready node 160m v1.21.0
5.5 升級其它node節點
依次執行以上操作
5.6 查看升級后版本信息
root@k8s-node-01:~# kubectl get node
NAME STATUS ROLES AGE VERSION
192.168.174.100 Ready,SchedulingDisabled master 9h v1.21.6
192.168.174.101 Ready,SchedulingDisabled master 9h v1.21.6
192.168.174.102 Ready,SchedulingDisabled master 174m v1.21.6
192.168.174.106 Ready node 9h v1.21.6
192.168.174.107 Ready node 9h v1.21.6
192.168.174.108 Ready node 162m v1.21.6