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

使用 Azure Kubernetes 服务(AKS),可以使用 Azure 资源管理器和 Azure CLI 在 AKS 群集及其相关资源上设置 Azure 标记。 还可以使用 Kubernetes 清单为某些资源设置 Azure 标记。 Azure 标记是某些业务流程(例如 退款)的有用跟踪资源。

本文介绍如何为 AKS 群集和相关资源设置 Azure 标记。

在您开始之前

在开始之前查看以下信息:

  • AKS 群集上设置的标记适用于与群集相关的所有资源,但不适用于节点池。 此操作将覆盖现有键的值。
  • 在节点池上设置的标记仅适用于与该节点池相关的资源。 此操作会覆盖已有键的值。 该节点池外部的资源(包括群集的其余部分和其他节点池的资源)不受影响。
  • 通过 Kubernetes 清单,可以为公共 IP、文件和磁盘设置标记。 以这种方式设置的标记会维护 Kubernetes 值,即使稍后使用其他方法更新它们也是如此。 通过 Kubernetes 删除公共 IP、文件或磁盘时,将删除 Kubernetes 设置的任何标记。 Kubernetes 不跟踪的那些资源上的标记不受影响。

先决条件

  • Azure CLI 2.0.59 或更高版本。 若要查看自己的版本,请运行 az --version。 如果需要安装它或更新版本,请参阅 “安装 Azure CLI”。
  • Kubernetes 版本 1.20 或更高版本。

局限性

  • 进行操作时(例如,通过搜索键来检索标记时),Azure 标记可以使用不区分大小写的键。 在这种情况下,无论大小写如何,都会更新或检索具有指定键值的标记。 标记值区分大小写。
  • 在 AKS 中,如果设置了多个键相同但大小写不同的标记,则按字母顺序使用标记。 例如,{"Key1": "val1", "kEy1": "val2", "key1": "val3"}导致Key1val1被设置。
  • 对于共享资源,标签无法自行确定资源使用情况中的划分。

Azure 标记和 AKS 群集

使用参数创建或更新 AKS 群集 --tags 时,会分配以下指定的 Azure 标记:

  • AKS 群集本身及其相关资源:
    • 路由表
    • 公网 IP
    • 负载均衡器
    • 网络安全组
    • 虚拟网络
    • AKS 托管的 kubelet msi
    • AKS 托管的加载项 msi
    • 专用群集关联的专用 DNS 区域
    • 专用群集关联的私有终结点
  • 节点资源组

注释

Azure 专用 DNS 仅支持 15 个标记。 有关详细信息,请参阅 标记资源

在 AKS 群集上创建或更新标记

创建新的 AKS 群集

重要

如果在创建新群集(例如 IP 地址或路由表)时使用现有资源,该 az aks create 命令将覆盖标记集。 如果稍后删除群集,则会删除群集设置的任何标记。

  1. 使用带参数的 az aks create 命令 --tags 创建群集并分配 Azure 标记。

    注释

    若要在初始节点池、虚拟机规模集和与初始节点池关联的每个虚拟机规模集实例上设置标记,还可以设置 --nodepool-tags 参数。

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --tags dept=IT costcenter=9999 \
        --generate-ssh-keys
    
  2. 使用 az aks show 命令验证标记是否已应用于群集及其相关资源。

    az aks show --resource-group myResourceGroup --name myAKSCluster --query '[tags]'
    

    以下示例输出显示了应用于群集的标记:

    {
      "clusterTags": {
        "dept": "IT",
        "costcenter": "9999"
      }
    }
    

更新现有的 AKS 群集

重要

使用 az aks update 命令在群集上设置标记会覆盖标记集。 例如,如果群集具有标记pt=ITcostcenter=9999,并且与标记 team=alphacostcenter=1234 一起使用az aks update,则新标记列表将为 team=alphacostcenter=1234

  1. 使用 az aks update 命令和 --tags 参数更新现有群集上的标记。

    az aks update \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --tags team=alpha costcenter=1234
    
  2. 使用 az aks show 命令验证标记是否已应用于群集及其相关资源。

    az aks show --resource-group myResourceGroup --name myAKSCluster --query '[tags]'
    

    以下示例输出显示了应用于群集的标记:

    {
      "clusterTags": {
        "team": "alpha",
        "costcenter": "1234"
      }
    }
    

