共用方式為


在 Azure Arc 所啟用的 AKS 中使用 PowerShell 進行叢集自動調整

適用於:Azure Stack HCI 22H2 上的 AKS、Windows Server 上的 AKS

您可以使用PowerShell來啟用自動調整程式,以及管理Arc所啟用之 AKS 中目標叢集中節點集區的自動調整。您也可以使用 PowerShell 來設定和管理叢集自動調整。

建立新的 AksHciAutoScalerConfig 物件

若要建立要傳入 New-AksHciClusterSet-AksHciCluster 命令的新 AksHciAutoScalerConfig 物件,請使用此命令:

New-AksHciAutoScalerProfile -Name asp1 -AutoScalerProfileConfig @{ "min-node-count"=2; "max-node-count"=7; 'scale-down-unneeded-time'='1m'}

您可以在建立叢集時提供 autoscalerconfig 物件。 物件包含自動調整程序的參數。 如需參數資訊,請參閱 如何使用自動調整程式配置檔

變更現有的 AksHciAutoScalerConfig 配置文件物件

當您更新現有的 AksHciAutoScalerConfig 配置檔 物件時,使用該物件的叢集會更新為使用新的參數:

Set-AksHciAutoScalerProfile -name myProfile -autoScalerProfileConfig @{ "max-node-count"=5; "min-node-count"=2 }

您可以更新 autoscalerconfig 物件,其中包含自動調整程式的參數。 如需參數資訊,請參閱 如何使用自動調整程式配置檔

啟用新叢集的自動調整

若要在所有新建立的節點集區上自動啟用自動調整,請使用下列參數搭配 New-AksHciCluster 命令:

New-AksHciCluster -name mycluster -enableAutoScaler -autoScalerProfileName myAutoScalerProfile

在現有叢集上啟用自動調整

若要在現有叢集上每個新建立的節點集區上自動啟用自動調整,請使用 enableAutoScaler 參數搭配 Set-AksHciCluster 命令:

Set-AksHciCluster -Name <string> [-enableAutoScaler <boolean>] [-autoScalerProfileName <String>] 

在現有的節點集區上啟用自動調整

若要在現有的節點集區上啟用自動調整功能,請使用 autoScaler 參數搭配 Set-AksHciNodePool 命令:

Set-AksHciNodePool -clusterName <Your-Cluster-Name> -name <Your-NodePool-Name> -autoScaler $true

停用自動調整

若要停用現有叢集上所有現有和新建立節點集區的自動調整,請使用 Set-AksHciCluster 命令設定enableAutoScaler為 false:

Set-AksHciCluster -Name <string> -enableAutoScaler $false

有效使用水平自動調整程式

既然叢集和節點集區已設定為自動調整,您可以設定工作負載,以使用水平自動調整程式功能的方式進行調整。

有兩種方法可用於工作負載調整:

  • Kubernetes Horizontal Pod 自動調整程式:根據負載特性,水準 Pod 自動調整程式(也稱為 水平自動調整程式)會將應用程式部署的 Pod 調整為 Kubernetes 叢集中可用的節點。 如果沒有其他節點可供排程,水平自動調整程式會具現化要排程 Pod 的新節點。 如果應用程式負載降低,節點會再次相應減少。
  • Kubernetes 節點反親和性規則:Kubernetes 部署的反親和性規則可以指定一組 Pod 無法在相同節點上調整,而且需要不同的節點來調整工作負載。 結合應用程式實例的負載特性或目標 Pod 數目,水平自動調整程式會在節點集區中具現化新的節點,以滿足要求。 如果應用程式需求消退,水平自動調整程式會再次相應減少節點集區。

本節包含一些範例。

水平 Pod 自動調整程式

先決條件:

  • 已安裝 Arc 所啟用的 AKS。
  • 目標叢集已安裝並連線至 Azure。
  • 部署了一個Linux節點集區,至少有一個作用中的Linux背景工作節點。
  • 目標叢集和Linux節點集區上已啟用水平節點自動調整程式,如先前所述。

