共用方式為


管理叢集的節點集區 (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-AksHciNodePoolRemove-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 以取得叢集資訊,則欄位和LinuxNodeCount輸出中的欄位WindowsNodeCount將會傳回 0。 若要取得每個節點集區中節點的準確數目,請使用命令 Get-AksHciNodePool 搭配指定的叢集名稱。

調整節點集區

您可以在節點集區中相應增加或減少節點數目。

若要調整節點集區中的節點數目,請使用 Set-AksHciNodePool 命令。 下列範例會將叢集中名為 linuxnodepool mycluster 的節點集區中的節點數目調整為 3。

Set-AksHciNodePool -clusterName mycluster -name linuxnodepool -count 3

調整控制平面節點

控制平面節點的管理尚未變更。 建立、調整和移除它們的方式會維持不變。 如果您未提供任何值,您仍會使用 New-AksHciCluster 命令搭配參數 controlPlaneNodeCountcontrolPlaneVmSize 預設值分別為 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 Taints 和 Tolerations

設定節點集區污點

若要建立具有污點的節點集區,請使用 New-AksHciNodePool。 指定名稱 taintnp,並使用 -taints 參數來指定 sku=gpu:noSchedule 污點。

New-AksHciNodePool -clusterName mycluster -name taintnp -count 1 -osType linux -taints sku=gpu:NoSchedule

注意

在節點集區建立期間,只能針對節點集區設定污點。

執行下列命令,以確定節點集區已使用指定的污點成功部署。

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

下一步