升級叢集Kubernetes版本時,請在控制面升級後及時在業務低峰期完成節點池的升級。節點池升級包括kubelet升級和容器運行時升級。執行升級操作前,ACK會提供前置檢查,識別並提示可能影響升級的風險因素,以便實現平滑升級。
注意事項
節點伸縮
若叢集啟用了節點伸縮功能,為保證自動調整功能不受影響,叢集在升級成功後會自動更新cluster-autoscaler組件至最新版本。叢集升級後,請確認cluster-autoscaler組件版本是否正常。更多資訊,請參見啟用節點自動調整。
叢集升級期間,伸縮模式為極速模式的節點可能會因節點關機而無法完成升級。如果升級結束後存在節點因極速模式未被升級,建議手動移除該節點。
升級叢集至1.18版本後,ACK會預設配置節點資源預留。如果叢集未配置資源預留且節點水位較高,升級後存在Pod驅逐後無法被快速調度的風險。請為節點預留部分資源,推薦CPU使用率不超過50%,記憶體使用量率不超過70%。更多資訊,請參見節點資源預留策略。
在1.24及以下版本的叢集中,如果工作負載的Pod只配置了啟動探針(Startup Probe),Pod會在kubelet重啟後出現短暫的NotReady現象。建議您採用多副本部署策略,將工作負載分散在多個節點上,以確保在某個節點重啟期間仍有足夠的可用Pod。
如果某個Pod通過
LoadBalancer
類型的Service的SLB地址訪問同一節點上的另一個Pod,並且該Service的externalTrafficPolicy
設定為Local
,那麼在節點輪轉後,兩個Pod可能不再位於同一個節點上,繼而導致網路不通。自訂動作系統鏡像非ACK官方嚴格驗證。ACK無法完全保證升級成功。
叢集升級需要使用yum下載升級所需的軟體包。如果您的叢集曾自行修改節點的網路設定或者使用了自訂的作業系統鏡像,需確保節點的yum能正常使用。您可以執行
yum makecache
進行檢查。如果您對叢集有過配置更改,例如開啟了SWAP分區、曾通過黑屏操作修改kubelet配置或運行時配置等,叢集升級過程有可能失敗,或自訂配置可能會被覆蓋。
通過替盤方式升級節點時,ACK會進行節點排水操作,遵循Pod Disruption Budget(PDB)的前提下將節點上的Pod驅逐至其他可用節點。為確保服務高可用性,建議您採用多副本部署策略,將工作負載分散在多個節點上,同時為關鍵業務配置PDB,控制同時中斷的Pod數量。
節點排水的預設逾時時間為30分鐘。如果在逾時時間內未能完成Pod遷移,ACK將終止本次升級以確保業務穩定性。
如果節點中的Pod引用了Hostpath,且該Hostpath指向系統硬碟,替盤升級後Hostpath目錄中資料會丟失。
節點池升級過程中僅支援擴容操作,不支援縮容操作。
如果您的節點為游離節點,即未被節點池管理的Worker節點,需參見遷移游離節點至節點池完成遷移。
功能說明
節點池升級包括kubelet升級和容器運行時升級。
kubelet升級:將節點池內節點的kubelet升級到與控制面相同的版本。預設採取原地升級。
容器運行時升級:容器運行時發布新版本後,可升級節點的容器運行時至最新版本。
從Docker升級為containerd時,將通過替盤重設節點(替換節點系統硬碟)的方式升級節點池節點,升級過程將清除系統硬碟上的所有內容。替盤升級前,請務必備份系統硬碟中的重要資料。更多資訊,請參見將節點容器運行時從Docker遷移到containerd。
從containerd升級至更新版本的containerd時,預設採取原地升級。節點上的
/etc/containerd/config.toml
會被替換為ACK提供的新版本。說明運行時升級過程中可能會造成Pod Prober、Lifecycle Hook失敗,也可能會出現Pod原地重啟情況。
操作步驟
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在節點池列表的操作列,選擇目標節點池對應的更多 > Kubelet 升級。
查看待升級對象(容器運行時和/或kubelet),指定待升級節點(所有節點或部分節點),選擇升級方式,並配置批量升級的策略。
升級方式:
批量升級策略:
每批次執行最多節點數:升級過程會根據設定的最大並行數依次對節點進行升級,最大可設定為10。關於升級流程說明,請參見下方參考資訊:原地升級和替盤升級。
自動暫停策略:在節點升級過程中的暫停策略。
每批次間隔時間:自動暫停策略為不暫停時,選擇每個升級批次之間是否需要時間間隔或間隔的時間長度。可選範圍為5~120分鐘。
單擊前置檢查,並在前置檢查通過後按照頁面提示開始升級操作。
說明如果前置檢查執行失敗或者存在警告項,請參見異常檢查項修複方案或根據頁面提示查看檢查報告,進行排查和治理。
升級時,在事件輪轉地區,您可以進行如下操作。
暫停:叢集暫停狀態為節點池升級的中間狀態,建議您不要在此期間對叢集進行操作,並儘快完成升級過程。處於中間狀態的叢集會在7日之後關閉升級過程,並清理一切升級相關的事件和日誌資訊。
暫停後,已完成升級的節點的kubelet和容器運行時不支援版本回退。
取消:取消升級。單擊取消後,已完成升級的節點的kubelet和容器運行時不支援版本回退。
升級後,您可以在節點頁面單擊節點名稱,在基本資料頁簽查看節點的kubelet版本、容器運行時版本等資訊是否符合預期。
參考資訊:原地升級和替盤升級
原地升級和替盤升級流程
原地升級和替盤升級的流程如下。節點池升級過程會根據設定的最大並行數,依次對節點進行升級,並行節點數最大可設定為10。每個批次的升級節點數依次為1、2、4、8……直至達到最大並行數。達到最大並行數後,每個批次都按最大並行數的節點進行升級。例如,最大並行數設定為4,那麼第一批升級的節點個數為1,第二批升級的節點個數為2,第三批升級的節點個數為4,以後每批的升級節點個數均為4。
下圖以最大並行數=N時為例,介紹分批次執行的流程,即每個批次的升級節點數依次為1、2、4、8……直至達到最大並行數N。
原地升級單個節點內部的升級邏輯
執行升級前置檢查。如果容器有重大例外狀況(例如無法正常服務ttrpc請求、容器內進程無法正常響應訊號等),則會停止升級。
將當前容器和Pod狀態保留到tmp臨時目錄。
將containerd、crictl及相關設定檔升級為ACK提供的新版本,重啟containerd(此行為不會影響運行中的容器)。如果您之前在節點上修改過
/etc/containerd/config.toml
配置,此次升級會導致您的修改被覆蓋。確保kubelet處於正常運行狀態,節點就緒。
替盤升級單個節點內部的升級邏輯
執行節點排水(若節點可調度,系統會將其設定為不可調度)。
ECS關機,即停止節點。
更換系統硬碟,系統硬碟ID會變更,但是雲端硬碟類型、執行個體IP地址以及彈性網卡MAC地址保持不變。
重新初始化節點。
重啟節點,節點就緒(同時設定節點為可調度)。
如果某節點在執行節點排水前已被設定為不可調度,那麼在替盤升級完成後,該節點不會自動回復為可調度。
常見問題
節點池升級後支援版本回退嗎?
kubelet和容器運行時在版本升級後均不支援版本回退。作業系統在升級後支援版本回退,回退時需要確保原鏡像仍被該節點池所支援。
升級過程中業務是否受影響?
原地升級:Pod不會重啟,不會影響業務。
替盤升級:替盤升級時會對節點排水,如果Pod實現了優雅退出邏輯(Graceful shutdown and zero downtime deployments in Kubernetes),並且多副本部署在多個節點上,對業務沒有影響。為了避免同一個應用的多個副本都在一個批次內進行升級,可以手動調整並行數小於Pod副本數。
每個批次升級大概需要多長時間?
原地升級:5min內
替盤升級:如果不涉及快照,一般在8min內。如果在升級時選中快照,升級會在快照結束後執行,執行時間取決於快照時間。節點池升級容忍快照40min,如果40min內快照還未結束會判定節點升級逾時失敗,失敗的節點此時還未開始執行升級操作。如果沒有在系統硬碟中儲存業務資料,可以不選中快照,避免升級用時過久。
節點升級過程中節點資料會丟失嗎?
以替換節點系統硬碟的方式執行節點運行時升級時,請不要在系統硬碟中儲存重要資料或者提前做好備份工作。資料盤在升級過程中則不受影響。
節點替換系統硬碟後,節點的IP地址會變嗎?
替換系統硬碟的方式中系統硬碟ID會變更,但是雲端硬碟類型、執行個體IP地址以及彈性網卡MAC地址保持不變。更多資訊,請參見更換作業系統(系統硬碟)。
如何升級不屬於任何節點池的叢集節點?
在節點池功能上線前建立的老叢集,會存在不屬於任何節點池的游離節點。您可以將游離節點遷移到一個節點池後,對節點池進行升級。關於如何遷移游離節點至節點池,請參見遷移游離節點至節點池。
節點運行時由Docker切換為containerd後,Docker目錄未被清理佔用磁碟空間怎麼辦?
除Kubernetes叢集可管理的容器、鏡像、日誌等檔案外,Docker目錄中也包含您自行建立的檔案路徑。如無需使用,請在運行時切換後手動刪除資料盤中的Docker目錄。
如何基於快照還原資料?
節點池升級時支援為節點建立快照,該快照會預設保持30天,您也可以手動提前清理快照。在極端情境下,例如發現升級後資料丟失,您可以通過下面的方式對資料進行還原。
如果是原地升級,例如只升級了kubelet的版本,您可以通過直接復原快照的方式還原資料,請參見使用快照復原雲端硬碟。
如果是替盤升級,例如升級了作業系統或容器運行時,您可以通過快照建立雲端硬碟的方式還原資料,請參見使用快照建立雲端硬碟。
相關文檔
您也可以啟用叢集自動升級功能,降低版本營運壓力,請參見自動升級叢集。
關於containerd的變更記錄,請參見containerd運行時發布記錄。
ACK託管節點池提供作業系統CVE漏洞自動修複功能,請參見作業系統CVE漏洞自動修複(推薦)。
Kubernetes 1.24將不再支援將Docker作為內建容器運行時,請將節點容器運行時從Docker遷移到containerd,請參見將節點容器運行時從Docker遷移到containerd。
Docker和containerd的命令列工具不同,關於常用命令對比,請參見Docker和containerd兩種容器引擎常用命令對比。
推薦您及時更新作業系統鏡像版本,請參見更換作業系統。