在 Azure Stack HCI 22H2) 上管理叢集 (AKS 的節點集區
適用於:Azure Stack HCI 22H2 上的 AKS、Windows Server 上的 AKS
注意
如需在 Azure Stack HCI 23H2 上管理 AKS 中的節點集區的相關信息,請參閱 管理節點集區。
在 Azure Arc 所啟用的 AKS 中,相同組態的節點會群組在一起成為 節點集區。 這些節點集區包含用來執行應用程式的基礎 VM。 本文說明如何在 AKS Arc 中建立和管理叢集的節點集區。
注意
這項功能可讓您更充分地控制如何建立和管理多個節點集區。 因此,建立、更新和刪除作業需要個別的命令。 先前,透過 New-AksHciCluster 或 Set-AksHciCluster 的叢集作業是建立或調整具有一個 Windows 節點集區和一個 Linux 節點集區之叢集的唯一選項。 針對需要使用節點集區命令 New-AksHciNodePool、Set-AksHciNodePool、Get-AksHciNodePool 和 Remove-AksHciNodePool 在單獨節點集區上執行作業的節點集區,此功能公開另一組作業。
開始之前
建議您安裝 1.1.6 版。 如果您已安裝 PowerShell 模組,請執行下列命令來尋找版本:
Get-Command -Module AksHci
如果您需要更新 PowerShell,請遵循 升級 AKS 主機中的指示。
建立 AKS 叢集
首先,請建立具有單一節點集區的 AKS 叢集。 下列範例會使用 New-AksHciCluster 命令來建立新的 Kubernetes 叢集,其中包含一個名為 linuxnodepool 的 Linux 節點集區,其具有 1 個節點。 如果您已經有使用舊版 AKS 部署的叢集,而且想要繼續使用舊的部署,您可以略過此步驟。 您仍然可以使用這組新的節點集區命令,將更多節點集區新增至現有的叢集。
New-AksHciCluster -name mycluster -nodePoolName linuxnodepool -nodeCount 1 -osType linux
注意
仍支援的 New-AksHciCluster
舊參數集。
新增節點集區
在上一個步驟中建立名為 mycluster
*' 的叢集具有單一節點集區。 您可以使用 New-AksHciNodePool 命令,將第二個節點集區新增至現有的叢集。 下列範例會使用一個節點建立名為 windowsnodepool 的 Windows 節點集區。 請確定節點集區的名稱與任何現有節點集區的名稱不同。
New-AksHciNodePool -clusterName mycluster -name windowsnodepool -count 1 -osType Windows -osSku Windows2022
取得節點集區的設定資訊
若要查看節點集區的設定資訊,請使用 Get-AksHciNodePool 命令。
Get-AksHciNodePool -clusterName mycluster
範例輸出︰
ClusterName : mycluster
NodePoolName : linuxnodepool
Version : v1.20.7
OsType : Linux
NodeCount : 1
VmSize : Standard_K8S3_v1
Phase : Deployed
ClusterName : mycluster
NodePoolName : windowsnodepool
Version : v1.20.7
OsType : Windows
NodeCount : 1
VmSize : Standard_K8S3_v1
Phase : Deployed
若要查看一個特定節點集區的組態資訊,請使用 -name
Get-AksHciNodePool 中的 參數。
Get-AksHciNodePool -clusterName mycluster -name linuxnodepool
範例輸出︰
ClusterName : mycluster
NodePoolName : linuxnodepool
Version : v1.20.7
OsType : Linux
NodeCount : 1
VmSize : Standard_K8S3_v1
Phase : Deployed
Get-AksHciNodePool -clusterName mycluster -name windowsnodepool
範例輸出︰
ClusterName : mycluster
NodePoolName : windowsnodepool
Version : v1.20.7
OsType : Windows
NodeCount : 1
VmSize : Standard_K8S3_v1
Phase : Deployed
注意
如果您在 New-AksHciCluster
中使用新的參數集來部署叢集,然後執行 Get-AksHciCluster
以取得叢集資訊,則輸出中的 WindowsNodeCount
和 LinuxNodeCount
欄位會傳回 0
。 若要取得每個節點集區中節點的精確數目,請使用 命令 Get-AksHciNodePool
搭配指定的叢集名稱。
縮放節點集區
您可以增加或減少節點集區的節點數目。
若要調整節點集區的節點數目,請使用 Set-AksHciNodePool 命令。 下列範例會將節點數目調整為叢集中名為 linuxnodepool
mycluster
的節點集區中的 3。
Set-AksHciNodePool -clusterName mycluster -name linuxnodepool -count 3
增減控制平面節點
控制平面節點的管理尚未變更。 建立、增減和移除的方式維持不變。 如果您未提供任何值,您仍會使用 New-AksHciCluster 命令和參數 controlPlaneNodeCount
和 controlPlaneVmSize
預設值 1 和 Standard_A4_V2部署控制平面節點。
隨著應用程式的工作負載需求改變,您可能需要增減控制平面節點。 若要增減控制平面節點,請使用 Set-AksHciCluster 命令。 下列範例會將控制平面節點調整為叢集中的 3 mycluster
,這是在先前步驟中建立的。
Set-AksHciCluster -name mycluster -controlPlaneNodeCount 3
刪除節點集區
如果您需要刪除節點集區,請使用 Remove-AksHciNodePool 命令。 下列範例會從叢集移除名為 windowsnodepool
的 mycluster
節點集區。
Remove-AksHciNodePool -clusterName mycluster -name windowsnodepool
指定節點集區的污點
建立節點集區時,您可以將該節點集區加上污點。 當您新增污點時,該節點集區的所有節點也會感染該污點。 如需污點和容忍的詳細資訊,請參閱 Kubernetes 污點和容忍。
設定節點集區污點
若要建立有污點的節點集區,請使用 New-AksHciNodePool。 指定名稱 taintnp
,並使用 -taints
參數來指定 sku=gpu:noSchedule
taint。
New-AksHciNodePool -clusterName mycluster -name taintnp -count 1 -osType linux -taints sku=gpu:NoSchedule
注意
只有在節點集區建立期間才能設定節點集區的污點。
執行下列命令,確定節點集區已成功使用指定的 Taint 進行部署。
Get-AksHciNodePool -clusterName mycluster -name taintnp
輸出
Status : {Phase, Details}
ClusterName : mycluster
NodePoolName : taintnp
Version : v1.20.7-kvapkg.1
OsType : Linux
NodeCount : 1
VmSize : Standard_K8S3_v1
Phase : Deployed
Taints : {sku=gpu:NoSchedule}
在上一個步驟中,您在建立節點集區時套用 sku=gpu:NoSchedule 污點。 下列基本範例 YAML 資訊清單使用容忍,以允許 Kubernetes 排程器在該節點集區的節點上執行 NGINX Pod。
建立名為 nginx-toleration.yaml
的檔案,並複製下列文字中的資訊。
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- image: mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine
name: mypod
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 1
memory: 2G
tolerations:
- key: "sku"
operator: "Equal"
value: "gpu"
effect: "NoSchedule"
然後,使用下列命令排程 Pod。
kubectl apply -f nginx-toleration.yaml
若要確認已部署 Pod,請執行下列命令:
kubectl describe pod mypod
[...]
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
sku=gpu:NoSchedule
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 32s default-scheduler Successfully assigned default/mypod to moc-lk4iodl7h2y
Normal Pulling 30s kubelet Pulling image "mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine"
Normal Pulled 26s kubelet Successfully pulled image "mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine" in 4.529046457s
Normal Created 26s kubelet Created container mypod