共用方式為


使用 Azure Kubernetes Service (AKS) 中的叢集自動調整程式

為了符合 AKS 中的應用程式需求,您可能需要調整執行工作負載的節點數目。 叢集自動調整程式元件可以監看叢集中由於資源限制而無法調度的 Pod。 當叢集自動調整程式偵測到問題時,它會相應增加節點集區中的節點數目,以符合應用程式需求。 也會定期檢查節點是否缺少執行的 Pod,然後視需要減少節點的數目。

本文說明如何在以 開放原始碼 Kubernetes 版本為基礎的 AKS 中啟用和管理叢集自動調整程式。

開始之前

本文需要使用 Azure CLI 2.0.76 版或更新版本。 執行 az --version 以尋找版本。 如果您需要安裝或升級,請參閱安裝 Azure CLI

在 AKS 叢集上使用叢集自動調整程式

重要

叢集自動調整器是一個 Kubernetes 元件。 雖然 AKS 叢集會將虛擬機器擴展集用於節點,但請勿手動啟用或編輯擴展集自動調整的設定。 讓 Kubernetes 叢集自動調整器管理必要的擴縮設定。 如需詳細資訊,請參閱我可以在節點資源群組中修改 AKS 資源嗎?

在新叢集上啟用叢集自動調整器

  1. 使用 az group create 命令建立資源群組。

    az group create --name myResourceGroup --location eastus
    
  2. 使用 az aks create 命令建立 AKS 叢集,然後使用 --enable-cluster-autoscaler 參數,並指定節點 --min-count--max-count,在叢集的節點集區上啟用和設定叢集自動調整程式。 下列範例命令會建立具有虛擬機器擴展集所支援的單一節點叢集、啟用叢集自動調整器、設定至少一個節點且最多三個節點:

    az aks create \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --node-count 1 \
    --vm-set-type VirtualMachineScaleSets \
    --load-balancer-sku standard \
    --enable-cluster-autoscaler \
    --min-count 1 \
    --max-count 3 \
    --generate-ssh-keys
    

    建立叢集並設定叢集自動調整器設定需要幾分鐘的時間。

在現有節點中啟用叢集自動調整程式

  • 使用 az aks update 命令更新現有的叢集,並使用 --enable-cluster-autoscaler 參數且指定節點 --min-count--max-count,在節點集區上啟用及設定叢集自動調整器。 下列範例命令會更新現有的 AKS 叢集,以在叢集的節點集區上啟用叢集自動調整器,並設定至少一個節點且最多三個節點:

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --enable-cluster-autoscaler \
      --min-count 1 \
      --max-count 3
    

    更新叢集並設定叢集自動調整器設定需要幾分鐘的時間。

在叢集上停用叢集自動調整器

  • 使用 az aks update 命令和 --disable-cluster-autoscaler 參數來停用叢集自動調整程式。

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --disable-cluster-autoscaler
    

    停用叢集自動調整器時,不會移除節點。

注意

您可以在使用 az aks scale 命令停用叢集自動調整器之後,手動擴縮叢集。 如果您使用水平 Pod 自動調整程式,該功能會在停用叢集自動調整程式的情況下繼續執行,但如果所有節點資源皆在使用中,Pod 最後可能會無法排程。

在叢集上重新啟用叢集自動調整程式

若想要在現有叢集上重新啟用叢集自動調整程式,可以使用 az aks update 命令並指定 --enable-cluster-autoscaler--min-count--max-count 參數。

在節點集區上使用叢集自動調整程式

在多個節點集區上使用叢集自動調整程式

您可以在多個節點集區上使用叢集自動調整程式,且能在各個節點集區上啟用叢集自動調整程式,還能將唯一的自動調整規則傳遞給每個節點集區。

  • 使用 az aks nodepool update 命令更新現有節點集區上的設定。

    az aks nodepool update \
      --resource-group myResourceGroup \
      --cluster-name myAKSCluster \
      --name nodepool1 \
      --update-cluster-autoscaler \
      --min-count 1 \
      --max-count 5
    

在節點集區上停用叢集自動調整程式

  • 使用 az aks nodepool update 命令和 --disable-cluster-autoscaler 參數在節點集區上停用叢集自動調整程式。

    az aks nodepool update \
      --resource-group myResourceGroup \
      --cluster-name myAKSCluster \
      --name nodepool1 \
      --disable-cluster-autoscaler
    

在節點集區上重新啟用叢集自動調整程式

若想要在節點集區上重新啟用叢集自動調整程式,可以使用 az aks nodepool update 命令並指定 --enable-cluster-autoscaler--min-count--max-count 參數。

