為避免到期版本叢集存在的安全和穩定性風險,同時保證您業務的連貫性,Container ServiceACK採用原地升級的方式升級ACK靈駿叢集版本。您可以通過控制台升級叢集的Kubernetes版本,也可以獨立升級控制面和節點池,靈活控制升級節奏。本文介紹叢集升級前後的注意事項、升級流程、操作步驟等。
為什麼需要升級
ACK靈駿叢集支援Kubernetes 1.20升級至1.22。
主動升級叢集有以下好處:
降低安全和穩定性風險:隨著Kubernetes版本迭代,會不斷最佳化及修複發現的安全及穩定性漏洞,長期使用到期版本叢集會給業務帶來安全和穩定性風險。
使用新版本的新功能:隨著社區Kubernetes版本的演化,新版本包含新的功能和改進,ACK也將適配新版本,為您帶來更好的開發和營運體驗。
建議您參照下文提前主動升級叢集。
升級叢集時,Container ServiceACK會對您的叢集進行前置檢查,但無法保證檢查出所有不相容的功能配置和API。根據安全責任共擔模型,請您通過協助文檔、控制台資訊、站內信等渠道關注版本發布情況,並在叢集升級時提前瞭解相應版本的升級注意事項。
更多關於Kubernetes版本支援資訊,請參見ACK靈駿Kubernetes版本概覽及機制。
注意事項(重要)
版本說明
您可以登入Container Service管理主控台,在叢集頁面的版本列查看叢集的Kubernetes版本。確定待升級版本後,參見下方連結瞭解待升級版本的版本解讀、廢棄資源API、升級注意事項等,避免因高版本的功能變更導致業務功能不相容,從而影響叢集正常運行。
如果您的HELM Chart YAML檔案中使用了廢棄資源,請及時修改。更多資訊,請參見上方版本說明和廢棄API說明。
相關功能及自訂配置說明
如果您的叢集中使用了如下相關功能,請仔細閱讀以下說明及解決方案。
配置項 | 注意事項 | 推薦解決方案 |
Flexvolume儲存 | 叢集升級過程中,老版本的Flexvolume(v1.11.2.5及以前)掛載的OSS儲存卷會被重新掛載。 | 若您的叢集使用OSS儲存卷,請在叢集升級後重建相應的Pod。 同時,由於Flexvolume儲存外掛程式已經棄用,建議您將FlexVolume遷移至CSI外掛程式。具體操作,請參見遷移Flexvolume至CSI。 |
節點自動調整 | 如果您的叢集使用了節點自動調整功能,為保證自動調整功能不受影響,叢集在升級成功後會自動更新Cluster Autoscaler組件至最新版本。 | 確認Cluster Autoscaler組件版本正常。更多資訊,請參見啟用節點自動調整。 |
節點資源預留 | 升級至Kubernetes v1.18後,ACK會預設配置節點資源預留。如果叢集未配置資源預留且節點水位較高,升級後存在Pod驅逐後無法被快速調度的風險。 | 為節點預留部分資源,推薦CPU使用率不超過50%,記憶體使用量率不超過70%。更多資訊,請參見節點資源預留策略。 |
Loadbalancer配置 | 叢集外部存取叢集時,需要通過SLB來訪問。但當SLB設定 | 檢查是否完成對應配置,避免LoadBalancer暴露的SLB地址訪問不通的風險。如有相關問題,請參見Kubernetes叢集中訪問LoadBalancer暴露出去的SLB地址不通。 |
API Server | 叢集升級過程中,ACK竭力保障控制面的平滑升級,叢集上的應用不會中斷,但升級過程中可能會出現短暫的API Server中斷。如果您的應用強依賴於API Server,例如需要對資源List-Watch,API Server重啟會導致Watch 中斷,需要您自行保證在中斷時自動重試。 | 如果您的應用不訪問API Server,將不會受到升級影響;如果需要訪問API Server,則需要有失敗重試的能力。 |
kubectl | 叢集升級後,請同步升級您本地的kubectl版本。 如果未及時升級,在使用本地kubectl的過程中可能會因為與叢集API Server版本不同,發生類似 | 安裝或升級kubectl。具體操作,請參見安裝kubectl。 |
如果您對叢集曾有自訂配置,請仔細閱讀以下說明。
配置項 | 說明 |
網路 | 叢集升級需要使用yum下載升級所需的軟體包。如果您的叢集曾自行修改節點的網路設定或者使用了自訂的作業系統鏡像,需確保節點yum能正常使用。您可以執行 |
作業系統鏡像 | 自訂動作系統鏡像非Container Service官方嚴格驗證。ACK無法完全保證升級成功。 |
其他 | 如果您對叢集有過配置更改,例如開啟了SWAP分區、曾通過黑屏操作修改kubelet配置等,叢集升級過程有可能失敗,或自訂配置有可能丟失。 |
升級說明
升級ACK叢集時,包括控制面升級和節點池升級。大致流程如下。
升級前準備
確定待升級叢集的Kubernetes版本後,仔細閱讀待升級版本的ACK版本發布說明,瞭解升級注意事項,避免升級時潛在的功能不相容問題。請在業務低峰期執行升級操作。
叢集升級中
控制面和節點池升級前,均需通過前置檢查,等待所有檢查項均已通過或修複完成後,可進入後續的升級操作。
控制面升級
ACK託管叢集、ACK Serverless叢集
採用滾動升級的方式。升級控制面組件,包括kube-apiserver、kube-controller-manager、kube-scheduler。
ACK專有叢集
採用原地升級的方式,以更大程度地保證業務的連貫性,減少資料移轉和配置調整的風險。具體流程如下。
當ACK檢測到您的叢集需要進一步升級etcd和Container Runtime時,將依次升級Master節點上的etcd和Container Runtime。
依次選擇Master節點,一次只升級一個Master節點,並展示當前正在升級的Master節點的編號。
升級Master組件,包括kube-apiserver、kube-controller-manager、kube-scheduler。
升級Master節點上的kubelet。
節點池升級
節點池升級包括kubelet和容器運行時的升級。如運行時需從Docker升級為containerd,系統會通過替換系統硬碟(替盤升級)的方式完成升級,即更換磁碟的同時進行作業系統或應用程式的升級。請提前做好系統硬碟的備份工作。其他情況下,保持使用原地升級方式。更多資訊,請參見升級節點池。
ACK將叢集中的節點按照分批策略執行分批升級。
根據節點池依次執行,同一時間只對一個節點池執行升級。
同一個節點池內採用分批升級。第一批升級的節點數為1,後續的批次以2的冪數進行增長。如果暫停後重新恢複升級,依然遵循該分批策略。您可以在節點池升級頁面配置每批升級節點的最大數量。具體操作,請參見升級節點池。
叢集升級後
核驗叢集版本資訊,檢查節點池運行是否正常,並檢查叢集業務運行是否正常。
操作步驟
升級控制面
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在叢集升級頁面選擇可升級的目標版本,然後單擊前置檢查,提前掃描叢集升級可能存在的潛在風險。
檢查完成後,您可以在前置檢查結果地區查看檢查結果。
結果正常時,升級檢查成功,請繼續進行叢集升級操作。
結果提示異常時,不影響當前叢集的運行及叢集狀態。您可以參見推薦的解決方案進行修複。關於典型修複方案,請參見叢集檢查項及修複方案。
說明Kubernetes 1.20及以後版本的叢集升級前檢查時,會檢查目前的版本是否使用了廢棄API,檢查結果不會影響升級流程,僅作為提示資訊。詳細內容,請參見廢棄API說明。
前置檢查通過後,單擊立即升級,按照頁面提示進行控制面的升級。
升級過程中,您可以在頁面右上方查看升級歷史。
升級完成後,請在叢集列表查看叢集版本,確認升級是否成功。新擴容節點的版本也將遵循控制面版本。
後續操作:升級節點池
控制面升級完成後,新擴容節點的版本遵循控制面的版本。建議您在業務低峰期儘快完成存量節點的升級,並在升級完成後查看kubelet版本,確認升級是否成功。具體操作,請參見升級節點和升級靈駿節點池。
叢集升級常見問題
如何處理叢集升級失敗並提示the aliyun service is not running on the instance?
如何處理節點PLEG not healthy?
參考資訊:控制面及節點池升級流程
控制面升級流程
ACK靈駿叢集將按照以下流程升級您叢集的控制面。具體策略如下。
升級控制面和託管組件,包括kube-apiserver、kube-controller-manager和kube-scheduler等。
升級Kubernetes組件,例如kube-proxy等。
節點池升級流程
相關文檔
當您在升級ACK靈駿叢集過程中遇到問題,請參見叢集檢查項及修複方案進行定位和解決。