Use Azure tags in Azure Kubernetes Service (AKS)

Com o Azure Kubernetes Service (AKS), pode definir etiquetas Azure num cluster AKS e nos seus recursos relacionados usando o Azure Resource Manager e a CLI do Azure. Também podes usar manifestos do Kubernetes para definir etiquetas do Azure para certos recursos. As etiquetas Azure são um recurso útil de rastreamento para certos processos de negócio, como chargeback.

Este artigo explica como definir tags Azure para clusters AKS e recursos relacionados.

Antes de começar

Analise as seguintes informações antes de começar:

  • As tags definidas em um cluster AKS se aplicam a todos os recursos relacionados ao cluster, mas não aos pools de nós. Esta operação substitui os valores das chaves existentes.
  • As tags definidas em um pool de nós aplicam-se somente aos recursos relacionados a esse pool de nós. Esta operação substitui os valores das chaves existentes. Os recursos fora desse pool de nós, incluindo recursos para o restante do cluster e outros pools de nós, não são afetados.
  • IPs, arquivos e discos públicos podem ter tags definidas pelo Kubernetes por meio de um manifesto do Kubernetes. Para discos e ficheiros criados através de um StorageClass, o parâmetro tags é aplicado ao recurso Azure subjacente quando o AKS provisiona o volume. Atualizar o StorageClass mais tarde afeta apenas volumes recém-provisionados. Quando você remove IPs, arquivos ou discos públicos através do Kubernetes, todas as tags definidas pelo Kubernetes são removidas. As tags nesses recursos que o Kubernetes não rastreia permanecem inalteradas.

Pré-requisitos

  • A CLI do Azure versão 2.0.59 ou posterior. Para encontrar a sua versão, execute az --version. Se precisares de instalar ou atualizar a tua versão, vê Instala CLI do Azure.
  • Kubernetes versão 1.20 ou posterior.

Limitações

  • As tags do Azure têm chaves que não distinguem entre maiúsculas e minúsculas para operações, como quando se está a recuperar uma tag ao pesquisar a chave. Nesse caso, uma tag com a chave especificada é atualizada ou recuperada independentemente do invólucro. Os valores das etiquetas são sensíveis às maiúsculas e minúsculas.
  • No AKS, se forem definidas várias etiquetas com chaves idênticas, mas maiúsculas e minúsculas diferentes, as etiquetas serão utilizadas por ordem alfabética. Por exemplo, {"Key1": "val1", "kEy1": "val2", "key1": "val3"} resulta em Key1 e val1 serem definidos.
  • Para recursos compartilhados, as tags não podem determinar a divisão no uso de recursos por conta própria.
  • Para discos e ficheiros que suportam um volume persistente Kubernetes, a PersistentVolume especificação é imutável após a criação. Editar ou aplicar patches a um PersistentVolume existente para alterar as etiquetas ou outros atributos de volume falha.
  • Atualizar as etiquetas diretamente no recurso Azure subjacente não sincroniza os valores dessas etiquetas de volta para o YAML ou metadados Kubernetes PersistentVolume.

Etiquetas Azure e clusters AKS

Quando cria ou atualiza um cluster AKS com o parâmetro --tags, as seguintes são atribuídas as etiquetas Azure que especificou:

  • O próprio cluster AKS e seus recursos relacionados:
    • Tabela de rotas
    • IP público
    • Balanceador de carga
    • Grupo de segurança de rede
    • Rede virtual
    • Kubelet msi gerenciado pelo AKS
    • msi add-on gerenciado pelo AKS
    • Zona DNS privada associada ao cluster privado
    • Ponto de extremidade privado associado ao cluster privado
  • O grupo de recursos do nó

Nota

Azure DNS Privado só suporta 15 etiquetas. Para obter mais informações, consulte os recursos de tag.

Criar ou atualizar tags em um cluster AKS

Criar um novo cluster AKS

Importante

Se você estiver usando recursos existentes ao criar um novo cluster, como um endereço IP ou uma tabela de rotas, o az aks create comando substituirá o conjunto de tags. Se você excluir o cluster posteriormente, todas as tags definidas pelo cluster serão removidas.

  1. Crie um cluster e atribua Azure etiquetas usando o comando az aks create com o parâmetro --tags.

    Nota

    Para definir marcas no pool de nós inicial, no conjunto de dimensionamento da máquina virtual e em cada instância do conjunto de dimensionamento da máquina virtual associada ao pool de nós inicial, você também pode definir o --nodepool-tags parâmetro.

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --tags dept=IT costcenter=9999 \
        --generate-ssh-keys
    
  2. Verifique se as tags foram aplicadas ao cluster e seus recursos relacionados usando o az aks show comando.

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

    A saída de exemplo a seguir mostra as tags aplicadas ao cluster:

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

Atualizar um cluster AKS existente

Importante

