Automatyczne aprowizowanie węzłów (wersja zapoznawcza)

Podczas wdrażania obciążeń w usłudze AKS należy podjąć decyzję o konfiguracji puli węzłów dotyczącej wymaganego rozmiaru maszyny wirtualnej. W miarę jak obciążenia stają się bardziej złożone i wymagają różnych możliwości procesora CPU, pamięci i możliwości uruchamiania, obciążenie związane z koniecznością zaprojektowania konfiguracji maszyny wirtualnej dla wielu żądań zasobów staje się trudne.

Automatyczne aprowizowanie węzłów (NAP) (wersja zapoznawcza) decyduje na podstawie oczekujących wymagań dotyczących zasobów zasobników optymalnej konfiguracji maszyny wirtualnej do uruchamiania tych obciążeń w najbardziej wydajny i ekonomiczny sposób.

Ochrona dostępu do sieci jest oparta na projekcie Open Source Karpenter, a dostawca AKS jest również open source. Ochrona dostępu do sieci automatycznie wdraża i konfiguruje Narzędzie Karpenter w klastrach usługi AKS oraz zarządza nimi.

Ważne

Automatyczne aprowizowanie węzłów (NAP) dla usługi AKS jest obecnie dostępne w wersji zapoznawczej. Zobacz Dodatkowe warunki użytkowania wersji zapoznawczych platformy Microsoft Azure, aby zapoznać się z postanowieniami prawnymi dotyczącymi funkcji platformy Azure, które są w wersji beta lub wersji zapoznawczej albo w inny sposób nie zostały jeszcze wydane jako ogólnie dostępne.

Zanim rozpoczniesz

Instalowanie rozszerzenia interfejsu aks-preview wiersza polecenia

  1. Zainstaluj rozszerzenie interfejsu aks-previewaz extension add wiersza polecenia przy użyciu polecenia .

    az extension add --name aks-preview
    
  2. Zaktualizuj rozszerzenie, aby upewnić się, że masz zainstalowaną najnowszą wersję przy użyciu az extension update polecenia .

    az extension update --name aks-preview
    

Rejestrowanie flagi NodeAutoProvisioningPreview funkcji

  1. Zarejestruj flagę NodeAutoProvisioningPreview funkcji przy użyciu az feature register polecenia .

    az feature register --namespace "Microsoft.ContainerService" --name "NodeAutoProvisioningPreview"
    

    Wyświetlenie stanu Zarejestrowane trwa kilka minut.

  2. Sprawdź stan rejestracji przy użyciu az feature show polecenia .

    az feature show --namespace "Microsoft.ContainerService" --name "NodeAutoProvisioningPreview"
    
  3. Gdy stan będzie odzwierciedlał wartość Zarejestrowano, odśwież rejestrację dostawcy zasobów Microsoft.ContainerService przy użyciu az provider register polecenia .

    az provider register --namespace Microsoft.ContainerService
    

Ograniczenia

  • Jedyną dozwoloną konfiguracją sieci jest Cilium + Nakładka + Azure
  • Nie można włączyć w klastrze, w którym pule węzłów mają włączoną funkcję automatycznego skalowania klastra

Nieobsługiwane funkcje:

  • Pule węzłów systemu Windows
  • Stosowanie konfiguracji niestandardowej do węzła kubelet
  • Klastry IPv6
  • Jednostki usługi

    Uwaga

    Można użyć tożsamości zarządzanej przypisanej przez system lub przypisanej przez użytkownika.

  • Zestawy szyfrowania dysków
  • CustomCATrustCertificates
  • Uruchamianie trybu zatrzymywania
  • Serwer proxy HTTP
  • Mutacja outboundType . Wszystkie typy wychodzące są obsługiwane, ale nie można ich zmienić po utworzeniu.

Włączanie automatycznej aprowizacji węzłów

Aby włączyć automatyczne aprowizowanie węzłów, utwórz nowy klaster przy użyciu polecenia az aks create i ustaw tryb --node-provisioning-mode na "Auto". Należy również użyć sieci nakładki i zasad sieci cilium.

az aks create --name karpuktest --resource-group karpuk --node-provisioning-mode Auto --network-plugin azure --network-plugin-mode overlay --network-dataplane cilium

Pule węzłów

