Kubernetes 版本升級之路


首先,讓我們定義一下 Kubernetes 中 hard-way 的概念:Kubernetes 中的困難方式是為了學(xué)習(xí)和應(yīng)用每一步,但是你要了解該步驟背后的內(nèi)容。因此,您每點擊一個命令都會發(fā)生神奇的事情,最后通過一個很長的路徑和命令才能升級您的集群。第一次看起來可能很難,但這將是您之后升級的經(jīng)驗積累,因為您將熟悉每個 Kubernetes 升級組件,因為您將使用大量命令工具,這可以幫助您進行故障排除并為您提供更多的集群可控性。
現(xiàn)在讓我們跳到一個演示中,用我們的雙手來操作命令行。我們將把一個集群從1.22版升級到1.23版。
前提條件
確保備份所有重要組件,例如存儲在數(shù)據(jù)庫中的應(yīng)用狀態(tài)。Kubernetes 升級不涉及正常的工作負載,只涉及與 Kubernetes 相關(guān)的組件,但備份始終是最佳實踐。 必須禁用Swap交換
步驟
master節(jié)點
清空主節(jié)點
驅(qū)逐/刪除主節(jié)點的所有 Pod(鏡像 Pod 除外)(不能通過 API 服務(wù)器刪除),以便能夠執(zhí)行升級。如果有?daemon set-managed pods,drain 不會在沒有?--ignore-daemonsets?的情況下繼續(xù)進行,因為這些 pods 將立即被 daemon set 控制器替換,它會忽略不可調(diào)度的標記。
#kubectl?drain?master?--ignore-daemonsets
node/master?already?cordoned
WARNING:?ignoring?DaemonSet-managed?Pods:?kube-system/kube-proxy-lfplf,?kube-system/weave-net-fv7sn
evicting?pod?kube-system/coredns-64897985d-pl2v9
evicting?pod?kube-system/coredns-64897985d-65g5p
pod/coredns-64897985d-65g5p?evicted
pod/coredns-64897985d-pl2v9?evicted
node/master?drained
Draining 成功后,您可以檢查節(jié)點的狀態(tài)以確保它是SchedulingDisabled,這意味著該節(jié)點上不能調(diào)度任何 Pod。
#kubectl?get?nodes?
NAME?STATUS?ROLES?VERSION?
master?Ready,?SchedulingDisabled?control-plane,master?v1.22.2?
worker?Ready??v1.22.2
更新系統(tǒng)中的包管理器,根據(jù)您的操作系統(tǒng),它可能會有所不同。
#apt-get?update
在包管理器中搜索可用的 kubeadm 包,并使用 grep 過濾結(jié)果以獲得您需要的版本。在我們的例子中是 1.23 版本。
#apt-cache?show?kubeadm?|?grep?1.23
輸出應(yīng)類似于以下內(nèi)容:
Version:?1.23.1–00
Filename:?pool/kubeadm_1.23.1–00_amd64_6bc970cf9bf5349ba18526f77c6ac16caf2a52b6a7b0e40753541ebef52ad99f.deb
Version:?1.23.0–00
Filename:?pool/kubeadm_1.23.0–00_amd64_36016a07eb5c2bfae656cfee1b3848930757d201b474fea1cce1ecd507b94f0b.deb
保留 kubectl 和 kubelet包,防止它們被自動安裝、升級或刪除。這是一個預(yù)防措施。
#apt-mark?hold?kubectl?kubelet
取消保留 kubeadm 包,升級后再次 hold。
#apt-mark?unhold?kubeadm
#apt-get?install?kubeadm=1.23.1–00
#apt-mark?hold?kubeadm
檢查 kubeadm版本以確保它已升級。
#kubeadm?version

查看kubeadm升級計劃,看看還有哪些組件需要升級。
#kubeadm?upgrade?plan

應(yīng)用計劃,你應(yīng)該可以看到升級成功的消息
#kubeadm?upgrade?apply?v1.23.1

取消保留 kubectl 和 kubelet包,升級它們?nèi)缓笤俅纬钟兴鼈儭?/section>
請注意,如果您要復(fù)制此內(nèi)容,您可能需要刪除“-”并在終端中再次輸入,因為它可能被視為拼寫錯誤。
#apt-mark?unhold?kubelet?kubectl?
#apt-get?install?kubelet=1.23.1-00?kubectl=1.23.1-00?
#apt-mark?hold?kubelet?kubectl
重新啟動 kubelet 并檢查是否正常運行。
#systemctl?restart?kubelet
#systemctl?status?kubelet
運行 kubeadm upgrade plan check以確保一切都已升級。
#kubeadm?upgrade?plan

檢查節(jié)點狀態(tài)和主節(jié)點的新版本。
#kubectl?get?nodes
NAME???????STATUS????????????????????ROLES???????????????????VERSION
master?????Ready,SchedulingDisabled??control-plane,master????v1.23.1
worker?????Ready???????????????????????????????????????v1.22.2
解封主節(jié)點,使其再次可調(diào)度
#kubectl?uncordon?master
#kubectl?get?nodes
NAME???????STATUS????ROLES??????????????????VERSION
master?????Ready?????control-plane,master???v1.23.1
worker?????Ready??????????????????????v1.22.2
這里我們完成了主節(jié)點,讓我們移動到工作節(jié)點
worker 節(jié)點
我們將重復(fù)使用以下相同的命令
清空主節(jié)點
您可能需要使用“force”參數(shù)來強制驅(qū)逐一些 pod。
#kubectl?drain?worker?--ignore-daemonsets?--force
node/cks-worker?drained
更新包管理器。取消保留,安裝 kubeadm。
#apt-get?update
#apt-mark?unhold?kubeadm
#apt-get?install?kubeadm=1.23.1-00
#apt-mark?hold?kubeadm
取消保留,安裝,然后保留 kubectl 和 kubeadm。
#apt-mark?unhold?kubelet?kubectl?
#apt-get?install?kubelet=1.23.1-00?kubectl=1.23.1-00?
#apt-mark?hold?kubelet?kubectl
重啟kubelet進程并檢查其狀態(tài)
#systemctl?restart?kubelet
#systemctl?status?kubelet
檢查節(jié)點狀態(tài)
#kubectl?get?nodes
NAME???????STATUS???????????????????ROLES?????????????????VERSION
master?????Ready????????????????????control-plane,master??v1.23.1
worker?????Ready,SchedulingDisabled?????????????????v1.23.1
解封worker節(jié)點,使其再次可調(diào)度
#kubectl?uncordon?worker
#kubectl?get?nodes?
NAME?STATUS?ROLES?VERSION?
master??????Ready??????control-plane,master????v1.23.1
worker??????Ready????????????????????????v1.23.1
至此升級成功!!
結(jié)論
我們將 Kubernetes 集群版本從 1.22.2 升級到 1.23.1 Kubeadm 包升級到 1.23.1 版本,然后使用 kubeadm 升級集群的其他組件。Kubectl 和 Kubelet 升級到同一個版本 1.23.1 一般來說,基本步驟就是清空節(jié)點,取消持有安裝包,升級它然后再次持有它,最后解封節(jié)點。
原文鏈接:https://blog.devgenius.io/kubernetes-upgrade-the-hard-way-be2c75bb9b8f
文章轉(zhuǎn)載:性能與架構(gòu)
(版權(quán)歸原作者所有,侵刪)
有收獲,點個在看?


