在 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. 使用 命令建立 AKS 叢集, az aks create 並使用 參數在叢集的節點集區上啟用和設定叢集 --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
    

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

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

  • 使用 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 最終可能無法排程。

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

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

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

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

您可以使用叢集自動調整程式搭配 多個節點集 區,而且可以在每個個別節點集區上啟用叢集自動調整程式,並將唯一的自動調整規則傳遞給它們。

  • 使用 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
    

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

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

注意

如果您打算搭配跨多個區域的節點集區使用叢集自動調整程式,並利用與區域相關的排程功能,例如磁碟區拓撲排程,建議您在每個區域有一個節點集區,並透過自動調整程式配置檔啟用 --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 採取行動的高載/批次調整,您可以告訴 CA 在達到特定年齡之前忽略未排程的 Pod。 0 秒
max-total-unready-percentage 叢集中未讀取節點的百分比上限。 超過此百分比之後,CA 會停止作業。 45%
max-node-provision-time 自動調整程式等候布建節點的時間上限。 15 分鐘
ok-total-unready-count 允許的未讀取節點數目,不論 total-total-unready-percentage。 三個節點

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

  • 使用 命令建立 AKS 叢集, az aks create 並使用 參數設定叢集自動調整程式設定檔 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
    

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

  • 使用 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=0s,scale-down-delay-after-failure=30s,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 會代表您管理叢集自動調整程式,並在 Managed 控制平面中執行。 您可以啟用控制平面節點,以查看來自叢集自動調整器的記錄和作業。

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

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

  3. 在 Log Analytics 中輸入下列範例查詢:

    AzureDiagnostics
    | where Category == "cluster-autoscaler"
    

    只要有要擷取的記錄,您應該會看到類似下列記錄的記錄:

    Log Analytics 記錄的螢幕快照。

  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. 叢集自動調整程式也會將健康情況狀態寫出至 configmap 具名 cluster-autoscaler-status的 。 您可以使用下列 kubectl 命令來擷取這些紀錄:

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

如需詳細資訊,請參閱 Kubernetes/autoscaler GitHub 專案常見問題

叢集自動調整程式計量

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

下一步

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

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