Partilhar via


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 lidam com as regras de agendamento para nós. Você pode adicionar rótulos a um pool de nós a qualquer momento e aplicá-los a todos os nós no pool de nós.

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 Azure CLI (Instalar o Azure CLI).

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 2021-08-19, o AKS parou a capacidade de fazer alterações nos rótulos reservados 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. O uso do nó virtual especifica se esses rótulos podem ser um recurso de sistema suportado 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 <Prioridade VMSS> 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 virtual de nó virtual
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
  • O mesmo está incluído em locais 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 do nó virtual é o nome da sub-rede onde os pods do nó virtual são implantados na Instância de Contêiner do Azure (ACI).
  • Rede virtual de nó virtual é o nome da rede virtual, que contém a sub-rede onde os pods de nó virtual 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 preteridas

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

*Recentemente preterido. Para obter mais informações, consulte as Notas de versão.

Próximos passos

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