你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
为 Azure Kubernetes 服务 (AKS) 中的群集创建和管理多个节点池
在 Azure Kubernetes 服务 (AKS) 中,采用相同配置的节点分组成节点池。 这些节点池包含运行应用程序的底层 VM。 节点的初始数量和大小 (SKU) 是创建 AKS 群集时(此时会创建系统节点池)定义的。 若要支持具有不同计算或存储需求的应用程序,可以创建额外的用户节点池。 系统节点池主要用于托管关键系统 Pod(例如 CoreDNS 和 konnectivity
)。 用户节点池主要用于托管应用程序 Pod。 但是,如果希望在 AKS 群集中只有一个池,可以在系统节点池上计划应用程序 Pod。 用户节点池用于放置应用程序特定的 Pod。 例如,使用这些额外的用户节点池可为计算密集型应用程序提供 GPU,或者访问高性能 SSD 存储。
注意
利用此功能可以更好地控制如何创建和管理多个节点池。 因此,需要使用单独的命令来执行创建/更新/删除操作。 以前,通过 az aks create
或 az aks update
执行的群集操作使用 managedCluster API,并且只能通过这些操作更改控制平面和单个节点池。 此功能通过 agentPool API 为代理池公开单独的操作集,并要求使用 az aks nodepool
命令集对单个节点池执行操作。
本文介绍如何在 AKS 群集中创建和管理多个节点池。
准备阶段
需要安装并配置 Azure CLI 2.2.0 或更高版本。 运行 az --version
即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI。
限制
创建和管理支持多个节点池的 AKS 群集时存在以下限制:
- 请参阅 Azure Kubernetes 服务 (AKS) 中可用的配额、虚拟机大小限制和区域。
- 可以删除系统节点池,前提是有另一个可在 AKS 群集中取代它的系统节点池。
- 系统池必须至少包含一个节点,而用户节点池则可能包含零个或零个以上的节点。
- AKS 群集必须通过标准 SKU 负载均衡器来使用多个节点池,而基本 SKU 负载均衡器并不支持该功能。
- AKS 群集必须对节点使用虚拟机规模集。
- 创建节点池后,无法更改其 VM 大小。
- 节点池的名称只能包含小写字母数字字符,且必须以小写字母开头。 Linux 节点池的名称长度必须为 1 到 12 个字符;Windows 节点池的名称长度必须为 1 到 6 个字符。
- 所有节点池都必须位于同一虚拟网络中。
- 在创建群集的过程中创建多个节点池时,节点池使用的所有 Kubernetes 版本都必须与已为控制平面设置的版本相匹配。 这可以在已使用每节点池操作预配了群集后更新。
创建 AKS 群集
重要
如果在生产环境中为 AKS 群集运行单个系统节点池,则建议至少将三个节点用作节点池。 如果一个节点出现故障,则会失去控制平面资源,冗余会受到影响。 可以通过增加控制平面节点来缓解此风险。
若要开始,请创建包含单个节点池的 AKS 群集。 以下示例使用 az group create 命令在 eastus 区域中创建名为 myResourceGroup 的资源组 。 然后使用 az aks create
命令创建名为 myAKSCluster 的 AKS 群集。
注意
使用多个节点池时,不支持“基本”负载均衡器 SKU。 默认情况下,AKS 群集是在 Azure CLI 和 Azure 门户中使用“标准”负载均衡器 SKU 创建的。
# Create a resource group in East US
az group create --name myResourceGroup --location eastus
# Create a basic single-node pool AKS cluster
az aks create \
--resource-group myResourceGroup \
--name myAKSCluster \
--vm-set-type VirtualMachineScaleSets \
--node-count 2 \
--generate-ssh-keys \
--load-balancer-sku standard
创建群集需要几分钟时间。
注意
为了确保群集可靠运行,应在默认节点池中至少运行 2(两)个节点,因为基本系统服务将在整个节点池中运行。
群集准备就绪后,请使用 az aks get-credentials
命令获取要与 kubectl
结合使用的群集凭据:
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
添加节点池
在上一步骤中创建的群集包含单个节点池。 让我们使用 az aks nodepool add
命令添加第二个节点池。 以下示例创建名为 mynodepool 的节点池,该节点池运行 3 个节点:
az aks nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name mynodepool \
--node-count 3
注意
节点池的名称必须以小写字母开头,且只能包含字母数字字符。 Linux 节点池的名称长度必须为 1 到 12 个字符;Windows 节点池的名称长度必须为 1 到 6 个字符。
若要查看节点池的状态,请使用 az aks node pool list
命令并指定资源组和群集名称:
az aks nodepool list --resource-group myResourceGroup --cluster-name myAKSCluster
以下示例输出显示已成功地在节点池中创建包含三个节点的 mynodepool。 在上一步骤中创建 AKS 群集时,已创建包含 2 个节点的默认 nodepool1。
[
{
...
"count": 3,
...
"name": "mynodepool",
"orchestratorVersion": "1.15.7",
...
"vmSize": "Standard_DS2_v2",
...
},
{
...
"count": 2,
...
"name": "nodepool1",
"orchestratorVersion": "1.15.7",
...
"vmSize": "Standard_DS2_v2",
...
}
]
提示
如果在添加节点池时未指定 VmSize ,则 Windows 节点池的默认大小为 Standard_D2s_v3,Linux 节点池的默认大小为 Standard_DS2_v2 。 如果未指定 OrchestratorVersion,则它将默认为与控制平面相同的版本。
添加 ARM64 节点池
ARM64 处理器针对 Kubernetes 工作负载提供低功率计算。 若要创建 ARM64 节点池,需要选择 Dpsv5、Dplsv5 或 Epsv5 系列虚拟机。
限制
- 已启用 Defender 的群集上不支持 ARM64 节点池
- ARM64 SKU 不支持已启用 FIPS 的节点池
使用 az aks nodepool add
命令添加一个 ARM64 节点池。
az aks nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name armpool \
--node-count 3 \
--node-vm-size Standard_D2pds_v5
添加 Mariner 节点池
Mariner 是一种开源 Linux 分发版,可用作 AKS 容器主机。 它提供高可靠性、安全性和一致性。 Mariner 仅包含运行容器工作负载所需的最小包集,从而缩短启动时间和提高整体性能。
可以使用 az aks nodepool add
命令并指定 --os-sku mariner
将 Mariner 节点池添加到现有群集中。
az aks nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name marinerpool \
--os-sku mariner
将 Ubuntu 节点迁移到 Mariner
按照以下说明将 Ubuntu 节点迁移到 Mariner 节点。
- 使用
az aks nodepool add
命令并指定--os-sku mariner
将 Mariner 节点池添加到现有群集中。
注意
添加新的 Mariner 节点池时,需要至少添加一个作为 --mode System
。 否则,AKS 不允许删除现有 Ubuntu 节点池。
- 封锁现有 Ubuntu 节点。
- 清空现有 Ubuntu 节点。
- 使用
az aks delete
命令删除现有 Ubuntu 节点。
az aks nodepool delete \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name myNodePool
添加一个具有唯一子网的节点池
某个工作负载可能会要求将群集的节点拆分为单独的池以进行逻辑隔离。 可使用专用于群集中每个节点池的单独子网来支持这种隔离。 这可以满足例如在节点池中拆分非连续的虚拟网络地址空间的要求。
注意
请确保使用 Azure CLI 版本 2.35.0
或更高版本。
限制
- 分配给节点池的所有子网都必须属于同一虚拟网络。
- 系统 Pod 必须有权访问群集中的所有节点/pod,以提供关键功能,例如 DNS 解析和隧道 kubectl logs/exec/port-forward 代理。
- 如果你在创建群集后扩展 VNET,则必须更新群集(执行任意托管群集操作,但节点池操作不算),然后添加到原始 CIDR 块之外的子网。 尽管我们最初允许,但 AKS 会在现在添加的代理池上出错。
aks-preview
Azure CLI 扩展(版本 0.5.66+)现在支持在不使用任何可选参数的情况下运行az aks update -g <resourceGroup> -n <clusterName>
。 此命令将执行更新操作,而不会进行任何更改,这会恢复停滞在失败状态的群集。 - 在 Kubernetes 版本 < 1.23.3 的群集中,kube-proxy 将获取新子网的 SNAT 流量,这可能导致 Azure 网络策略删除数据包。
- Windows 节点会将 SNAT 流量发送到新子网,直到节点池完成映像重置。
- 内部负载均衡器默认为其中一个节点池子网(通常是创建群集时节点池的第一个子网)。 若要替代此行为,可以使用批注显式指定负载均衡器的子网。
若要创建具有专用子网的节点池,请在创建节点池时将子网资源 ID 作为附加参数传递。
az aks nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name mynodepool \
--node-count 3 \
--vnet-subnet-id <YOUR_SUBNET_RESOURCE_ID>
升级节点池
注意
不能对群集或节点池同时执行升级和缩放操作,否则会返回错误。 而只能先在目标资源上完成一个操作类型,然后再在同一资源上执行下一个请求。 请阅读故障排除指南中的详细信息。
本部分中的命令说明如何升级单个特定的节点池。 下一部分将会说明升级控制平面与节点池的 Kubernetes 版本之间的关系。
注意
节点池的 OS 映像版本与群集的 Kubernetes 版本相关联。 只能先升级 OS 映像,然后再升级群集。
由于本示例包含两个节点池,因此必须使用 az aks nodepool upgrade
来升级节点池。 若要查看可用的升级,请使用 az aks get-upgrades
az aks get-upgrades --resource-group myResourceGroup --name myAKSCluster
现在升级 mynodepool。 如以下示例中所示,使用 az aks nodepool upgrade
命令升级节点池:
az aks nodepool upgrade \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name mynodepool \
--kubernetes-version KUBERNETES_VERSION \
--no-wait
使用 az aks node pool list
命令再次列出节点池的状态。 以下示例显示“mynodepool”处于“升级”状态,正在升级到 KUBERNETES_VERSION :
az aks nodepool list -g myResourceGroup --cluster-name myAKSCluster
[
{
...
"count": 3,
...
"name": "mynodepool",
"orchestratorVersion": "KUBERNETES_VERSION",
...
"provisioningState": "Upgrading",
...
"vmSize": "Standard_DS2_v2",
...
},
{
...
"count": 2,
...
"name": "nodepool1",
"orchestratorVersion": "1.15.7",
...
"provisioningState": "Succeeded",
...
"vmSize": "Standard_DS2_v2",
...
}
]
将节点升级到指定的版本需要花费几分钟时间。
最佳做法是将 AKS 群集中的所有节点池升级到相同的 Kubernetes 版本。 az aks upgrade
的默认行为是将所有节点池连同控制平面一起升级,以实现这种一致性。 升级单个节点池的功能可让你执行滚动升级,并在节点池之间计划 pod,使应用程序的正常运行时间保持在上述约束范围内。
升级包含多个节点池的群集控制平面
注意
Kubernetes 使用标准的语义化版本控制方案。 版本号以 x.y.z 表示,其中,x 是主要版本,y 是次要版本,z 是修补程序版本。 例如,版本 1.12.6 中的 1 是主要版本,12 是次要版本,6 是修补程序版本。 控制平面和初始节点池的 Kubernetes 版本是在群集创建过程中设置的。 将所有附加节点池添加到群集时,将为其设置 Kubernetes 版本。 不同节点池的 Kubernetes 版本可能不同,节点池与控制平面的 Kubernetes 版本也可能不同。
AKS 群集包含两个具有关联 Kubernetes 版本的群集资源对象。
- 群集控制平面 Kubernetes 版本。
- 具有 Kubernetes 版本的节点池。
一个控制平面映射到一个或多个节点池。 升级操作的行为取决于所用的 Azure CLI 命令。
升级 AKS 控制平面需要使用 az aks upgrade
。 此命令将升级群集中的控制平面版本和所有节点池。
结合 --control-plane-only
标志发出 az aks upgrade
命令只会升级群集控制平面, 而不会更改群集中任何关联的节点池。
升级单个节点池需要使用 az aks nodepool upgrade
。 此命令只会升级具有指定 Kubernetes 版本的目标节点池
升级验证规则
群集控制平面和节点池的有效 Kubernetes 升级由以下规则集验证。
用于升级节点池的有效版本的规则:
- 节点池版本的主要版本必须与控制平面相同。
- 节点池的次要版本必须在控制平面版本的两个次要版本范围内。
- 节点池版本不能大于控制平面的
major.minor.patch
版本。
提交升级操作的规则:
- 无法降级控制平面或节点池的 Kubernetes 版本。
- 如果未指定节点池的 Kubernetes 版本,则行为取决于所用的客户端。 资源管理器模板中的声明会回退到为节点池定义的现有版本(如果已使用)。如果未设置现有版本,则会使用控制平面版本进行回退。
- 可以在给定的时间升级或者缩放控制平面或节点池,而不能同时对单个控制平面或节点池资源提交多个操作。
手动缩放节点池
当应用程序工作负荷需求发生变化时,你可能需要缩放节点池中的节点数。 可以增加或减少节点数。
若要缩放节点池中的节点数,请使用 az aks node pool scale
命令。 以下示例将 mynodepool 中的节点数缩放为 5:
az aks nodepool scale \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name mynodepool \
--node-count 5 \
--no-wait
使用 az aks node pool list
命令再次列出节点池的状态。 以下示例显示 mynodepool 处于 Scaling(正在缩放)状态,其中的新节点计数为 5:
az aks nodepool list -g myResourceGroup --cluster-name myAKSCluster
[
{
...
"count": 5,
...
"name": "mynodepool",
"orchestratorVersion": "1.15.7",
...
"provisioningState": "Scaling",
...
"vmSize": "Standard_DS2_v2",
...
},
{
...
"count": 2,
...
"name": "nodepool1",
"orchestratorVersion": "1.15.7",
...
"provisioningState": "Succeeded",
...
"vmSize": "Standard_DS2_v2",
...
}
]
需要花费几分钟时间来完成缩放操作。
通过启用群集自动缩放程序来自动缩放特定节点池
AKS 提供了一项单独的功能,用于通过一项称为群集自动缩放程序的功能来自动缩放节点池。 可以为每个节点池启用此功能,每个节点池具有唯一的最小和最大规模计数。 了解如何对每个节点池使用群集自动缩放程序。
删除节点池
不再需要某个池时,可将其删除并删除底层 VM 节点。 若要删除节点池,请使用 az aks node pool delete
命令并指定节点池名称。 以下示例删除在前面步骤中创建的 mynodepool:
注意
删除节点池时,AKS 不会执行隔离和排出,如果删除节点池时发生数据丢失,则没有任何选项可以恢复数据。 如果无法在其他节点池中计划 pod,则这些应用程序会变得不可用。 当使用中的应用程序没有数据备份或者无法在群集中的其他节点池上运行时,请务必不要删除节点池。 若要最大程度地减少对重新计划 Pod(当前正在要删除的节点池上运行)的中断,请在删除之前对节点池中的所有节点执行隔离和排出。 有关详细信息,请参阅隔离和排空节点池。
az aks nodepool delete -g myResourceGroup --cluster-name myAKSCluster --name mynodepool --no-wait
az aks node pool list
命令的以下示例输出显示 mynodepool 处于 Deleting(正在删除)状态:
az aks nodepool list -g myResourceGroup --cluster-name myAKSCluster
[
{
...
"count": 5,
...
"name": "mynodepool",
"orchestratorVersion": "1.15.7",
...
"provisioningState": "Deleting",
...
"vmSize": "Standard_DS2_v2",
...
},
{
...
"count": 2,
...
"name": "nodepool1",
"orchestratorVersion": "1.15.7",
...
"provisioningState": "Succeeded",
...
"vmSize": "Standard_DS2_v2",
...
}
]
删除节点和节点池需要花费几分钟时间。
将产能预留组关联到节点池(预览版)
重要
AKS 预览功能是可选择启用的自助功能。 预览功能是“按现状”和“按可用”提供的,不包括在服务级别协议和有限保证中。 AKS 预览功能是由客户支持尽最大努力部分覆盖。 因此,这些功能并不适合用于生产。 有关详细信息,请参阅以下支持文章:
可以根据应用程序工作负载的需求将节点池关联到之前创建的产能预留组。 这会确保为节点池分配保证的产能。
有关产能预留组的详细信息,请参阅产能预留组。
可以使用 az aks nodepool add
命令并通过 --capacityReservationGroup 标志指定 产能预留组,将节点池与现有产能预留组相关联。产能预留组应已存在,否则会将节点池添加到群集中并显示一条警告,而不会关联任何产能预留组。
az aks nodepool add -g MyRG --cluster-name MyMC -n myAP --capacityReservationGroup myCRG
可以使用 az aks create
命令将系统节点池与现有产能预留组相关联。 如果指定的产能预留组不存在,则会发出警告,并且将创建不带任何产能预留组关联的群集。
az aks create -g MyRG --cluster-name MyMC --capacityReservationGroup myCRG
删除节点池命令会将节点池与任何关联的产能预留组隐式取消关联,然后再删除该节点池。
az aks nodepool delete -g MyRG --cluster-name MyMC -n myAP
删除群集命令会将群集中的所有节点池与其关联的产能预留组隐式取消关联。
az aks delete -g MyRG --cluster-name MyMC
指定节点池的 VM 大小
在前面的创建节点池示例中,对群集中创建的节点使用了默认 VM 大小。 一个更常见的场景是创建具有不同 VM 大小和功能的节点池。 例如,可以创建一个包含具有大量 CPU 或内存的节点的节点池,或创建一个提供 GPU 支持的节点池。 下一步骤将使用排斥和容许来告知 Kubernetes 计划程序如何将访问权限限制为可在这些节点上运行的 pod。
在以下示例中,创建使用 Standard_NC6 VM 大小的基于 GPU 的节点池。 这些 VM 采用 NVIDIA Tesla K80 卡。 有关可用 VM 大小的信息,请参阅 Azure 中的 Linux 虚拟机大小。
再次使用 az aks node pool add
命令创建节点池。 这一次请指定名称 gpunodepool,并使用 --node-vm-size
参数指定 Standard_NC6 大小 :
az aks nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name gpunodepool \
--node-count 1 \
--node-vm-size Standard_NC6 \
--no-wait
az aks node pool list az aks node pool list
命令的以下示例输出显示 gpunodepool 正在创建具有指定 VmSize 的节点:
az aks nodepool list -g myResourceGroup --cluster-name myAKSCluster
[
{
...
"count": 1,
...
"name": "gpunodepool",
"orchestratorVersion": "1.15.7",
...
"provisioningState": "Creating",
...
"vmSize": "Standard_NC6",
...
},
{
...
"count": 2,
...
"name": "nodepool1",
"orchestratorVersion": "1.15.7",
...
"provisioningState": "Succeeded",
...
"vmSize": "Standard_DS2_v2",
...
}
]
成功创建 gpunodepool 需要花费几分钟时间。
指定节点池的排斥、标签或标记
创建节点池时,可将排斥、标签或标记添加到该节点池。 添加排斥、标签或标记时,该节点池中的所有节点也会获取该排斥、标签或标记。
重要
应该使用 az aks nodepool
为整个节点池向节点添加排斥、标签或标记。 不建议使用 kubectl
将排斥、标签或标记应用于节点池中的单个节点。
设置节点池排斥
若要创建具有排斥的节点池,请使用 az aks nodepool add
。 指定名称 taintnp,并使用 --node-taints
参数为排斥指定 sku=gpu:NoSchedule。
az aks nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--name taintnp \
--node-count 1 \
--node-taints sku=gpu:NoSchedule \
--no-wait
az aks nodepool listaz aks nodepool list
命令的以下示例输出显示 taintnp 正在创建具有指定 nodeTaints 的节点:
az aks nodepool list -g myResourceGroup --cluster-name myAKSCluster
[
{
...
"count": 1,
...
"name": "taintnp",
"orchestratorVersion": "1.15.7",
...
"provisioningState": "Creating",
...
"nodeTaints": [
"sku=gpu:NoSchedule"
],
...
},
...
]
排斥信息将显示在 Kubernetes 中,以便于处理节点的计划规则。 Kubernetes 计划程序能够使用排斥和容许来限制可在节点上运行的工作负荷。
- 将排斥应用到指明了只能计划特定 pod 的节点。
- 然后,将容许应用到可以容许节点排斥的 pod。
有关如何使用 Kubernetes 高级计划功能的详细信息,请参阅有关 AKS 中的高级计划程序功能的最佳做法
在上一步中,你在创建节点池时应用了 sku=gpu:NoSchedule 排斥。 以下基本示例 YAML 清单使用容许来允许 Kubernetes 计划程序在该节点池中的节点上运行 NGINX Pod。
创建名为 nginx-toleration.yaml
的文件,并将其复制到以下示例 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"
使用 kubectl apply -f nginx-toleration.yaml
命令计划 pod:
kubectl apply -f nginx-toleration.yaml
只需花费几秒钟时间即可计划 pod 并提取 NGINX 映像。 使用 kubectl describe pod 命令查看 pod 状态。 以下精简示例输出显示已应用 sku=gpu:NoSchedule 容许。 在 events 节中,计划程序已将 Pod 分配到 aks-taintnp-28993262-vmss000000 节点:
kubectl describe pod mypod
[...]
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
sku=gpu:NoSchedule
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 4m48s default-scheduler Successfully assigned default/mypod to aks-taintnp-28993262-vmss000000
Normal Pulling 4m47s kubelet pulling image "mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine"
Normal Pulled 4m43s kubelet Successfully pulled image "mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine"
Normal Created 4m40s kubelet Created container
Normal Started 4m40s kubelet Started container
只能在 taintnp 中的节点上计划已应用此容许的 Pod。 任何其他 pod 将在 nodepool1 节点池中计划。 如果创建额外的节点池,可以使用额外的排斥和容许来限制可在这些节点资源上计划的 pod。
设置节点池标签
有关将标签与节点池配合使用的详细信息,请参阅在 Azure Kubernetes 服务 (AKS) 群集中使用标签。
设置节点池 Azure 标记
有关将 Azure 标记与节点池配合使用的详细信息,请参阅在 Azure Kubernetes 服务 (AKS) 中使用 Azure 标记。
添加已启用 FIPS 的节点池
有关为 AKS 群集启用联邦信息处理标准 (FIPS) 的详细信息,请参阅为 Azure Kubernetes 服务 (AKS) 节点池启用联邦信息处理标准 (FIPS)。
使用资源管理器模板管理节点池
使用 Azure 资源管理器模板创建和管理资源时,通常可以更新该模板中的设置,然后重新部署以更新资源。 对于 AKS 中的节点池,一旦创建 AKS 群集,就无法更新初始节点池的配置文件。 此行为意味着无法更新现有的资源管理器模板,更改节点池,然后重新部署。 必须创建单独的资源管理器模板来仅更新现有 AKS 群集的节点池。
创建一个模板(例如 aks-agentpools.json
)并粘贴以下示例清单。 此示例模板配置以下设置:
- 将名为 myagentpool 的 Linux 节点池更新为运行三个节点。
- 将节点池中的节点设置为运行 Kubernetes 版本 1.15.7。
- 将节点大小定义为 Standard_DS2_v2。
根据需要编辑这些值,以更新、添加或删除节点池:
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"clusterName": {
"type": "string",
"metadata": {
"description": "The name of your existing AKS cluster."
}
},
"location": {
"type": "string",
"metadata": {
"description": "The location of your existing AKS cluster."
}
},
"agentPoolName": {
"type": "string",
"defaultValue": "myagentpool",
"metadata": {
"description": "The name of the agent pool to create or update."
}
},
"vnetSubnetId": {
"type": "string",
"defaultValue": "",
"metadata": {
"description": "The Vnet subnet resource ID for your existing AKS cluster."
}
}
},
"variables": {
"apiVersion": {
"aks": "2020-01-01"
},
"agentPoolProfiles": {
"maxPods": 30,
"osDiskSizeGB": 0,
"agentCount": 3,
"agentVmSize": "Standard_DS2_v2",
"osType": "Linux",
"vnetSubnetId": "[parameters('vnetSubnetId')]"
}
},
"resources": [
{
"apiVersion": "2020-01-01",
"type": "Microsoft.ContainerService/managedClusters/agentPools",
"name": "[concat(parameters('clusterName'),'/', parameters('agentPoolName'))]",
"location": "[parameters('location')]",
"properties": {
"maxPods": "[variables('agentPoolProfiles').maxPods]",
"osDiskSizeGB": "[variables('agentPoolProfiles').osDiskSizeGB]",
"count": "[variables('agentPoolProfiles').agentCount]",
"vmSize": "[variables('agentPoolProfiles').agentVmSize]",
"osType": "[variables('agentPoolProfiles').osType]",
"storageProfile": "ManagedDisks",
"type": "VirtualMachineScaleSets",
"vnetSubnetID": "[variables('agentPoolProfiles').vnetSubnetId]",
"orchestratorVersion": "1.15.7"
}
}
]
}
如以下示例中所示,使用 az deployment group create
命令部署此模板。 系统将提示输入现有的 AKS 群集名称和位置:
az deployment group create \
--resource-group myResourceGroup \
--template-file aks-agentpools.json
提示
可以通过在模板中添加 tag 属性,将标记添加到节点池,如以下示例所示。
...
"resources": [
{
...
"properties": {
...
"tags": {
"name1": "val1"
},
...
}
}
...
更新 AKS 群集可能需要花费几分钟时间,具体取决于资源管理器模板中定义的节点池设置和操作。
清理资源
在本文中,你已创建包含基于 GPU 的节点的 AKS 群集。 为了减少不必要的费用,我们建议删除 gpunodepool 或整个 AKS 群集。
若要删除基于 GPU 的节点池,请如以下示例中所示使用 az aks nodepool delete
命令:
az aks nodepool delete -g myResourceGroup --cluster-name myAKSCluster --name gpunodepool
若要删除群集本身,请使用 az group delete
命令删除 AKS 资源组:
az group delete --name myResourceGroup --yes --no-wait
还可以删除为“节点池的公共 IP”方案创建的其他群集。
az group delete --name myResourceGroup2 --yes --no-wait
后续步骤
详细了解系统节点池。
本文已介绍如何在 AKS 群集中创建和管理多个节点池。 有关如何跨节点池控制 pod 的详细信息,请参阅有关 AKS 中的高级计划程序功能的最佳做法。
要创建和使用 Windows Server 容器节点池,请参阅在 AKS 中创建 Windows Server 容器。
使用邻近放置组来降低 AKS 应用程序的延迟。
使用实例级公共 IP 地址使节点能够直接服务于流量。