k8s之k8s集群版本升級


一 升級場景

1.1 小版本更新

小版本更新側重於穩定性更新。

1.2 大版本更新

大版本更新側重於功能更新,需要先在測試環境升級,更新后需要測試現有業務兼容性。測試通過后升級線上版本。

二 升級方案

2.1 藍綠部署

  1. 新部署一套新版本環境,
  2. 現有服務在新環境運行,兩套環境同時提供服務,
  3. 運行一段時間后,刪除舊環境。

缺點:成本高

2.2 滾動升級

  1. 先在負載均衡器中踢出需要升級的master節點。
  2. 升級master節點。
  3. 把升級后的master節點加入負載均衡器。
  4. 輪流按上面流程更新其它master節點。
  5. 更新完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

 


免責聲明!

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



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