共用方式為

在 Azure Kubernetes 服务 (AKS) 群集中使用标签

如果你有多个节点池,可能希望在创建节点池期间添加标签。 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 标签。