我們會使用 Kubernetes Horizontal Pod 自動調整程式逐步解說範例 來示範水準 Pod 自動調整程式的運作方式。

若要讓水準 Pod 自動調整程式運作,您必須在目標叢集中部署 Metrics Server 元件。

若要將計量伺服器部署到名為 mycluster的目標叢集,請執行下列命令:

Get-AksHciCredential -name mycluster
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

部署 Kubernetes Metrics Server 之後,您可以將應用程式部署至用來調整的節點集區。 在此範例中,我們會使用 Kubernetes 社群網站的測試應用程式:

kubectl apply -f https://k8s.io/examples/application/php-apache.yaml
deployment.apps/php-apache created
service/php-apache created

此命令會建立 Apache 網頁伺服器型 PHP 應用程式的部署,以將「確定」訊息傳回給呼叫用戶端。

接下來,將水準 Pod 自動調整程式設定為在目前 Pod 的 CPU 使用量達到 50% 時排程新的 Pod,並從 1 調整為 50 個 Pod:

kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
horizontalpodautoscaler.autoscaling/php-apache autoscaled

您可以執行下列命令來檢查新建立的水準 Pod 自動調整程式目前狀態:

kubectl get hpa
NAME         REFERENCE                     TARGET    MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache/scale   0% / 50%  1         10        1          18s

最後,增加網頁伺服器上的負載,以查看其相應放大。開啟新的 PowerShell 視窗,然後執行下列命令:

kubectl run -i --tty load-generator --rm --image=busybox:1.28 --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"

如果您回到上一個 PowerShell 視窗並執行下列命令,您應該會在短時間內看到 Pod 數目變更:

kubectl get hpa php-apache --watch
NAME         REFERENCE                     TARGET      MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache/scale   305% / 50%  1         10        1          3m

在此範例中,Pod 的數目會從 1 變更為 7,如下所示:

NAME         REFERENCE                     TARGET      MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache/scale   305% / 50%  1         10        7          3m

如果這還不足以觸發節點自動調整程式,因為所有 Pod 都符合一個節點,請開啟更多 PowerShell 視窗並執行更多負載產生器命令。 請務必在每次執行命令時變更您要建立的 Pod 名稱。 例如,使用 load-generator-2 而非 load-generator,如下列命令所示。

kubectl run -i --tty load-generator-2 --rm --image=busybox:1.28 --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"

然後檢查使用下列命令具現化的節點數目:

kubectl get nodes
NAME              STATUS   ROLES                  AGE    VERSION
moc-laondkmydzp   Ready    control-plane,master   3d4h   v1.22.4
moc-lorl6k76q01   Ready    <none>                 3d4h   v1.22.4
moc-lorl4323d02   Ready    <none>                   9m   v1.22.4
moc-lorl43bc3c3   Ready    <none>                   2m   v1.22.4

若要監看相應減少,請按 CTRL-C 結束負載產生器 Pod,並關閉與其相關聯的 PowerShell 視窗。 大約 30 分鐘之後,您應該會看到 Pod 數目下降。 大約 30 分鐘後,節點會取消布建。

如需 Kubernetes 水準 Pod 自動調整程式的詳細資訊,請參閱 水準 Pod 自動調整

節點親和性規則

您可以使用節點親和性規則,根據節點的特定特性,讓 Kubernetes 排程器只能在叢集或節點集區的特定節點上執行 Pod。 若要顯示水平節點自動調整程式的功能,您可以使用相同的規則來確保每個節點上只會執行一個指定 Pod 的實例。

先決條件:

  • 已安裝 AKS Arc。
  • 目標叢集已安裝並連線至 Azure。
  • 部署了一個Linux節點集區,至少有一個作用中的Linux背景工作節點。
  • 水平節點自動調整程式會在目標叢集和Linux節點集區上啟用,如先前所述。

