Использование тегов Azure в Azure Kubernetes Service (AKS)

С помощью Azure Kubernetes Service (AKS) можно задать теги Azure в кластере AKS и связанные с ним ресурсы с помощью Azure Resource Manager и Azure CLI. Можно также использовать манифесты Kubernetes для задания тегов Azure для определенных ресурсов. теги Azure являются полезным ресурсом отслеживания для определенных бизнес-процессов, таких как chargeback.

В этой статье объясняется, как задать теги Azure для кластеров AKS и связанных ресурсов.

Прежде чем начать

Перед началом работы ознакомьтесь со следующими сведениями:

  • Теги, заданные в кластере AKS, применяются ко всем ресурсам, связанным с кластером, но не к пулам узлов. Эта операция перезаписывает значения существующих ключей.
  • Теги, заданные в пуле узлов, применяются только к ресурсам, связанным с этим пулом узлов. Эта операция перезаписывает значения существующих ключей. Ресурсы за пределами пула узлов, включая ресурсы для остальной части кластера и других пулов узлов, не затрагиваются.
  • Общедоступные IP-адреса, файлы и диски могут иметь теги, заданные с помощью Kubernetes в манифесте Kubernetes. Для дисков и файлов, созданных через StorageClass, параметр tags применяется к базовому ресурсу Azure при выделении тома в AKS. Обновление StorageClass позже влияет только на недавно предоставленные тома. При удалении общедоступных IP-адресов, файлов или дисков через Kubernetes удаляются все теги, заданные Kubernetes. Теги этих ресурсов, которые Kubernetes не отслеживают, остаются не затронутыми.

Предварительные требования

  • Azure CLI версии 2.0.59 или более поздней. Чтобы узнать, какая версия используется, выполните команду az --version. Если необходимо установить или обновить версию, см. раздел Install Azure CLI.
  • Kubernetes версии 1.20 или более поздней.

Ограничения

  • Azure метки используют ключи, которые не зависят от регистра при операциях, например, когда вы получаете метку, осуществляя поиск по ключу. В этом случае тег с указанным ключом обновляется или извлекается независимо от регистра. Значения тегов чувствительны к регистру.
  • В AKS, если несколько тегов имеют одинаковые ключи, но разные регистры, теги используются в алфавитном порядке. Например, {"Key1": "val1", "kEy1": "val2", "key1": "val3"} приводит к установке Key1 и val1.
  • Для общих ресурсов теги не могут самостоятельно определить разделение использования ресурсов.
  • Для дисков и файлов, которые поддерживают персистентный том Kubernetes, спецификация PersistentVolume неизменна после создания. Изменение или исправление существующего PersistentVolume для изменения тегов или других атрибутов тома завершается сбоем.
  • Обновление тегов непосредственно в базовом ресурсе Azure не синхронизирует эти значения тегов обратно с kubernetes PersistentVolume YAML или метаданными.

Кластеры AKS и теги Azure

При создании или обновлении кластера AKS с параметром --tags эти теги Azure назначаются следующим образом:

  • Сам кластер AKS и связанные с ней ресурсы:
    • Таблица маршрутов
    • Общедоступный IP-адрес
    • Подсистема балансировки нагрузки
    • группу безопасности сети;
    • Виртуальная сеть
    • Msi kubelet, управляемый AKS
    • Управляемая AKS надстройка MSI
    • приватная DNS-зона, связанная с кластером private
    • Частная конечная точка, связанная с частным кластером
  • группа ресурсов узла;

Примечание.

Azure Частная зона DNS поддерживает только 15 тегов. Дополнительные сведения см. в разделе ресурсы тегов.

Создание или обновление тегов в кластере AKS

Создание кластера AKS.

Внимание

Если при создании нового кластера используются существующие ресурсы, например IP-адрес или таблица маршрутов, az aks create команда перезаписывает набор тегов. При удалении кластера позже все теги, заданные кластером, удаляются.

  1. Создайте кластер и назначьте теги Azure с помощью команды az aks create с параметром --tags.

    Примечание.

    Чтобы задать теги в начальном пуле узлов, масштабируемой группе виртуальных машин и каждом экземпляре этой группы, связанном с начальным пулом узлов, вы также можете настроить параметр --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 перезаписывает набор тегов. Например, если у вашего кластера есть теги dept=IT и costcenter=9999, и вы используете az aks update с тегами team=alpha и costcenter=1234, новый список тегов будет team=alpha и costcenter=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. Создайте пул узлов с тегом Azure с помощью команды az aks nodepool add с параметром --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=a и costcenter=5555, и вы используете команду az aks nodepool update с тегами appversion=0.0.2 и costcenter=4444, новый список тегов будет таким: appversion=0.0.2 и costcenter=4444.

  1. Обновите пул узлов с тегом Azure с помощью команды az aks nodepool update.

    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

Внимание

Установка тегов в файлах, дисках и общедоступных IP-адресах с помощью Kubernetes обновляет набор тегов. Например, если в диске есть теги dept=IT и costcenter=5555 и вы использовали Kubernetes для установки тегов team=beta и costcenter=3333, новый список тегов таким: dept=IT, team=beta и costcenter=3333.

Все обновления, внесенные в теги через Kubernetes, сохраняют значение, заданное через Kubernetes. Например, если в диске есть теги dept=IT и costcenter=5555, установленные Kubernetes, и вы использовали портал для установки тегов team=beta и costcenter=3333, новый список тегов таким: dept=IT, team=beta и costcenter=5555. Если после этого вы удалите диск с помощью Kubernetes, у диска останется тег team=beta.

Для дисков и файлов, которые обслуживают постоянный том, значение tags в параметре StorageClass устанавливается во время подготовки. После создания тома спецификация PersistentVolume становится неизменяемой, поэтому редактирование или исправление PV для изменения тегов или других атрибутов тома завершается сбоем. Изменения, внесенные непосредственно в базовый ресурс Azure, не синхронизируются с PV YAML или метаданными.

Теги Azure можно применять к общедоступным IP-адресам, дискам и файлам с помощью манифеста Kubernetes.

  • Для общедоступных 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:
      ...
    
  • Для файлов и дисков используйте tags в разделе parameters. Например:

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

Обновление тегов для существующих постоянных томов

Чтобы обновить теги для существующего постоянного тома на основе диска или файла, обновите теги в исходном ресурсе Azure, вместо того чтобы редактировать PersistentVolume. Эта операция не прерывает существующие подключения, модули pod или доступ к данным.

  • Для постоянных томов на основе дисков Azure обновите управляемый диск напрямую. Например:

    az disk update \
        --name myManagedDisk \
        --resource-group MC_myResourceGroup_myAKSCluster_eastus \
        --set tags.abc=ABC123
    
  • Для Файлы Azure поддерживаемых постоянных томов обновите учетную запись хранения напрямую. Например:

    az storage account update \
        --name mystorageaccount \
        --resource-group MC_myResourceGroup_myAKSCluster_eastus \
        --set tags.abc=ABC123
    

Изменения в StorageClass влияют только на недавно подготовленные тома и не обновляют существующие постоянные тома.

Следующие шаги

Дополнительные сведения об использовании меток в кластере AKS.