iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0
DevOps

今天不學遺傳學,跟著Kubernetes種豌豆系列 第 21

Day21. 叢集版本更新

  • 分享至 

  • xImage
  •  

Kubernetes只會支援3個最新的版本,所以必須要固定更新

發行版本 Kubernetes Release
遵循語意化版本(Semantic Versioning)管理命名,分有3個部份x.y.z,例如v1.31.0

  1. Major(x): 主版本
  2. Minor(y): 次版本,增添功能
  3. Patch(z): 維護、修復bug

每次更新的Release包含所有controle plane的元件,但部分元件位於不同project,所以版本可能不同,例如:ETCD server或CoreDNS,而更新的時候,元件並不一定要全為相同版本,可有的版本差異:

  • api-server:作為各元件溝通的中樞,需為整體最高版本(x)
  • controller manager、kube-scheduler:可為降一版(x ~ x-1)
  • kubelet、kube-proxy:可為降二版 (x ~ x-2)

整體而言,更新的步驟如下:

  1. 更新control plane元件
  2. 更新叢集的worker nodes
  3. 更新其餘客戶端,如kubectl
  4. 根據API異動調整組態文件(manifest)及資源

在開始前,根據官方建議,指定使用新的package repositoriespkgs.k8s.io,原本的apt.kubernetes.io and yum.kubernetes.io已在2023年9月棄用,在control plane及worker nodes皆必須先完成
首先確定自己的OS作業系統版本:cat /etc/*release*,根據官網指示
假設是Debian, Ubuntu或其他使用apt/apt-get的作業系統

  1. 指向新的repository,版本v1.28部份,視需求更新為目標版本
    echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
  2. 下載repository的public signing key,此處的版本無所謂,每個K8s的repo都用同一把key
    curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

若以kubeadm建立叢集,前置作業先更新kubeadm
control plane
0. 更新軟體資料庫並查看可用的K8s版本
apt update
sudo apt-cache madison kubeadm

  1. 首先查看更新計畫,說明現有版本,跟可更新的版本,並指示kubelet需在套用更新後,手動更新
    kubeadm upgrade plan
  2. 若kubeadm的版本太低,需先更新到與kubernetes版本一致
    apt get upgrade -y kubeadm=<version,例如v1.13.4>
  3. 套用版本更新,此時可查看node,資訊顯示仍為舊版本,此版本資訊為kubelet註冊到api-server的版本,非api-server本身的版本
    kubeadm upgrade apply <version,例如v1.13.4>
    kubectl get nodes
  4. 最後更新kubelet版本
    apt get upgrade -y kubelet=<version, 例如1.12.0>
  5. 更新後需重啟kubelet
    systemctl daemon-reload
    systemctl restart kubelet
    kubectl get nodes,此時再檢查,即可看到更新後的control plane node

worker nodes更新策略
建議是一次更新一個node,或是一次只更新少部分node,更新的策略有3種

  1. 全部一起升級,但會有暫時無法提供服務的問題
  2. 逐步升級,暫時將workload移到別的nodes
  3. 搬移workload到新增的新版本nodes,邊移除舊版本

更新的流程如下:

  1. 更新kubeadm
    apt-get upgrade -y kubeadm=<version>
  2. 將node上面的資源轉移
    kubectl drain <node-to-drain> --ignore-daemonsets
  3. 套用版本更新,用upgrade即可
    kubeadm upgrade node
  4. 更新kubelet
    apt-get upgrade -y kubelet=<version>
  5. 更新後重啟kubelet
    systemctl daemon-reload
    systemctl restart kubelet
    6.標記為schedulable
    kubectl uncordon <name>

在官網上有針對各版本的詳細更新指示及指令,Upgrading kubeadm clusters


上一篇
Day20. 趨於複雜的Service,Ingress單一入口網出場
下一篇
Day22. 備份與還原 backup and restore
系列文
今天不學遺傳學,跟著Kubernetes種豌豆30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言