Automatyczna aprowizacja węzła używa listy jednostek SKU maszyn wirtualnych jako punktu wyjścia, aby zdecydować, które najlepiej nadaje się do obciążeń, które znajdują się w stanie oczekiwania. Posiadanie kontroli nad potrzebną jednostkę SKU w początkowej puli umożliwia określenie określonych rodzin jednostek SKU lub typów maszyn wirtualnych oraz maksymalnej ilości zasobów używanych przez aprowizatora.

Jeśli na przykład masz określone jednostki SKU maszyn wirtualnych, które są wystąpieniami zarezerwowanymi, możesz użyć tylko tych maszyn wirtualnych jako puli początkowej.

W klastrze można mieć wiele definicji puli węzłów, ale usługa AKS wdraża domyślną definicję puli węzłów, którą można zmodyfikować:

apiVersion: karpenter.sh/v1beta1
kind: NodePool
metadata:
  name: default
spec:
  disruption:
    consolidationPolicy: WhenUnderutilized
    expireAfter: Never
  template:
    spec:
      nodeClassRef:
        name: default

      # Requirements that constrain the parameters of provisioned nodes.
      # These requirements are combined with pod.spec.affinity.nodeAffinity rules.
      # Operators { In, NotIn, Exists, DoesNotExist, Gt, and Lt } are supported.
      # https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#operators
      requirements:
      - key: kubernetes.io/arch
        operator: In
        values:
        - amd64
      - key: kubernetes.io/os
        operator: In
        values:
        - linux
      - key: karpenter.sh/capacity-type
        operator: In
        values:
        - on-demand
      - key: karpenter.azure.com/sku-family
        operator: In
        values:
        - D

Obsługiwane wymagania dotyczące aprowizacji węzłów

Selektory jednostek SKU z dobrze znanymi etykietami

Selektor opis Przykład
karpenter.azure.com/sku-family Rodzina jednostek SKU maszyny wirtualnej D, F, L itp.
karpenter.azure.com/sku-name Jawna nazwa jednostki SKU Standardowa_A1_v2
karpenter.azure.com/sku-version Wersja jednostki SKU (bez wartości "v" może być używana 1) 1 , 2
karpenter.sh/capacity-type Typ alokacji maszyny wirtualnej (spot/na żądanie) spot lub na żądanie
karpenter.azure.com/sku-cpu Liczba procesorów CPU na maszynie wirtualnej 16
karpenter.azure.com/sku-memory Pamięć na maszynie wirtualnej w usłudze MiB 131072
karpenter.azure.com/sku-gpu-name Nazwa procesora GPU A100
karpenter.azure.com/sku-gpu-manufacturer Producent procesora GPU nvidia
karpenter.azure.com/sku-gpu-count Liczba procesorów GPU na maszynę wirtualną 2
karpenter.azure.com/sku-networking-accelerated Czy maszyna wirtualna ma przyspieszoną sieć [true, false]
karpenter.azure.com/sku-storage-premium-capable Czy maszyna wirtualna obsługuje magazyn we/wy w warstwie Premium [true, false]
karpenter.azure.com/sku-storage-ephemeralos-maxsize Limit rozmiaru dysku efemerycznego systemu operacyjnego w Gb 92
topology.kubernetes.io/zone Strefy dostępności [uksouth-1,uksouth-2,uksouth-3]
kubernetes.io/os System operacyjny (system Linux tylko w wersji zapoznawczej) linux
kubernetes.io/arch Architektura procesora CPU (AMD64 lub ARM64) [amd64, arm64]

Aby wyświetlić listę możliwości jednostki SKU maszyny wirtualnej i dozwolone wartości, użyj vm list-skus polecenia z poziomu interfejsu wiersza polecenia platformy Azure.

az vm list-skus --resource-type virtualMachines --location <location> --query '[].name' --output table

Limity puli węzłów

Domyślnie ochrona dostępu do sieci próbuje zaplanować obciążenia w ramach dostępnego limitu przydziału platformy Azure. Można również określić górny limit zasobów używanych przez pulę węzłów, określając limity w ramach specyfikacji puli węzłów.

  # Resource limits constrain the total size of the cluster.
  # Limits prevent Karpenter from creating new instances once the limit is exceeded.
  limits:
    cpu: "1000"
    memory: 1000Gi

Wagi puli węzłów

