在 Azure Arc 所啟用的 AKS 中使用 PowerShell 進行叢集自動調整
適用於:Azure Stack HCI 22H2 上的 AKS、Windows Server 上的 AKS
您可以使用PowerShell來啟用自動調整程式,以及管理Arc所啟用之 AKS 中目標叢集中節點集區的自動調整。您也可以使用 PowerShell 來設定和管理叢集自動調整。
建立新的 AksHciAutoScalerConfig 物件
若要建立要傳入 New-AksHciCluster
或 Set-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,請參閱下列參考頁面:
- Get-AksHciAutoScalerProfile
- AKS 的 Get-AksHciCluster
- AKS 的 Get-AksHciNodePool
- New-AksHciAutoScalerProfile
- New-AksHciCluster
- New-AksHciNodePool
- Remove-AksHciAutoScalerProfile
- Set-AksHciAutoScalerProfile
- Set-AksHciCluster
- Set-AksHciNodePool