在 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-AksHciClusterSet-AksHciCluster 执行群集操作是创建或缩放包含一个 Windows 节点池和一个 Linux 节点池的群集的唯一选项。 此功能为需要使用节点池命令 New-AksHciNodePoolSet-AksHciNodePoolGet-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

若要查看一个特定节点池的配置信息,请使用 -nameGet-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 来获取群集信息,则输出中的字段 WindowsNodeCountLinuxNodeCount 将返回 0。 要获取每个节点池中的准确节点数,请使用具有指定群集名称的命令 Get-AksHciNodePool

缩放节点池

可以纵向扩展或缩减节点池中的节点数。

若要缩放节点池中的节点数,请使用 Set-AksHciNodePool 命令。 以下示例将群集中名为 linuxnodepoolmycluster 的节点池中的节点数缩放为 3。

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

缩放控制平面节点数

控制平面节点的管理未更改。 创建、缩放和删除它们的方式保持不变。 如果不提供任何值,仍会使用 New-AksHciCluster 命令部署控制平面节点,这些节点controlPlaneNodeCountcontrolPlaneVmSize的参数和默认值分别为 1 和 Standard_A4_V2。

当应用程序的工作负载需求改变时,可能需要缩放控制平面节点。 若要缩放控制平面节点,请使用 Set-AksHciCluster 命令。 以下示例将群集中的 mycluster 控制平面节点缩放为 3,这是在前面的步骤中创建的。

Set-AksHciCluster -name mycluster -controlPlaneNodeCount 3

删除节点池

如果需要删除节点池,请使用 Remove-AksHciNodePool 命令。 以下示例从群集中删除名为 windowsnodepoolmycluster 节点池。

Remove-AksHciNodePool -clusterName mycluster -name windowsnodepool

为节点池指定排斥

创建节点池时,可将排斥添加到该节点池。 添加排斥时,该节点池中的所有节点也会获取该排斥。 有关排斥和容许的详细信息,请参阅 Kubernetes 排斥和容许

设置节点池排斥

若要创建具有排斥的节点池,请使用 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

后续步骤