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

如果你有多个节点池,可能希望在创建节点池期间添加标签。 Kubernetes 标签处理节点的计划规则。 可以随时将标签添加到节点池,并将其应用于该节点池的所有节点。

在本操作指南中,你会了解如何在 Azure Kubernetes 服务 (AKS) 群集中使用标签。

先决条件

需要安装并配置 Azure CLI 2.2.0 或更高版本。 运行 az --version 即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI

创建带标签的 AKS 群集

  1. 使用az aks create命令创建具有标签的 AKS 群集,并指定--node-labels参数以设置标签。 标签必须是键/值对,并采用有效的语法

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --node-count 2 \
        --nodepool-labels dept=IT costcenter=9000
    
  2. 使用kubectl get nodes --show-labels命令验证是否已设置标签。

    kubectl get nodes --show-labels | grep -e "costcenter=9000" -e "dept=IT"
    

创建带标签的节点池

  1. 使用az aks nodepool add命令创建具有标签的节点池, 并为--labels参数指定--name参数的名称和标签。 标签必须是键/值对,并采用有效的语法

    以下示例命令创建名为labelnp的节点池,其标签 为dept=HRcostcenter=5000

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name labelnp \
        --node-count 1 \
        --labels dept=HR costcenter=5000 \
        --no-wait
    

    az aks nodepool list命令中的以下示例输出显示labelnp正在创建具有指定nodeLabels的节点:

    [
      {
        ...
        "count": 1,
        ...
        "name": "labelnp",
        "orchestratorVersion": "1.15.7",
        ...
        "provisioningState": "Creating",
        ...
        "nodeLabels":  {
          "costcenter": "5000",
          "dept": "HR"
        },
        ...
      },
     ...
    ]
    
  2. 使用kubectl get nodes --show-labels命令验证是否已设置标签。

    kubectl get nodes --show-labels | grep -e "costcenter=5000" -e "dept=HR"
    

更新现有节点池上的标签

  1. 使用az aks nodepool update命令更新现有节点池上的标签。 更新现有节点池上的标签会使用新标签覆盖旧标签。 标签必须是键/值对,并采用有效的语法

    az aks nodepool update \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name labelnp \
        --labels dept=ACCT costcenter=6000 \
        --no-wait
    
  2. 使用kubectl get nodes --show-labels命令验证是否已设置标签。

    kubectl get nodes --show-labels | grep -e "costcenter=6000" -e "dept=ACCT"
    

不可用的标签

保留的系统标签

2021-08-19 AKS 版本开始,AKS 停用了对 AKS 保留的标签进行更改的功能。 尝试更改这些标签会导致出现错误消息。

以下标签是 AKS 保留的标签。 “虚拟节点用途”指定这些标签是否可以用作虚拟节点上的受支持系统功能。 这些系统功能更改的一些属性在虚拟节点上不可用,因为它们需要修改主机。

Label Value 示例/选项 虚拟节点用途
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 区域> chinaeast2 相同
topology.kubernetes.io/zone <Azure 区域> 0 相同
kubernetes.azure.com/cluster <MC_RgName> MC_aks_myAKSCluster_chinaeast2 相同
kubernetes.azure.com/mode 模式<> 用户或系统 User
kubernetes.azure.com/role 代理 Agent 相同
kubernetes.azure.com/scalesetpriority <VMSS 优先级> 现成 VM 或常规 VM 不适用
kubernetes.io/hostname <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 <节点池子网名称> subnetName 虚拟节点子网名称
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 的发布,已计划弃用以下标签。 应将任何标签引用更改为引用建议的替代标签。

Label 建议的替代标签 维护者
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 标签。