Udostępnij przez


Używanie etykiet w klastrze usługi Azure Kubernetes Service (AKS)

Jeśli masz wiele pul węzłów, podczas tworzenia puli węzłów warto dodać etykietę. Etykiety platformy Kubernetes zarządzają regułami planowania dla węzłów. Etykiety można dodawać do puli węzłów w dowolnym momencie i stosować je do wszystkich węzłów tej puli.

Z tego przewodnika z instrukcjami dowiesz się, jak używać etykiet w klastrze usługi Azure Kubernetes Service (AKS).

Wymagania wstępne

Potrzebny jest interfejs wiersza polecenia platformy Azure w wersji 2.2.0 lub nowszej zainstalowany i skonfigurowany. Uruchom polecenie az --version, aby dowiedzieć się, jaka wersja jest używana. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.

Utwórz klaster AKS z etykietą

Można utworzyć klaster AKS z etykietami węzłów, aby ustawić metadane klucz/wartość na potrzeby planowania obciążenia.

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

Wyniki:

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

Utwórz klaster usługi AKS określający etykiety węzłów (np. 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

Wyniki:

{
  "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"
}

Sprawdź, czy etykiety zostały ustawione:

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"

Utwórz pulę węzłów z etykietą

Możesz utworzyć dodatkową pulę węzłów z etykietami dla określonych potrzeb planowania.

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

Poniżej przedstawiono przykładowe dane wyjściowe z polecenia az aks nodepool list, pokazujące, że pula węzłów labelnp jest w trakcie tworzenia węzłów z określonymi etykietami węzłów:

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

Wyniki:

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

Sprawdź, czy etykiety zostały ustawione:

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

Aktualizowanie etykiet dla istniejących pul węzłów

Etykiety można zaktualizować dla istniejącej puli węzłów. Należy pamiętać, że aktualizowanie etykiet spowoduje zastąpienie starych etykiet.

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

Sprawdź, czy nowe etykiety są ustawione:

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

Niedostępne etykiety

Zastrzeżone etykiety systemowe

Od wydania AKS z dnia 2021-08-19, AKS przestało umożliwiać wprowadzanie zmian w zarezerwowanych etykietach AKS. Próba zmiany tych etykiet powoduje wyświetlenie komunikatu o błędzie.

Poniższe etykiety są zarezerwowane przez AKS. Użycie węzła wirtualnego określa, czy te etykiety mogą być obsługiwaną funkcją systemową w węzłach wirtualnych. Niektóre właściwości, które zmieniają się w tych funkcjach systemowych, nie są dostępne w węzłach wirtualnych, ponieważ wymagają modyfikacji hosta.

Etykieta Wartość Przykład/Opcje Użycie węzła wirtualnego
kubernetes.azure.com/agentpool <nazwa puli agentów> nodepool1 To samo
kubernetes.io/arch <środowisko wykonawcze GOARCH> amd64 Nie dotyczy
kubernetes.io/os <Typ systemu operacyjnego> Linux/Windows To samo
node.kubernetes.io/instance-type <Rozmiar maszyny wirtualnej> Standard_NC6s_v3 Wirtualne
topology.kubernetes.io/region <Region systemu Azure> westus2 To samo
topology.kubernetes.io/zone <Strefa Azure> 0 To samo
kubernetes.azure.com/cluster <MC_RgName> MC_aks_myAKSCluster_westus2 To samo
kubernetes.azure.com/managedby aks aks Nie dotyczy
kubernetes.azure.com/mode <tryb> User lub system Użytkownik
kubernetes.azure.com/role agent Agent To samo
kubernetes.azure.com/scalesetpriority <Priorytet usługi VMSS> spot lub regular Nie dotyczy
kubernetes.io/hostname <nazwa hosta> aks-nodepool-00000000-vmss000000 To samo
kubernetes.azure.com/storageprofile <Profil magazynu dysku systemu operacyjnego> Managed Nie dotyczy
kubernetes.azure.com/storagetier <Warstwa magazynowania dysku systemu operacyjnego> Premium_LRS Nie dotyczy
kubernetes.azure.com/node-image-version <Wersja VHD> AKSUbuntu-1804-2020.03.05 Wersja węzła wirtualnego
kubernetes.azure.com/network-name <nazwa sieci wirtualnej puli węzłów> vnetName Sieć wirtualna węzła wirtualnego
kubernetes.azure.com/network-subnet <nazwa podsieci nodepool> subnetName Nazwa podsieci węzła wirtualnego
kubernetes.azure.com/ppg <nazwa puli węzłów ppg> ppgName Nie dotyczy
kubernetes.azure.com/encrypted-set <nazwa zestawu szyfrowanego puli węzłów> encrypted-set-name Nie dotyczy
kubernetes.azure.com/accelerator <akcelerator> nvidia Nie dotyczy
kubernetes.azure.com/fips_enabled <czy włączono standard FIPS?> true Nie dotyczy
kubernetes.azure.com/os-sku <os/sku> Twórz lub aktualizuj SKU systemu operacyjnego Linux
kubernetes.azure.com/os-sku-effective <wybrana rzeczywista jednostka SKU systemu operacyjnego> Ubuntu2204 lub podobne (nigdy Ubuntu; zawsze z określoną wersją) Nie dotyczy
kubernetes.azure.com/os-sku-requested <użytkownik zażądał jednostki SKU systemu operacyjnego> Ubuntu, Ubuntu2204 lub podobne (dokładnie pasuje do żądanego SKU z interfejsu API) Nie dotyczy
kubernetes.azure.com/sku-cpu <ilość procesorów> 4 To samo
kubernetes.azure.com/sku-memory <pamięć w GB> 16 To samo
kubernetes.azure.com/nodepool-type <typ puli węzłów> VirtualMachineScaleSets Nie dotyczy
  • To samo dotyczy miejsc, w których oczekiwane wartości etykiet nie różnią się między standardową pulą węzłów a pulą węzłów wirtualnych. Ponieważ zasobniki węzłów wirtualnych nie uwidaczniają żadnej bazowej maszyny wirtualnej, wartości jednostki SKU maszyny wirtualnej są zastępowane jednostką SKU Virtual.
  • Wersja węzła wirtualnego odnosi się do bieżącej wersji wirtualnego łącznika Kubelet-ACI.
  • Nazwa podsieci węzła wirtualnego to nazwa podsieci, w której zasobniki węzłów wirtualnych są wdrażane w usłudze Azure Container Instance (ACI).
  • Sieć wirtualna węzła wirtualnego to nazwa sieci wirtualnej, która zawiera podsieć, w której są wdrażane zasobniki węzłów wirtualnych w usłudze ACI.
  • Automatyczne provisionowanie węzłów (Karpenter) mają dodatkowe etykiety odpowiadające obsługiwanym selektorom.
  • kubernetes.azure.com/network-name i kubernetes.azure.com/network-subnet zostanie obcięty, jeśli nazwy zasobów bazowych są dłuższe niż 64 znaki.

Prefiksy zarezerwowane

Następujące prefiksy są zarezerwowane dla usługi AKS i nie można ich używać na żadnym węźle:

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

Aby uzyskać więcej informacji na temat zarezerwowanych prefiksów, zobacz Dobrze znane etykiety, adnotacje i skażenia platformy Kubernetes.

Przestarzałe etykiety

Następujące etykiety są planowane do wycofania przy wydaniu Kubernetes w wersji 1.24. Należy zmienić wszelkie odwołania do etykiet na zalecane zamienniki.

Etykieta Zalecany zamiennik opiekun
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
Pula agentów* kubernetes.azure.com/agentpool Azure Kubernetes Service
Profil magazynowania kubernetes.azure.com/storageprofile Azure Kubernetes Service
Storagetier* kubernetes.azure.com/storagetier Azure Kubernetes Service
Akcelerator* kubernetes.azure.com/accelerator Azure Kubernetes Service

*Ostatnio wycofane. Aby uzyskać więcej informacji, zobacz Uwaga do wydania.

Następne kroki

Dowiedz się więcej o etykietach Kubernetes w dokumentacji etykiet Kubernetes.