注意

如果您打算搭配跨多個區域的節點集區使用叢集自動調整程式,並利用與磁碟區拓撲排程等區域相關的排程功能,建議每個區域都有一個節點集區,並透過自動調整程式設定檔啟用 --balance-similar-node-groups。 這可確保自動調整程式可以成功相應增加,並讓節點集區的大小保持平衡。

更新叢集自動調整程式設定

隨著應用程式需求的變化,您可能需要調整叢集自動調整程式的節點計數來有效縮放。

  • 使用 az aks update 命令變更節點計數,並使用 --update-cluster-autoscaler 參數及指定更新節點 --min-count--max-count 更新叢集自動調整程式。

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --update-cluster-autoscaler \
      --min-count 1 \
      --max-count 5
    

注意

叢集自動調整程式會在實際計數因外部因素而低於最小值的情況下,強制執行最小計數,例如現成品收回期間或透過 AKS API 變更最小計數值時。

使用叢集自動調整程式設定檔

您可以變更整個叢集的自動調整程式設定檔的預設值,以此方式設定叢集自動調整程式的細部詳細資料。 例如,在節點使用率過低 10 分鐘後之後,就會發生縮小事件。 如果有每隔 15 分鐘執行一次的工作負載,建議您變更自動調整程式設定檔,以便在節點使用量過低 15 或 20 分鐘後將之縮小。 啟用叢集自動調整程式時,除非指定不同的設定,否則會使用預設設定檔。

重要

叢集自動調整程式設定檔會影響使用叢集自動調整程式的所有節點集區。 無法為每個節點集區設定一個自動調整程式設定檔。 您設定設定檔時,任何已啟用叢集自動調整程式的現有節點集區都會立即開始使用設定檔。

叢集自動調整程式設定檔設定

下表列出叢集自動調整程式設定檔的可用設定:

設定 描述: 預設值
scan-interval 重新評估叢集以進行擴大或縮小的頻率。 10 秒
scale-down-delay-after-add 擴大後再繼續進行縮小評估的時間長度。 10 分鐘
scale-down-delay-after-delete 節點刪除後再繼續進行縮小評估的時間長度。 scan-interval
scale-down-delay-after-failure 縮小失敗後再繼續進行縮小評估的時間長度。 三分鐘
scale-down-unneeded-time 節點在符合縮小條件前,處於不需要狀態的時間長度。 10 分鐘
scale-down-unready-time 未就緒節點在符合縮小條件前,處於不需要狀態的時間長度。 20 分鐘
ignore-daemonsets-utilization 計算縮小的資源使用率時,是否忽略 DaemonSet Pod。 false
daemonset-eviction-for-empty-nodes DaemonSet Pod 是否會從空白節點正常終止。 false
daemonset-eviction-for-occupied-nodes DaemonSet Pod 是否會從非空白節點正常終止。 true
scale-down-utilization-threshold 節點使用率層級 (其定義是所要求資源總和除以容量),在此層及時可考慮將節點縮小。 0.5
max-graceful-termination-sec 嘗試縮小節點時,叢集自動調整程式等待 Pod 終止的秒數上限。 600 秒
balance-similar-node-groups 偵測相似的節點集區,並平衡其間的節點數目。 false
expander 要用於擴大的節點集區展開器類型。 可能的值包括:most-podsrandomleast-wastepriority random
skip-nodes-with-local-storage 如果 true,叢集自動調整程式不會刪除具有本機儲存體 Pod 的節點,例如 EmptyDir 或 HostPath。 false
skip-nodes-with-system-pods 如果 true,叢集自動調整程式不會從 kube 系統刪除具有 Pod 的節點 (但 DaemonSet 或鏡像 Pod 除外)。 true
max-empty-bulk-delete 可以同時刪除的空白節點數目上限。 10 個節點
new-pod-scale-up-delay 針對在 Kubernetes 排程器可以排程所有 Pod 之前,不想讓 CA 採取行動的高載/批次調整案例,您可以在 Pod 達到特定存留期前,先告訴 CA 忽略未排程的 Pod。 0 秒
max-total-unready-percentage 叢集中未讀取節點的最大百分比。 超過此百分比之後,CA 會停止作業。 45%
max-node-provision-time 自動調整程式等候佈建節點的時間上限。 15 分鐘
ok-total-unready-count 不論 max-total-unready-percentage 是多少,都允許的未讀取節點數目。 三個節點

注意

