Usar rótulos em um cluster do Serviço Kubernetes do Azure (AKS)

Se tiver vários conjuntos de nós, poderá querer adicionar uma etiqueta durante a criação do conjunto de nós. Os rótulos do Kubernetes tratam das regras de agendamento dos nodos. Pode adicionar rótulos a um conjunto de nós a qualquer momento e aplicá-los a todos os nós desse mesmo conjunto.

Neste guia de instruções, você aprenderá a usar rótulos em um cluster do Serviço Kubernetes do Azure (AKS).

Pré-requisitos

Você precisa da CLI do Azure versão 2.2.0 ou posterior instalada e configurada. Executar az --version para localizar a versão. Se precisar de instalar ou atualizar, veja Install CLI do Azure (Instalar o CLI do Azure).

Criar um cluster do AKS com uma etiqueta

Você pode criar um cluster AKS com rótulos de nó para definir metadados de chave/valor para agendamento de carga de trabalho.

export RANDOM_SUFFIX=$(openssl rand -hex 3)
export RESOURCE_GROUP="myResourceGroup$RANDOM_SUFFIX"
export AKS_CLUSTER_NAME="myAKSCluster$RANDOM_SUFFIX"
az group create --name $RESOURCE_GROUP --location $REGION

Resultados:

{
  "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroupxxx",
  "location": "eastus2",
  "managedBy": null,
  "name": "myResourceGroupxxx",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null,
  "type": "Microsoft.Resources/resourceGroups"
}

Crie o cluster AKS especificando etiquetas de nó (por exemplo, dept=IT, costcenter=9000):

az aks create \
    --resource-group $RESOURCE_GROUP \
    --name $AKS_CLUSTER_NAME \
    --node-count 2 \
    --nodepool-labels dept=IT costcenter=9000 \
    --generate-ssh-keys --location $REGION

Resultados:

{
  "aadProfile": null,
  "addonProfiles": {},
  "agentPoolProfiles": [
    {
      "count": 2,
      "enableAutoScaling": null,
      "mode": "System",
      "name": "nodepool1",
      "nodeLabels": {
        "costcenter": "9000",
        "dept": "IT"
      }
    }
  ],
  "dnsPrefix": "myaksclusterxxx-dns",
  "fqdn": "myaksclusterxxx-xxxxxxxx.hcp.eastus2.azmk8s.io",
  "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroupxxx/providers/Microsoft.ContainerService/managedClusters/myAKSClusterxxx",
  "location": "eastus2",
  "name": "myAKSClusterxxx",
  "resourceGroup": "myResourceGroupxxx"
}

Verifique se os rótulos foram definidos:

az aks get-credentials --resource-group $RESOURCE_GROUP --name $AKS_CLUSTER_NAME --overwrite-existing
kubectl get nodes --show-labels | grep -e "costcenter=9000" -e "dept=IT"

Criar um conjunto de nós com uma etiqueta

Você pode criar um pool de nós adicional com rótulos para necessidades específicas de agendamento.

export NODEPOOL_NAME="labelnp"
az aks nodepool add \
    --resource-group $RESOURCE_GROUP \
    --cluster-name $AKS_CLUSTER_NAME \
    --name $NODEPOOL_NAME \
    --node-count 1 \
    --labels dept=HR costcenter=5000

O seguinte é um exemplo de saída do comandoaz aks nodepool list mostrando que o pool de nós labelnp está criando nodes com os nodeLabels especificados:

az aks nodepool list --resource-group $RESOURCE_GROUP --cluster-name $AKS_CLUSTER_NAME

Resultados:

[
  {
    "count": 2,
    "name": "nodepool1",
    "nodeLabels": {
      "costcenter": "9000",
      "dept": "IT"
    }
  },
  {
    "count": 1,
    "name": "labelnp",
    "nodeLabels": {
      "costcenter": "5000",
      "dept": "HR"
    },
    "provisioningState": "Creating"
  }
]

Verifique se os rótulos foram definidos:

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

Atualizar etiquetas em conjuntos de nós existentes

Você pode atualizar os rótulos em um pool de nós existente. Observe que a atualização de rótulos substituirá os rótulos antigos.

az aks nodepool update \
    --resource-group $RESOURCE_GROUP \
    --cluster-name $AKS_CLUSTER_NAME \
    --name $NODEPOOL_NAME \
    --labels dept=ACCT costcenter=6000

Verifique se os novos rótulos estão definidos:

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

Etiquetas indisponíveis

Etiquetas de sistema reservadas

Desde o lançamento do AKS em 19-08-2021, o AKS deixou de permitir fazer alterações nas etiquetas reservadas do AKS. A tentativa de alterar esses rótulos resulta em uma mensagem de erro.

Os rótulos a seguir são rótulos reservados AKS. Utilização do nó virtual especifica se estas etiquetas podem ser uma funcionalidade de sistema suportada em nós virtuais. Algumas propriedades que esses recursos do sistema alteram não estão disponíveis nos nós virtuais porque exigem a modificação do host.