A definição de etiquetas num cluster utilizando o comando az aks update substitui o conjunto de etiquetas. Por exemplo, se o cluster tiver as tags dept=IT e costcenter=9999, e você usar az aks update com as tags team=alpha e costcenter=1234, a nova lista de tags será team=alpha e costcenter=1234.

  1. Atualize as tags em um cluster existente usando o az aks update comando com o --tags parâmetro.

    az aks update \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --tags team=alpha costcenter=1234
    
  2. Verifique se as tags foram aplicadas ao cluster e seus recursos relacionados usando o az aks show comando.

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

    A saída de exemplo a seguir mostra as tags aplicadas ao cluster:

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

Adicionar tags aos conjuntos de nós

Pode aplicar uma etiqueta Azure a um pool de nós novo ou existente no seu cluster AKS. As tags aplicadas a um pool de nós são aplicadas a cada nó dentro do pool de nós e persistem por meio de atualizações. As tags também são aplicadas a novos nós que são adicionados a um pool de nós durante operações de expansão. Adicionar uma tag pode ajudar em tarefas como controle de políticas ou estimativa de custos.

Quando você cria ou atualiza um pool de nós com o --tags parâmetro, as tags especificadas são atribuídas aos seguintes recursos:

  • O pool de nós.
  • O conjunto de escalonamento de máquinas virtuais e cada instância deste conjunto associada ao pool de nós.

Criar um novo pool de nós

  1. Crie um pool de nós com uma etiqueta Azure usando o comando az aks nodepool add com o parâmetro --tags.

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name tagnodepool \
        --node-count 1 \
        --tags abtest=a costcenter=5555 \
        --no-wait
    
  2. Verifique se as tags foram aplicadas ao pool de nós usando o az aks show comando.

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

    A saída de exemplo a seguir mostra as tags aplicadas ao pool de nós:

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

Atualizar um pool de nós existente

Importante

A definição de tags numa pool de nós usando o comando az aks nodepool update substitui o conjunto de tags. Por exemplo, se o pool de nós tiver as tags abtest=a e costcenter=5555, e utilizar az aks nodepool update com as tags appversion=0.0.2 e costcenter=4444, a nova lista de tags será appversion=0.0.2 e costcenter=4444.

  1. Atualize um pool de nós com uma etiqueta Azure usando o comando 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. Verifique se as tags foram aplicadas ao pool de nós usando o az aks show comando.

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

    A saída de exemplo a seguir mostra as tags aplicadas ao pool de nós:

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

Adicionar tags usando o Kubernetes

Importante

A configuração de tags em arquivos, discos e IPs públicos usando o Kubernetes atualiza o conjunto de tags. Por exemplo, se o disco tiver as tags dept=IT e costcenter=5555, e você usar o Kubernetes para definir as tags team=beta e costcenter=3333, a nova lista de tags será dept=IT, team=beta e costcenter=3333.

Todas as atualizações feitas nas tags por meio do Kubernetes retêm o valor definido por meio do Kubernetes. Por exemplo, se o disco tiver as tags dept=IT e costcenter=5555 definidas pelo Kubernetes, e você usar o portal para definir as tags team=beta e costcenter=3333, a nova lista de tags será dept=IT, team=beta e costcenter=5555. Se você remover o disco através do Kubernetes, o disco terá a tag team=beta.

Para discos e ficheiros que suportam um volume persistente, o tags valor em StorageClass é uma definição feita no momento do provisionamento. Depois de criado o volume, a PersistentVolume especificação é imutável, pelo que a edição ou a aplicação de patch ao PV para alterar tags ou outros atributos de volume falha. As alterações que fazes diretamente ao recurso Azure subjacente não sincronizam de volta ao YAML PV ou aos metadados.

Pode aplicar tags do Azure a IPs públicos, discos e ficheiros usando um manifesto Kubernetes.

  • Para IPs públicos, use service.beta.kubernetes.io/azure-pip-tags sob anotações. Por exemplo:

    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.beta.kubernetes.io/azure-pip-tags: costcenter=3333,team=beta
    spec:
      ...
    
  • Para arquivos e discos, use tags em parâmetros. Por exemplo:

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

Atualizar etiquetas para volumes persistentes existentes

Para atualizar etiquetas para um volume persistente já existente com suporte de disco ou de ficheiros, atualize as etiquetas no recurso Azure subjacente em vez de editar o PersistentVolume. Esta operação não interrompe os pontos de montagem, os pods ou o acesso aos dados existentes.

  • Para volumes persistentes suportados por disco do Azure, atualize diretamente o disco gerido. Por exemplo:

    az disk update \
        --name myManagedDisk \
        --resource-group MC_myResourceGroup_myAKSCluster_eastus \
        --set tags.abc=ABC123
    
  • Para volumes persistentes suportados pelo Ficheiros do Azure, atualize diretamente a conta de armazenamento. Por exemplo:

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

As alterações a StorageClass afetam apenas volumes recém-provisionados e não atualizam volumes persistentes existentes.

Próximos passos

Saiba mais sobre como usar rótulos em um cluster AKS.