Jeśli zdefiniowano wiele pul węzłów, można ustawić preferencję, w której ma być zaplanowane obciążenie. Zdefiniuj względną wagę w definicjach puli węzłów.

  # Priority given to the node pool when the scheduler considers which to select. Higher weights indicate higher priority when comparing node pools.
  # Specifying no weight is equivalent to specifying a weight of 0.
  weight: 10

Aktualizacje obrazu platformy Kubernetes i węzła

Usługa AKS z funkcją ochrony dostępu do sieci zarządza uaktualnieniami wersji platformy Kubernetes i aktualizacjami dysków systemu operacyjnego maszyny wirtualnej domyślnie.

Uaktualnienia platformy Kubernetes

Uaktualnienia platformy Kubernetes dla pul węzłów ochrony dostępu do sieci są zgodne z wersją platformy Kubernetes płaszczyzny sterowania. Jeśli przeprowadzisz uaktualnienie klastra, węzły ochrony dostępu do sieci zostaną automatycznie zaktualizowane w celu wykonania tej samej wersji.

Aktualizacje obrazu węzła

Domyślnie maszyny wirtualne puli węzłów ochrony dostępu do sieci są automatycznie aktualizowane po udostępnieniu nowego obrazu. Jeśli chcesz przypiąć pulę węzłów w określonej wersji obrazu węzła, możesz ustawić parametr imageVersion w klasie node:

kubectl edit aksnodeclass default

W definicji klasy node ustaw wartość imageVersion na jedną z opublikowanych wersji wymienionych w informacjach o wersji usługi AKS. Dostępność obrazów można również zobaczyć w regionach, odwołując się do monitora wersji usługi AKS

ImageVersion to część daty w obrazie węzła, ponieważ obsługiwana jest tylko wersja Ubuntu 22.04, na przykład "AKSUbuntu-2204-202311.07.0" to "202311.07.0"

apiVersion: karpenter.azure.com/v1alpha2
kind: AKSNodeClass
metadata:
  annotations:
    kubernetes.io/description: General purpose AKSNodeClass for running Ubuntu2204
      nodes
    meta.helm.sh/release-name: aks-managed-karpenter-overlay
    meta.helm.sh/release-namespace: kube-system
  creationTimestamp: "2023-11-16T23:59:06Z"
  generation: 1
  labels:
    app.kubernetes.io/managed-by: Helm
    helm.toolkit.fluxcd.io/name: karpenter-overlay-main-adapter-helmrelease
    helm.toolkit.fluxcd.io/namespace: 6556abcb92c4ce0001202e78
  name: default
  resourceVersion: "1792"
  uid: 929a5b07-558f-4649-b78b-eb25e9b97076
spec:
  imageFamily: Ubuntu2204
  imageVersion: 202311.07.0
  osDiskSizeGB: 128

Usunięcie specyfikacji imageVersion spowoduje przywrócenie puli węzłów do zaktualizowania do najnowszej wersji obrazu węzła.

Zakłócenia węzła

Gdy obciążenia w węzłach są skalowane w dół, ochrona dostępu do sieci używa reguł zakłóceń w specyfikacji puli węzłów, aby zdecydować, kiedy i jak usunąć te węzły i potencjalnie ponownie zaplanować obciążenia, aby były bardziej wydajne.

Węzeł można usunąć ręcznie przy użyciu kubectl delete nodeprogramu , ale ochrona dostępu do sieci może również kontrolować, kiedy powinien zoptymalizować węzły.

  disruption:
    # Describes which types of Nodes NAP should consider for consolidation
    consolidationPolicy: WhenUnderutilized | WhenEmpty
    # 'WhenUnderutilized', NAP will consider all nodes for consolidation and attempt to remove or replace Nodes when it discovers that the Node is underutilized and could be changed to reduce cost

    #  `WhenEmpty`, NAP will only consider nodes for consolidation that contain no workload pods
    
    # The amount of time NAP should wait after discovering a consolidation decision
    # This value can currently only be set when the consolidationPolicy is 'WhenEmpty'
    # You can choose to disable consolidation entirely by setting the string value 'Never'
    consolidateAfter: 30s

Monitorowanie zdarzeń wyboru

Automatyczna aprowizacja węzła tworzy zdarzenia klastra, które mogą służyć do monitorowania podejmowania decyzji dotyczących wdrażania i planowania. Zdarzenia można wyświetlać za pośrednictwem strumienia zdarzeń platformy Kubernetes.

kubectl get events -A --field-selector source=karpenter -w