Etiqueta Valor Exemplo/Opções Uso do nó virtual
kubernetes.azure.com/agentpool <Nome do pool de agentes> nodepool1 Mesma
kubernetes.io/arch <duração de execução. GOARCH> amd64 N/A
kubernetes.io/os <Tipo de SO> Linux/Windows Mesma
node.kubernetes.io/instance-type <Tamanho da VM> Standard_NC6s_v3 Virtuais
topology.kubernetes.io/region <Região do Azure> westus2 Mesma
topology.kubernetes.io/zone <Zona do Azure> 0 Mesma
kubernetes.azure.com/cluster <MC_RgName> MC_aks_myAKSCluster_westus2 Mesma
kubernetes.azure.com/managedby aks aks N/A
kubernetes.azure.com/mode <modo> User ou system Utilizador
kubernetes.azure.com/role agente Agent Mesma
kubernetes.azure.com/scalesetpriority (preterido) <Prioridade VMSS> spot (regular não está escrito nos nós regulares). Prefiro kubernetes.azure.com/priority em vez disso. N/A
kubernetes.azure.com/priority <Prioridade VM> spot ou regular N/A
kubernetes.io/hostname <nome do host> aks-nodepool-00000000-vmss000000 Mesma
kubernetes.azure.com/storageprofile <Perfil de armazenamento em disco do SO> Managed N/A
kubernetes.azure.com/storagetier <Nível de armazenamento em disco do SO> Premium_LRS N/A
kubernetes.azure.com/node-image-version <Versão VHD> AKSUbuntu-1804-2020.03.05 Versão do nó virtual
kubernetes.azure.com/network-name <Nome da VNet do NodePool> vnetName Rede de nós virtuais
kubernetes.azure.com/network-subnet <Nome da sub-rede do NodePool> subnetName Nome da sub-rede do nó virtual
kubernetes.azure.com/ppg <Nome do NodePool PPG> ppgName N/A
kubernetes.azure.com/encrypted-set <Nome do conjunto criptografado do nodepool> encrypted-set-name N/A
kubernetes.azure.com/accelerator <acelerador> nvidia N/A
kubernetes.azure.com/fips_enabled <FIPS está ativado?> true N/A
kubernetes.azure.com/os-sku <OS/SKU> Criar ou atualizar o SKU do SO Linux
kubernetes.azure.com/os-sku-effective <SKU do Sistema Operativo efetivamente escolhido> Ubuntu2204 ou semelhante (nunca Ubuntu, tem sempre a versão especificada) N/A
kubernetes.azure.com/os-sku-requested <SKU de SO solicitado pelo utilizador> Ubuntu, Ubuntu2204, ou semelhante (corresponde exatamente ao SKU solicitado à API) N/A
kubernetes.azure.com/sku-cpu <num CPUs> 4 Mesma
kubernetes.azure.com/sku-memory <memória em GB> 16 Mesma
kubernetes.azure.com/nodepool-type <Tipo de pool de nós> VirtualMachineScaleSets N/A
  • Igual está incluído em situações onde os valores esperados para os rótulos não diferem entre um pool de nós padrão e um pool de nós virtuais. Como os pods de nó virtual não expõem nenhuma máquina virtual (VM) subjacente, os valores de SKU da VM são substituídos pelo SKU Virtual.
  • Versão do nó virtual refere-se à versão atual da versão do conector Kubelet-ACI virtual.
  • Nome da sub-rede de nó virtual é o nome da sub-rede onde os pods de nó virtual são implantados nas Azure Container Instances.
  • Rede virtual de nós virtuais é o nome da rede virtual, que contém a sub-rede onde os pods de nós virtuais são implantados na ACI.
  • Os nós de Provisão Automática de Nó (Karpenter) têm etiquetas adicionais correspondentes aos seletores suportados.
  • kubernetes.azure.com/network-name e kubernetes.azure.com/network-subnet serão truncados se os nomes dos recursos subjacentes forem superiores a 64 caracteres.

Prefixos reservados

Os seguintes prefixos são prefixos reservados AKS e não podem ser usados para nenhum nó:

  • kubernetes.azure.com/
  • kubernetes.io/

Para obter mais informações sobre prefixos reservados, consulte Rótulos, anotações e manchas conhecidos do Kubernetes.

Etiquetas descontinuadas

Os seguintes rótulos estão planejados para descontinuação com o lançamento do Kubernetes v1.24. Você deve alterar todas as referências de rótulo para o substituto recomendado.

Etiqueta Substituto recomendado Mantenedor
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 Service
kubernetes.io/role* kubernetes.azure.com/role=agent Azure Kubernetes Service
Agentpool* kubernetes.azure.com/agentpool Azure Kubernetes Service
Perfil de armazenamento* kubernetes.azure.com/storageprofile Azure Kubernetes Service
Nível de armazenamento* kubernetes.azure.com/storagetier Azure Kubernetes Service
Acelerador* kubernetes.azure.com/accelerator Azure Kubernetes Service

*Recém-descontinuado. Para obter mais informações, consulte as Notas de Lançamento.

Próximos passos

Saiba mais sobre os rótulos do Kubernetes na documentação de rótulos do Kubernetes.