練習 - 在 AKS 叢集上使用叢集自動調整程式設定現成節點集區
現成使用者節點集區可讓您以更低的價格來存取未使用的 Azure 計算容量,並支援高效能運算案例。
在上一個練習中,您已建立標準使用者節點集區、使用叢集自動調整程式來管理節點建立,並手動調整節點計數。
下一個步驟是新增具有自動調整功能的現成使用者節點集區,以降低叢集的營運成本。 叢集使用量會根據所需的資源而有所不同,且無法預測,因此您可以設定規則來擷取尖峰和下降。 工作負載會以已啟用節點親和性來部署,以便在現成節點集區的節點上排程 Pod。
建立現成節點集區
您必須建立個別的節點集區來支援批次處理服務。 此節點集區是現成節點集區,其會使用「刪除」收回原則和 -1 的現成最高價格。
執行與上一個練習相同的
az aks nodepool add
命令,將新的現成節點集區新增至您的叢集。 您必須變更節點集區名稱,然後再新增幾個參數,以將此節點集區識別為現成節點集區。輸入下列值以設定節點集區的參數:
- 名稱:
batchprocpl2
- 優先順序:
Spot
- 收回原則:
Delete
- 現成最高價格:
-1
執行下列命令來建立現成節點集區:
az aks nodepool add \ --resource-group $RESOURCE_GROUP \ --cluster-name $AKS_CLUSTER_NAME \ --name batchprocpl2 \ --enable-cluster-autoscaler \ --max-count 3 \ --min-count 1 \ --priority Spot \ --eviction-policy Delete \ --spot-max-price -1 \ --node-vm-size Standard_DS2_v2 \ --no-wait
請記住,此要求可能因為您所選位置中的容量限制而失敗。
- 名稱:
執行
az aks nodepool show
命令,以顯示用於批次處理服務之新現成節點集區的詳細資料:az aks nodepool show \ --resource-group $RESOURCE_GROUP \ --cluster-name $AKS_CLUSTER_NAME \ --name batchprocpl2
以下是命令輸出範例。
{ "agentPoolType": "VirtualMachineScaleSets", "availabilityZones": null, "count": 3, "enableAutoScaling": true, "enableNodePublicIp": false, "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/batchprocpl2", "maxCount": 3, "maxPods": 110, "minCount": 1, "mode": "User", "name": "batchprocpl2", "nodeImageVersion": "AKSUbuntu-1604-2020.06.10", "nodeLabels": { "kubernetes.azure.com/scalesetpriority": "spot" }, "nodeTaints": [ "kubernetes.azure.com/scalesetpriority=spot:NoSchedule" ], "orchestratorVersion": "1.17.9", "osDiskSizeGb": 128, "osType": "Linux", "provisioningState": "Creating", "proximityPlacementGroupId": null, "resourceGroup": "akscostsavinggrp", "scaleSetEvictionPolicy": "Delete", "scaleSetPriority": "Spot", "spotMaxPrice": -1.0, "tags": null, "type": "Microsoft.ContainerService/managedClusters/agentPools", "upgradeSettings": { "maxSurge": null }, "vmSize": "Standard_DS2_v2", "vnetSubnetId": null }
此結果中有數個值與您在先前節點集區中見到的值截然不同。 讓我們檢閱一下這些項目:
enableAutoScaling
屬性值會設定為true
。maxCount
和minCount
值皆已設定。scaleSetEvictionPolicy
屬性會設定為Delete
。scaleSetPriority
屬性會設定為Spot
。spotMaxPrice
屬性會設定為-1
。nodeLabels
和nodeTaints
都會套用到此節點集區。 您可以在節點集區中,使用這些值來排程節點上的工作負載。
設定命名空間
執行
kubectl create namespace
命令,以針對應用程式建立稱為costsavings
的命名空間。 您將使用此命名空間,更輕鬆地選取工作負載。kubectl create namespace costsavings
以下是上述命令的輸出:
namespace/costsavings created
使用現成節點親和性排程 Pod
您可以藉由將 Toleration 和親和性新增至 Pod 的部署資訊清單檔,在現成節點上排程要執行的 Pod。 當 Toleration 和與 Taint 相對應的節點親和性,以及標籤,套用到您現成節點時,即會在這些節點上排程 Pod。
系統會為現成節點集區中的節點指派等於 kubernetes.azure.com/scalesetpriority=spot:NoSchedule
的 Taint 和等於 kubernetes.azure.com/scalesetpriority=spot
的標籤。 在工作負載 YAML 資訊清單檔的 tolerations
和 affinity
區段中,使用此機碼值組中的資訊。 藉由將第二個批次處理集區設定為現成節點集區,您現在可以建立部署檔案,以排程要在其上執行的工作負載。
使用整合式編輯器,為 Kubernetes 部署建立稱為
spot-node-deployment.yaml
的資訊清單檔:code spot-node-deployment.yaml
提示
Cloud Shell 包含整合式檔案編輯器 \(部分機器翻譯\)。 Cloud Shell 編輯器支援語言醒目提示、命令選擇區,以及檔案總管等功能。 針對簡易的檔案建立和編輯,在 Cloud Shell 終端機中執行
code .
來啟動編輯器。 這項動作會開啟編輯器,並在終端機中設為您目前正在使用的工作目錄。 若要直接開啟您的資訊清單檔以進行快速編輯,請執行code spot-node-deployment.yaml
。 此命令會在沒有檔案總管的情況下開啟編輯器。將下列文字貼入檔案:
apiVersion: v1 kind: Pod metadata: name: nginx labels: env: test spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent tolerations: - key: "kubernetes.azure.com/scalesetpriority" operator: "Equal" value: "spot" effect: "NoSchedule" affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: "kubernetes.azure.com/scalesetpriority" operator: In values: - "spot"
按 Ctrl+S 儲存檔案,然後按 Ctrl+Q 以關閉編輯器。
執行
kubectl apply
命令以套用設定,並在costsavings
命名空間中部署應用程式:kubectl apply \ --namespace costsavings \ -f spot-node-deployment.yaml
以下是上述命令的輸出:
pod/nginx created
您可以在執行
kubectl get pods
命令時使用-o wide
旗標,以擷取有關執行中 Pod 的詳細資訊。 在此案例中,您想要查看 Pod 是在哪個節點上進行排程。 請務必在costsavings
命名空間中查詢 Pod。kubectl get pods --namespace costsavings -o wide
輸出應該如下所示:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx 1/1 Running 0 43s 10.244.3.3 aks-batchprocpl2-25254417-vmss000000 <none> <none>
請注意節點的名稱
aks-batchprocpl2-25254417-vmss000000
。 此節點是您稍早所建立之batchprocpl2
現成節點集區的一部分。