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

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

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

开始之前

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

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

先决条件

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

限制

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

Azure 标记和 AKS 群集

在使用 --tags 参数创建或更新 AKS 群集时,将为以下各项分配指定的 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 -g myResourceGroup -n myAKSCluster --query '[tags]'
    

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

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

更新现有的 AKS 群集

重要

使用 az aks update 命令在群集上设置标记会覆盖标记集。 例如,如果你的群集具有标记 dept=ITcostcenter=9999,并且你将 az aks update 和标记 team=alphacostcenter=1234 一起使用,则新的标记列表将为 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 -g myResourceGroup -n myAKSCluster --query '[tags]'
    

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

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

向节点池添加标记

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

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

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

创建新的节点池

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

    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 -g myResourceGroup -n myAKSCluster --query 'agentPoolProfiles[].{nodepoolName:name,tags:tags}'
    

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

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

更新现有节点池

重要

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

  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 -g myResourceGroup -n myAKSCluster --query 'agentPoolProfiles[].{nodepoolName:name,tags:tags}'
    

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

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

使用 Kubernetes 添加标记

重要

使用 Kubernetes 在文件、磁盘和公共 IP 上设置标签会更新标记集。 例如,如果你的磁盘具有标记 dept=IT 和 costcenter=5555,并且你使用 Kubernetes 设置了标记 team=beta 和 costcenter=3333,则新的标记列表将是 dept=IT、team=beta 和 costcenter=3333。

通过 Kubernetes 对标记所做的任何更新将保留通过 kubernetes 设置的值。 例如,如果你的磁盘具有 Kubernetes 设置的标记 dept=IT 和 costcenter=5555,并且你使用门户设置了标记 team=beta 和 costcenter=3333,则新的标记列表将为 dept=IT、team=beta 和 costcenter=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:
      ...
    
  • 对于文件和磁盘,请在 parameters 下使用 tags。 例如:

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

后续步骤

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