ignore-daemonsets-utilization、daemonset-eviction-for-empty-nodes 和 daemonset-eviction-for-occupied-nodes 參數是來自 API 2024-05-01 版的 GA。 如果您使用 CLI 來更新這些旗標,請確定您使用的是 2.63 版或更新版本。

在新叢集上設定叢集自動調整程式設定檔

  • 使用 az aks create 命令建立 AKS 叢集,並使用 cluster-autoscaler-profile 參數設定叢集自動調整程式設定檔。

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --node-count 1 \
        --enable-cluster-autoscaler \
        --min-count 1 \
        --max-count 3 \
        --cluster-autoscaler-profile scan-interval=30s \
        --generate-ssh-keys
    

在現有叢集上設定叢集自動調整程式設定檔

  • 使用 az aks update 命令和 cluster-autoscaler-profile 參數在現有叢集上設定叢集自動調整程式。 下列範例將掃描間隔設為 30 秒

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --cluster-autoscaler-profile scan-interval=30s
    

設定叢集自動調整程式設定檔以積極縮小

注意

針對在短間隔內頻繁擴增和縮減的叢集不建議積極縮小,因為這可能會導致在這些情況下延長節點佈建時間。 增加 scale-down-delay-after-add 可藉由讓節點保持在較長的時間來處理傳入工作負載,在這些情況中提供協助。

 az aks update \
     --resource-group myResourceGroup \
     --name myAKSCluster \
     --cluster-autoscaler-profile scan-interval=30s,scale-down-delay-after-add=0m,scale-down-delay-after-failure=1m,scale-down-unneeded-time=3m,scale-down-unready-time=3m,max-graceful-termination-sec=30,skip-nodes-with-local-storage=false,max-empty-bulk-delete=1000,max-total-unready-percentage=100,ok-total-unready-count=1000,max-node-provision-time=15m

針對突發性工作負載設定叢集自動調整程式設定檔

 az aks update \   
     --resource-group "myResourceGroup" \
     --name myAKSCluster \ 
     --cluster-autoscaler-profile scan-interval=20s,scale-down-delay-after-add=10m,scale-down-delay-after-failure=1m,scale-down-unneeded-time=5m,scale-down-unready-time=5m,max-graceful-termination-sec=30,skip-nodes-with-local-storage=false,max-empty-bulk-delete=100,max-total-unready-percentage=100,ok-total-unready-count=1000,max-node-provision-time=15m

將叢集自動調整程式設定檔重設定為預設值

  • 使用 az aks update 命令重新設定叢集自動調整程式設定檔。。

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --cluster-autoscaler-profile ""
    

取出叢集自動調整程式記錄和狀態

您可以從叢集自動調整程式擷取記錄和狀態更新,以幫助診斷和偵錯自動調整程式事件。 AKS 會代表您管理叢集自動調整程式,並在受控控制平面中執行。 您可以啟用控制平面節點,以查看來自叢集自動調整程式的記錄和作業。

  1. 使用此處的指令,設定資源記錄規則,將叢集自動調整程式記錄推送至 Log Analytics。 請務必在選取 [記錄] 選項時,勾選 cluster-autoscaler 的核取方塊。

  2. 選取叢集上的 [記錄] 區段。

  3. 將下列範例查詢輸入至 Log Analytics:

    AzureDiagnostics
    | where Category == "cluster-autoscaler"
    
  4. 在 CLI 上檢視叢集自動調整程式相應增加未觸發的事件。

    kubectl get events --field-selector source=cluster-autoscaler,reason=NotTriggerScaleUp
    
  5. 檢視 CLI 上的叢集自動調整程式警告事件。

    kubectl get events --field-selector source=cluster-autoscaler,type=Warning
    
  6. 叢集自動調整程式也會將健康狀態寫出至名為 cluster-autoscaler-statusconfigmap。 若要擷取這些記錄,請使用下列 kubectl 命令:

    kubectl get configmap -n kube-system cluster-autoscaler-status -o yaml
    

如需詳細資訊,請參閱 Kubernetes/自動調整程式 GitHub 專案常見問題

叢集自動調整程式計量

您可以啟用控制平面計量 (預覽),以使用適用於 Prometheus 的 Azure 監視器受控服務附加元件,從叢集自動調整程式查看記錄和作業

下一步

本文示範如何自動調整 AKS 節點數目。 您也可以使用水平 Pod 自動調整程式,自動調整執行應用程式的 Pod 數目。 如需使用水平 Pod 自動調整程式的步驟,請參閱調整 AKS 中的應用程式

若要進一步協助改善叢集資源使用率,並釋放其他 Pod 的 CPU 和記憶體,請參閱垂直 Pod 自動調整程式