如果你有多个节点池,可能希望在创建节点池期间添加标签。 Kubernetes 标签处理节点的计划规则。 可以随时将标签添加到节点池,并将其应用于该节点池的所有节点。
在本操作指南中,你会了解如何在 Azure Kubernetes 服务 (AKS) 群集中使用标签。
先决条件
需要安装并配置 Azure CLI 2.2.0 或更高版本。 运行 az --version
即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI。
创建带标签的 AKS 群集
可以使用节点标签创建 AKS 群集,为工作负荷计划设置键/值元数据。
export RANDOM_SUFFIX=$(openssl rand -hex 3)
export RESOURCE_GROUP="myResourceGroup$RANDOM_SUFFIX"
export AKS_CLUSTER_NAME="myAKSCluster$RANDOM_SUFFIX"
az group create --name $RESOURCE_GROUP --location $REGION
结果:
{
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroupxxx",
"location": "chinanorth3",
"managedBy": null,
"name": "myResourceGroupxxx",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.Resources/resourceGroups"
}
创建指定节点标签的 AKS 群集(例如,dept=IT,costcenter=9000):
az aks create \
--resource-group $RESOURCE_GROUP \
--name $AKS_CLUSTER_NAME \
--node-count 2 \
--nodepool-labels dept=IT costcenter=9000 \
--generate-ssh-keys --location $REGION
结果:
{
"aadProfile": null,
"addonProfiles": {},
"agentPoolProfiles": [
{
"count": 2,
"enableAutoScaling": null,
"mode": "System",
"name": "nodepool1",
"nodeLabels": {
"costcenter": "9000",
"dept": "IT"
}
}
],
"dnsPrefix": "myaksclusterxxx-dns",
"fqdn": "myaksclusterxxx-xxxxxxxx.hcp.eastus2.cx.prod.service.azk8s.cn",
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.ContainerService/managedClusters/myAKSClusterxxx",
"location": "chinanorth3",
"name": "myAKSClusterxxx",
"resourceGroup": "myResourceGroupxxx"
}
验证是否已设置标签:
az aks get-credentials --resource-group $RESOURCE_GROUP --name $AKS_CLUSTER_NAME --overwrite-existing
kubectl get nodes --show-labels | grep -e "costcenter=9000" -e "dept=IT"
创建带标签的节点池
可以创建附有标签的其他节点池,以满足特定的调度需求。
export NODEPOOL_NAME="labelnp"
az aks nodepool add \
--resource-group $RESOURCE_GROUP \
--cluster-name $AKS_CLUSTER_NAME \
--name $NODEPOOL_NAME \
--node-count 1 \
--labels dept=HR costcenter=5000 \
下面是 az aks nodepool list
命令的示例结果,其中显示 labelnp 节点池正在 创建 具有指定 nodeLabels 的节点:
az aks nodepool list --resource-group $RESOURCE_GROUP --cluster-name $AKS_CLUSTER_NAME
结果:
[
{
"count": 2,
"name": "nodepool1",
"nodeLabels": {
"costcenter": "9000",
"dept": "IT"
}
},
{
"count": 1,
"name": "labelnp",
"nodeLabels": {
"costcenter": "5000",
"dept": "HR"
},
"provisioningState": "Creating"
}
]
验证是否已设置标签:
kubectl get nodes --show-labels | grep -e "costcenter=5000" -e "dept=HR"
更新现有节点池上的标签
可以更新现有节点池上的标签。 请注意,更新标签将覆盖旧标签。
az aks nodepool update \
--resource-group $RESOURCE_GROUP \
--cluster-name $AKS_CLUSTER_NAME \
--name $NODEPOOL_NAME \
--labels dept=ACCT costcenter=6000 \
验证是否已设置新标签:
kubectl get nodes --show-labels | grep -e "costcenter=6000" -e "dept=ACCT"
不可用的标签
保留的系统标签
从2021-08-19 AKS 版本开始,AKS 停用了对 AKS 保留的标签进行更改的功能。 尝试更改这些标签会导致出现错误消息。
以下标签是 AKS 保留的标签。 “虚拟节点用途”指定这些标签是否可以用作虚拟节点上的受支持系统功能。 这些系统功能更改的一些属性在虚拟节点上不可用,因为它们需要修改主机。
标签 | 价值 | 示例/选项 | 虚拟节点用途 |
---|---|---|---|
kubernetes.azure.com/agentpool | <代理池名称> | nodepool1 | 相同 |
kubernetes.io/arch | amd64 | runtime.GOARCH | 无 |
kubernetes.io/os | <OS 类型> | Linux/Windows | 相同 |
node.kubernetes.io/instance-type | <VM 大小> | Standard_NC6s_v3 | 虚拟 |
topology.kubernetes.io/region | <Azure 区域> | chinanorth3 | 相同 |
topology.kubernetes.io/zone | <Azure 区域> | 0 | 相同 |
kubernetes.azure.com/cluster | <MC_RgName> | MC_aks_myAKSCluster_chinanorth3 | 相同 |
kubernetes.azure.com/managedby | AKS | AKS | 无 |
kubernetes.azure.com/mode | <模式> | 用户或系统 | 用户 |
kubernetes.azure.com/role | 代理 | 代理人 | 相同 |
kubernetes.azure.com/scalesetpriority | <VMSS 优先级> | 现成 VM 或常规 VM | 无 |
kubernetes.io/hostname | <主机名> | aks-nodepool-00000000-vmss000000 | 相同 |
kubernetes.azure.com/storageprofile | <OS 磁盘存储配置文件> | 托管 | 无 |
kubernetes.azure.com/storagetier | <OS 磁盘存储层> | Premium_LRS | 无 |
kubernetes.azure.com/instance-sku | <SKU 系列> | Standard_N | 虚拟 |
kubernetes.azure.com/node-image-version | <VHD 版本> | AKSUbuntu-1804-2020.03.05 | 虚拟节点版本 |
kubernetes.azure.com/subnet | <节点池子网名称> | 子网名称 | 虚拟节点子网名称 |
kubernetes.azure.com/vnet | <节点池 vnet 名称> | vnetName | 虚拟节点虚拟网络 |
kubernetes.azure.com/ppg | <节点池 ppg 名称> | ppgName | 无 |
kubernetes.azure.com/encrypted-set | <节点池已加密集名称> | encrypted-set-name | 无 |
kubernetes.azure.com/accelerator | <加速器> | nvidia | 无 |
kubernetes.azure.com/fips_enabled | <是否启用了 fips?> | 是 | 无 |
kubernetes.azure.com/os-sku | <os/sku> | 创建或更新 OS SKU | Linux |
- “相同”是指标签的预期值在标准节点池和虚拟节点池中没有差别。 由于虚拟节点 pod 不公开任何基础虚拟机 (VM),因此 VM SKU 值已替换为 SKU“虚拟”。
- 虚拟节点版本指的是虚拟 Kubelet-ACI 连接器的当前版本。
- “虚拟节点子网名称”是虚拟节点 pod 从中部署到 Azure 容器实例 (ACI) 的子网的名称。
- 虚拟节点虚拟网络 是虚拟网络的名称,包含了虚拟节点 pod 在其中通过 ACI 部署的子网。
保留的前缀
以下前缀是 AKS 保留的前缀,不能用于任何节点:
- kubernetes.azure.com/
- kubernetes.io/
有关预留前缀的详细信息,请参阅 Kubernetes 的已知标签、注释和排斥。
已弃用的标签
随着 Kubernetes v1.24 的发布,已计划弃用以下标签。 应将任何标签引用更改为引用建议的替代标签。
标签 | 建议的替代品 | Maintainer |
---|---|---|
failure-domain.beta.kubernetes.io/region | topology.kubernetes.io/region | 库伯内特斯 (Kubernetes) |
failure-domain.beta.kubernetes.io/zone | topology.kubernetes.io/zone | 库伯内特斯 (Kubernetes) |
beta.kubernetes.io/arch | kubernetes.io/arch | 库伯内特斯 (Kubernetes) |
beta.kubernetes.io/instance-type | node.kubernetes.io/instance-type | 库伯内特斯 (Kubernetes) |
beta.kubernetes.io/os | kubernetes.io/os | 库伯内特斯 (Kubernetes) |
node-role.kubernetes.io/agent* | kubernetes.azure.com/role=agent | Azure Kubernetes 服务 |
kubernetes.io/role* | kubernetes.azure.com/role=agent | Azure Kubernetes 服务 |
Agentpool* | kubernetes.azure.com/agentpool | Azure Kubernetes 服务 |
Storageprofile* | kubernetes.azure.com/storageprofile | Azure Kubernetes 服务 |
Storagetier* | kubernetes.azure.com/storagetier | Azure Kubernetes 服务 |
Accelerator* | kubernetes.azure.com/accelerator | Azure Kubernetes 服务 |
*最近已弃用。 有关详细信息,请参阅发行说明。
后续步骤
在Kubernetes 标签文档中详细了解 Kubernetes 标签。