使用下列內容建立 YAML 檔案,並將它儲存為 本機資料夾中的 node-anti-affinity.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-cache
spec:
  selector:
    matchLabels:
      app: store
  replicas: 4
  template:
    metadata:
      labels:
        app: store
    spec:
      nodeSelector:
        kubernetes.io/os: linux
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - store
            topologyKey: "kubernetes.io/hostname"
      containers:
      - name: redis-server
        image: redis:3.2-alpine

開啟 PowerShell 視窗,然後載入目標叢集的認證。 在這裡範例中,叢集名為 mycluster

Get-AksHciCredential -name mycluster

現在,將 YAML 檔案套用至目標叢集:

kubectl apply -f node-anti-affinity.yaml

幾分鐘后,您可以使用下列命令來檢查新的節點是否已上線:

kubectl get nodes
NAME              STATUS   ROLES                  AGE    VERSION
moc-laondkmydzp   Ready    control-plane,master   3d4h   v1.22.4
moc-lorl6k76q01   Ready    <none>                 3d4h   v1.22.4
moc-lorl4323d02   Ready    <none>                   9m   v1.22.4
moc-lorl43bc3c3   Ready    <none>                   9m   v1.22.4
moc-lorl44ef56c   Ready    <none>                   9m   v1.22.4

若要移除節點,請使用此命令刪除 redis 伺服器的部署:

kubectl delete -f node-anti-affinity.yaml

如需 Kubernetes Pod 親和性規則的詳細資訊,請參閱 將 Pod 指派給節點

針對水平自動調整程序進行疑難解答

當目標叢集啟用水準Pod自動調整程式時,會在管理叢集中建立名為 <cluster_name>-cluster-autoscaler 的新 Kubernetes 部署。 此部署會監視目標叢集,以確保有足夠的背景工作節點來排程Pod。

以下是偵錯自動調整程式相關問題的一些不同方式:

  • 在管理叢集上執行的叢集自動調整程式 Pod 會收集其如何做出調整決策、需要啟動或移除的節點數目,以及它可能會遇到的任何一般錯誤等實用資訊。 自動調整程式會將此資訊儲存至記錄。 執行下列命令以存取記錄:

    kubectl --kubeconfig $(Get-AksHciConfig).Kva.kubeconfig logs -l app=<cluster_name>-cluster-autoscaler
    
  • 雲端操作員記錄管理叢集中的 Kubernetes 事件,有助於瞭解何時為叢集和節點集區啟用或停用自動調整程式。 您可以執行下列命令來檢視這些命令:

    kubectl --kubeconfig $(Get-AksHciConfig).Kva.kubeconfig get events
    
  • 叢集自動調整程式部署會在 configmap 所管理的目標叢集中建立 。 這會 configmap 保存自動調整程式的狀態叢集範圍層級和每個節點集區的相關信息。 針對目標叢集執行下列命令,以檢視狀態:

    注意

    請確定您已執行 Get-AksHciCredentials -Name <clustername> 來擷取 kubeconfig 資訊,以存取有問題的目標叢集。

    kubectl --kubeconfig ~\.kube\config get configmap cluster-autoscaler-status -o yaml
    
  • 叢集自動調整程式會在調整叢集節點集區時,記錄叢集自動調整程序狀態 configmap 上的事件。 您可以對目標叢集執行此指令來檢視這些記錄:

    kubectl --kubeconfig ~\.kube\config describe configmap cluster-autoscaler-status
    
  • 叢集自動調整程式會在無法排程Pod時,在目標叢集中的Pod上發出事件。 執行此指令以檢視 Pod 上的事件:

    kubectl --kubeconfig ~\.kube\config describe pod <pod_name>
    

PowerShell 參考

如需支援叢集自動調整的PowerShell Cmdlet,請參閱下列參考頁面:

下一步