Amazon EKS 升級終於有 7 日後悔期:控制平面退得,節點未必跟
Tech News

Amazon EKS 升級終於有 7 日後悔期:控制平面退得,節點未必跟

圖片:via iThome — https://www.ithome.com.tw/news/177573
TechLab 編輯部(譯)·

rollback 已全面上線,但實際涵蓋範圍窄過「還原叢集」

終於可以向後行一步

AWS 喺 7 月 1 日為 Amazon EKS 推出 Kubernetes 版本 rollback。iThome 報道,管理員完成 in-place upgrade 後,如果正式環境撞到 API 唔相容、應用異常或者其他升級問題,可以喺 升級完成後 7 日內,經 EKS Console、CLI 或 SDK 退返上一個 minor version。功能已經喺所有提供 EKS 嘅商用 Region 上線,唔另收費,香港 Region 自然都用得到。

呢個改動實用,原因係 Kubernetes 控制平面升級向來近乎單程路。升完先出事,團隊通常只可以盡快修好相容問題,或者開另一個舊版叢集再搬 workload。EKS 而家畀多條退路,確實可以縮短救火時間,不過將佢理解成「成個 cluster 一鍵還原」就會高估咗功能範圍。

Amazon EKS Console 入面揀選 rollback 叢集版本同查看相容性提示嘅畫面

圖片:AWS

AWS 真正幫你退咗啲咩

按 AWS 文件,rollback 會將 Kubernetes API server、控制平面元件同相關設定降返上一個 minor version,EKS platform version 就會轉用嗰個 Kubernetes 版本最新嘅 platform release。叢集入面嘅 etcd 狀態、Pods、Deployments、Services、persistent volumes 同資料都會保留,運行中嘅 workload 亦唔會因為控制平面降版而自動消失。

「保留」同「回復舊狀態」係兩回事。etcd 冇還原到升級前嘅 snapshot,升級後建立或修改過嘅資源仍然留喺度;persistent volume 入面嘅資料亦唔會倒帶。如果團隊喺新版本用咗舊版唔識嘅 API、欄位或者功能,就要先清理相關改動。即使夾硬用 --force 略過部分檢查,嗰批資源都仍會保留,之後有機會繼續出問題。

Add-on 同 worker node 要自己執

標準 EKS 叢集最容易中伏嘅位置係 data plane。EKS add-on 唔會自動降版,Managed Node Groups 亦要先用 UpdateNodegroupVersion 自行退返舊版;self-managed 同 hybrid nodes 就要換返相容嘅 AMI 或設定。Fargate worker node 本身唔支援降版,如果相關 Fargate Pods 已跟控制平面升到新版本,AWS 建議先刪除受影響 Pods,再退控制平面同重新部署。

EKS Auto Mode 會省事一截,AWS 會先替 Auto Mode worker nodes 降版,再處理控制平面,同時遵守 NodePool disruption budget 同 PodDisruptionBudget。不過限制設得太緊,或者 node 有 do-not-disrupt 標記,rollback 仍可能卡住。至於自行管理嘅 cluster-autoscaler、controller 同其他第三方 add-on,Rollback Readiness Insights 唔會全部替你檢查,版本相容仍然要團隊自己驗證。

7 日內都未必一定退到

Rollback 只接受 N 退到 N-1,唔可以一次跨多個 minor version;叢集亦必須曾經由舊版 in-place upgrade 上去,新開叢集冇得借呢項功能降版。目標版本要仍受 EKS 支援,叢集要處於 ACTIVE 狀態,而且升級後再升多次、超過 7 日,或者開咗舊版唔支援嘅 EKS 功能,都可能令退版無法啟動。退到 extended support 版本前,仲要先改用 EXTENDED policy,完成後相關延長支援收費亦會恢復。

EKS 觸發 rollback 前會檢查 API 同欄位相容性、叢集健康、kubelet 與 kube-proxy version skew,亦會查看 EKS-managed add-on。ERRORUNKNOWN 一般會擋住操作,部分結果可以用 --force 略過,但 7 日期限同功能相容等硬限制繞唔過。呢批 insights 亦只係當刻嘅 best-effort 檢查,檢查後再改 cluster,結果未必反映得到。

升級流程都要跟住改

要真正用好呢 7 日,較穩陣嘅做法係先升控制平面,留一段觀察期,確認 API、controller 同 workload 正常後,先升非 Auto Mode worker nodes;add-on 就預先揀同新舊兩版都相容嘅版本。咁樣一旦要退,唔使先將整批 node 再滾動更新一次,rollback 路徑會乾淨好多。AWS 自己嘅最佳實務亦建議將控制平面同 data plane 升級拆開。

Rollback 可以降低升級失手嘅代價,但 staging、API deprecation 掃描、分批升級、資料備份同復原演練照樣要做。尤其呢項功能唔會替你還原 etcd 或 persistent volume 內容,亦唔保證自家 controller 同第三方工具向後相容。對管理 EKS 嘅開發同 DevOps 團隊嚟講,下一步就要將 7 日觀察期、readiness checks 同 node 降版步驟正式寫入升級 runbook。


參考來源

本文根據原文及公開資料整理;資料有出入時,以原文及官方資料為準。

分享:WhatsAppThreadsTelegramFacebook