将标签添加到节点池

可以将 Azure 标记应用于 AKS 群集中的新节点池或现有节点池。 应用于节点池的标记将应用于节点池中的每个节点,并通过升级持久保存。 标记还应用于在横向扩展操作期间添加到节点池的新节点。 添加标记有助于执行策略跟踪或成本估算等任务。

使用参数创建或更新节点池 --tags 时,指定的标记将分配给以下资源:

  • 节点池。
  • 虚拟机规模集和与节点池关联的每个虚拟机规模集实例。

创建新的节点池

  1. 使用具有参数的 az aks nodepool add 命令创建具有 Azure 标记的 --tags 节点池。

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name tagnodepool \
        --node-count 1 \
        --tags abtest=a costcenter=5555 \
        --no-wait
    
  2. 使用 az aks show 命令验证标记是否已应用于节点池。

    az aks show --resource-group myResourceGroup --name myAKSCluster --query 'agentPoolProfiles[].{nodepoolName:name,tags:tags}'
    

    以下示例输出显示了应用于节点池的标记:

    [
      {
        "nodepoolName": "nodepool1",
        "tags": null
      },
      {
        "nodepoolName": "tagnodepool",
        "tags": {
          "abtest": "a",
          "costcenter": "5555"
        }
      }
    ]
    

更新现有节点池

重要

使用 az aks nodepool update 命令在节点池上设置标记会覆盖标记集。 例如,如果节点池具有标记 abtest=acostcenter=5555,并且与标记 appversion=0.0.2costcenter=4444 一起使用az aks nodepool update,则新标记列表将为 appversion=0.0.2,costcenter=4444

  1. 使用 az aks nodepool update 命令为节点池更新 Azure 标签。

    az aks nodepool update \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name tagnodepool \
        --tags appversion=0.0.2 costcenter=4444 \
        --no-wait
    
  2. 使用 az aks show 命令验证标记是否已应用于节点池。

    az aks show --resource-group myResourceGroup --name myAKSCluster --query 'agentPoolProfiles[].{nodepoolName:name,tags:tags}'
    

    以下示例输出显示了应用于节点池的标记:

    [
      {
        "nodepoolName": "nodepool1",
        "tags": null
      },
      {
        "nodepoolName": "tagnodepool",
        "tags": {
          "appversion": "0.0.2",
          "costcenter": "4444"
        }
      }
    ]
    

使用 Kubernetes 添加标记

重要

使用 Kubernetes 在文件、磁盘和公共 IP 上设置标记会更新标记集。 例如,如果磁盘具有标记 dept=ITcostcenter=5555,并且你使用 Kubernetes 设置标记 团队=betacostcenter=3333,则新的标记列表将为 dept=ITteam=betacostcenter=3333

通过 Kubernetes 对标记所做的任何更新都将保留通过 Kubernetes 设置的值。 例如,如果磁盘具有 Kubernetes 设置的标记 dept=ITcostcenter=5555,并且你使用门户设置标记 team=betacostcenter=3333,则新的标记列表将是 dept=ITteam=betacostcenter=5555。 如果随后通过 Kubernetes 删除磁盘,该磁盘将具有标记 team=beta

可以使用 Kubernetes 清单将 Azure 标记应用到公共 IP、磁盘和文件。

  • 对于公共 IP,请使用注释下的 service.beta.kubernetes.io/azure-pip-tags。 例如:

    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.beta.kubernetes.io/azure-pip-tags: costcenter=3333,team=beta
    spec:
      ...
    
  • 对于文件和磁盘,请使用参数下的标记。 例如:

    ---
    apiVersion: storage.k8s.io/v1
    ...
    parameters:
      ...
      tags: costcenter=3333,team=beta
    ...
    

后续步骤

详细了解如何在 AKS 群集中使用标签