全部產品
Search
文件中心

Container Service for Kubernetes:節點即時彈性FAQ

更新時間:Oct 24, 2024

本文介紹使用節點即時彈性功能時可能遇到的常見問題及解決方案。

索引

分類

二級分類

跳轉連結

節點即時彈性的擴縮容行為

擴容行為相關

縮容行為相關

自訂的擴縮容行為

通過Pod控制擴縮容行為

如何通過Pod控制節點即時彈性的節點縮容?

通過節點控制擴縮容行為

節點即時彈性組件相關

擴容行為相關

節點即時彈性可類比判斷的資源有哪些?

已支援根據以下資源進行擴縮容行為的類比和判斷。

cpu
memory
ephemeral-storage 
aliyun.com/gpu-mem # 僅支援共用GPU
nvidia.com/gpu

節點即時彈性是否支援根據Pod Request資源在節點池中擴容合適資源的執行個體規格?

已支援。例如,您為開啟Auto Scaling的節點池配置了4 Core 8 GB和12 Core 48 GB的兩種執行個體規格,Pod Request資源為2 Core,當節點即時彈性執行擴容操作時,會優先將Pod調度到4 Core 8 GB的節點上。如果後續4 Core 8 GB升配為8 Core 16 GB,節點即時彈性會自動讓Pod運行在8 Core 16 GB的節點上。

節點池配了多個執行個體規格,節點即時彈性預設如何選擇?

根據節點池配置的執行個體規格,節點即時彈性會定期排除庫存不足的執行個體規格,然後根據執行個體規格的CPU核心數進行排序,逐個檢查是否滿足不可調度的Pod申請的Request資源。一旦有執行個體規格能夠滿足,節點即時彈性會優先選擇這個執行個體規格,不再檢查剩餘的規格。

使用節點即時彈性時,如何即時感知節點池中的執行個體規格庫存變化?

節點即時彈性提供了健康度指標,會定期更新開啟自動調整節點池中的執行個體規格的庫存變化。當執行個體規格的庫存狀態發生變化時,節點即時彈性會發送名稱為InstanceInventoryStatusChanged的Kubernetes Event。您可以訂閱此Event通知,查看節點池庫存健康度,評估當前節點池庫存是否健康,並提前對執行個體規格配置進行分析和調整。詳細資料,請參見查看節點即時彈性健康度

如何最佳化節點池配置,盡量避免庫存不足而導致擴容失敗?

建議參見以下配置建議,擴大執行個體規格可選範圍:

  • 為節點池配置可選的多執行個體規格,或者配置泛化配置。

  • 為節點池配置多個可用性區域。

為什麼節點即時彈性無法彈出節點?

請檢查是否存在如下情境。

  • 配置節點池的執行個體規格庫存不足。

  • 節點池配置的執行個體規格無法滿足Pod的資源申請(Request)。ECS執行個體規格的資源大小是執行個體的售賣規格,實際運行時需考慮以下資源預留。

  • 是否參見啟用節點即時彈性完成了授權操作。

  • 開啟自動調整的節點池中擴容執行個體失敗。

為保證後續擴縮準確性和系統的穩定性,節點即時彈性組件在異常節點處理完成前,不會執行擴縮容操作。

縮容行為相關

為什麼節點即時彈性無法縮容節點?

請檢查是否存在如下幾種情境。

  • 是否已開啟僅縮容空節點,而排查的節點為非空節點。

  • 節點Pod的資源申請(Request)閾值高於設定的縮容閾值。

  • 節點上運行著kube-system命名空間的Pod。

  • 節點上的Pod包含強制的調度策略,導致其他節點無法運行此Pod。

  • 節點上的Pod擁有PodDisruptionBudget,且到達了PodDisruptionBudget的最小值。

  • 如有新增節點,節點即時彈性在10分鐘內,不會對該節點進行縮容操作。

什麼類型的Pod可以阻止節點即時彈性移除節點?

當Pod不是由原生Kubernetes Controller建立的Pod(例如非Deployment、ReplicaSet、Job、StatefulSet等對象建立的Pod),或者當節點上的Pod不能被安全地終止或遷移時,節點即時彈性組件可能會阻止移除這個節點。

通過Pod控制擴縮容行為

如何通過Pod控制節點即時彈性的節點縮容?

您可以通過Pod Annotationgoatscaler.io/safe-to-evict指定在節點即時彈性的縮容過程中,Pod是否會阻止節點被縮容。

  • 阻止節點被縮容:為Pod添加Annotation "goatscaler.io/safe-to-evict": "false"

  • 不阻止節點被縮容:為Pod添加Annotation "goatscaler.io/safe-to-evict": "true"

通過節點控制擴縮容行為

節點即時彈性在縮容過程中如何指定需要刪除的節點?

您可以為待移除節點添加goatscaler.io/force-to-delete:true:NoSchedule汙點。添加後,節點即時彈性會直接執行刪除操作,不會檢查Pod狀態和對Pod排水。這可能會導致服務中斷或資料丟失,請謹慎使用。

如何指定節點不被節點即時彈性縮容?

您可以為目標節點配置節點Annotation "goatscaler.io/scale-down-disabled": "true",使其不被節點即時彈性組件縮容。添加Annotation的命令樣本如下。

kubectl annotate node <nodename> goatscaler.io/scale-down-disabled=true

節點即時彈性能否僅縮容空節點?

您可以在節點維度或叢集維度配置是否需要僅縮容空節點。如果您同時在節點維度和叢集維度完成了配置,節點維度優先順序更高。

  • 節點維度:為節點添加Label goatscaler.io/scale-down-only-empty:truegoatscaler.io/scale-down-only-empty:false,分別用於開啟或關閉僅縮容空節點。

  • 叢集維度:在Container Service管理主控台組件管理頁面,定位節點即時彈性組件,按照頁面提示配置ScaleDownOnlyEmptyNodes,取值為true或false,分別用於開啟或關閉僅縮容空節點。

節點即時彈性組件相關

是否有操作會觸發節點即時彈性組件的自動更新?

不會。除系統維護、升級外,ACK不會進行節點即時彈性組件的自動更新。請在Container Service管理主控台組件管理頁面手動升級。

ACK託管叢集已經完成了角色授權,但節點伸縮活動仍然無法正常運行?

可能是叢集kube-system命名空間下保密字典內不存在addon.aliyuncsmanagedautoscalerrole.token而導致的。如不存在,請提交工單

沒有Token時,ACK預設通過WorkRole實現相關能力。請參見下方流程為叢集WorkerRole手動添加AliyunCSManagedAutoScalerRolePolicy的許可權。

  1. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇叢集資訊

  2. 叢集資源地區,單擊Worker RAM 角色後面的連結,然後在RAM控制台,單擊精確授權

  3. 精確授權面板,預設選擇系統策略,輸入系統策略名稱稱為AliyunCSManagedAutoScalerRolePolicy,按照頁面提示完成授權。

    完成後,重新整理頁面,可查看新增的許可權。

  4. 手動重啟kube-system命名空間下的Deployment cluster-autoscaler(節點自動調整)或ack-goatscaler(節點即時彈性),以便許可權立即生效。