Używanie węzłów wirtualnych w wersji 2 w Azure Kubernetes Service (AKS) (wersja zapoznawcza)

Węzły wirtualne w wersji 2 to ulepszony stos węzłów wirtualnych, który rozszerza usługę AKS poza węzły oparte na maszynie wirtualnej, uruchamiając zasobniki na bezserwerowych obliczeniach w usłudze Azure Container Instances (ACI). Obciążenia są zwiększane do usługi ACI w sekundach bez oczekiwania na aprowizację nowych węzłów i płacisz tylko za zasoby obliczeniowe, których używasz, gdy zasobniki są uruchomione. Węzły wirtualne w wersji 2 są dostarczane jako rozszerzenie klastra usługi AKS.

Important

Funkcje usługi AKS w wersji zapoznawczej są dostępne na zasadzie samoobsługi i wymagają zapisania się. Wersje zapoznawcze są udostępniane w wersji "as is" i "jako dostępne" i są wykluczone z umów dotyczących poziomu usług i ograniczonej gwarancji. Wersje zapoznawcze usługi AKS są częściowo objęte pomocą techniczną dla klientów, świadczoną w miarę możliwości. W związku z tym te funkcje nie są przeznaczone do użytku produkcyjnego. Aby uzyskać więcej informacji, zobacz następujące artykuły pomocy technicznej:

Supported

  • Kontenery inicjowania
  • Aliasy hostów
  • Hooki cyklu życia kontenera (postStart i preStop)
  • kubectl exec z argumentami
  • Woluminy trwałe i kontrolery PVC (tylko Azure Files)
  • Komunikacja równorzędna sieci VNet
  • Ruch wychodzący kontrolowany przez sieciową grupę zabezpieczeń
  • Brama translatora adresów sieciowych dla ruchu wychodzącego
  • Poufne kontenery
  • Maksymalnie 200 zasobników na węzeł wirtualny

Limitations

Następujące funkcje nie są obsługiwane:

  • kontenery Windows
  • DaemonSets
  • Przekazywanie portów
  • IPv6
  • Zakresy autoryzowanych adresów IP serwera interfejsu API
  • Nakładka Azure CNI
  • Cilium lub NPM jako zasady sieciowe
  • Przynieś własną sieć wirtualną (BYO)
  • Wiele wystąpień rozszerzeń na klaster
  • Pule rezerwowe

Dostępność zasobów i limity przydziału

Węzły wirtualne w wersji 2 są dostępne we wszystkich Azure regionach chmury publicznej, w których Azure Container Instances obsługuje jednostki SKU sieci wirtualnej. Aby uzyskać więcej informacji, zobacz Limity dostępności i przydziału zasobów dla usługi ACI.

Prerequisites

  • Azure CNI w trybie podsieci węzła
  • Calico lub brak jako zasady sieciowe
  • Włączono tożsamość obciążenia
  • Co najmniej jedna pula węzłów o rozmiarze 4+ procesorów wirtualnych i 16 giB pamięci. Każdy węzeł wirtualny rezerwuje około 3 procesorów wirtualnych i 12 GiB pamięci w węźle usługi AKS w klastrze, dlatego upewnij się, że węzły mają wystarczającą ilość zasobów.
  • rozszerzenie k8s w wersji 1.8 lub nowszej
  • kubectl 1.30 lub nowszy

Zarejestruj dostawcę zasobów ACI:

az provider register --namespace Microsoft.ContainerInstance

Note

Uruchom następujące polecenie, jeśli wystąpi błąd na dowolnym etapie procesu włączania rozszerzenia.

az provider register --namespace Microsoft.KubernetesConfig

Włączanie węzłów wirtualnych w wersji 2

Zainstaluj rozszerzenie:

az k8s-extension create \
    --name <extension-name> \
    --extension-type Microsoft.virtualnodes \
    --cluster-name <cluster-name> \
    --resource-group <resource-group> \
    --cluster-type managedClusters \
    --configuration-settings replicaCount=1   # specifies number of virtual nodes - optional

Konfigurowanie ustawień rozszerzenia

Operacje tworzenia i aktualizowania obsługują następujące ustawienia konfiguracji.

Ustawienie konfiguracji Description
replicaCount Liczba węzłów wirtualnych.
admissionControllerReplicaCount Liczba zasobników kontrolera dostępu.
podAnnotations Adnotacje dodane do zasobników infrastruktury jako mapa klucz-wartość.
nodeSelector Etykiety, które wybierają węzły usługi AKS hostujące infrastrukturę i zasobniki kontrolera dostępu.
tolerations Tolerancje stosowane w zasobnikach infrastruktury i zasobnikach kontrolera dopuszczania.
affinity Dodatkowe ustawienia koligacji scalone z wymaganymi regułami koligacji usługi AKS.
zones Rozdzielane średnikami strefy dostępności, w których są wdrażane zasobniki.
nodeLabels Etykiety dodane do węzłów wirtualnych jako pary rozdzielane key=value przecinkami.

Dozwolone kubernetes.io etykiety to:

  • beta.kubernetes.io/arch
  • beta.kubernetes.io/instance-type
  • beta.kubernetes.io/os
  • failure-domain.beta.kubernetes.io/region
  • failure-domain.beta.kubernetes.io/zone
  • kubernetes.io/arch
  • kubernetes.io/hostname
  • kubernetes.io/os
  • node.kubernetes.io/instance-type
  • topology.kubernetes.io/region
  • topology.kubernetes.io/zone

Sprawdź rozszerzenie:

az k8s-extension show \
    --name <extension-name> \
    --cluster-type managedClusters \
    --cluster-name <cluster-name> \
    --resource-group <resource-group>

Potwierdź provisioningState , że to Succeeded. Może zatrzymać się Pending na kilka minut.

Sprawdź, czy zasobniki rozszerzeń są uruchomione w przestrzeni nazw vn-system:

kubectl get pods --namespace vn-system

Aktualizowanie rozszerzenia

az k8s-extension update --name <extension-name> --cluster-name <aks-cluster-name> --resource-group <aks-resource-group> --cluster-type managedClusters

Note

Parametr --auto-upgrade-mode obsługuje nonewartość , patchlub compatible. Aby przypiąć określoną wersję rozszerzenia przy użyciu polecenia --version, ustaw wartość --auto-upgrade-modenone.

Azure Container Registry dostęp

Aby ściągnąć obrazy z prywatnej Azure Container Registry (ACR), użyj tożsamości zarządzanej rozszerzenia lub wpisu tajnego ściągania obrazu Kubernetes.

Używanie tożsamości zarządzanej rozszerzenia

AcrPull Udziel roli tożsamości zarządzanej wygenerowanej dla rozszerzenia. Ta rola przyznaje wszystkim zasobnikom uruchomionym w węzłach wirtualnych rozszerzenia dostęp do ściągania obrazów z rejestru bez dodatkowej konfiguracji zasobnika. Musisz mieć uprawnienia do tworzenia przypisań ról w rejestrze.

Pobierz identyfikator podmiotu zabezpieczeń tożsamości zarządzanej rozszerzenia:

$extensionPrincipalId = az k8s-extension show --name <extension-name> --cluster-name <aks-cluster-name> --resource-group <aks-resource-group> --cluster-type managedClusters --query aksAssignedIdentity.principalId --output tsv

Pobierz identyfikator zasobu rejestru kontenerów:

$acrId = az acr show --name <acr-name> --resource-group <acr-resource-group> --query id --output tsv

AcrPull Przypisz rolę do tożsamości zarządzanej rozszerzenia w zakresie rejestru:

az role assignment create --assignee-object-id $extensionPrincipalId --assignee-principal-type ServicePrincipal --role AcrPull --scope $acrId

Poczekaj kilka minut na propagację przypisania roli przed wdrożeniem obciążeń ściągnięcia obrazów z rejestru.

Używanie wpisu tajnego ściągania obrazu

Aby uzyskać instrukcje, zobacz Kubernetes Pull Secret for ACR Authentication (Klucz tajny ściągania rozwiązania Kubernetes na potrzeby uwierzytelniania usługi ACR).

Wdrażanie obciążenia w węzłach wirtualnych w wersji 2

Zaplanuj zasobniki na węzłach wirtualnych przy użyciu selektora virtualization: virtualnode2virtual-kubelet.io/provider węzłów i tolerancji:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo
spec:
  replicas: 3
  selector:
    matchLabels:
      app: demo
  template:
    metadata:
      labels:
        app: demo
    spec:
      containers:
        - name: hello
          image: mcr.microsoft.com/azuredocs/aci-helloworld
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              cpu: "1"
              memory: 1Gi
      nodeSelector:
        virtualization: virtualnode2
        kubernetes.io/os: linux
      tolerations:
        - key: virtual-kubelet.io/provider
          operator: Exists
          effect: NoSchedule

Zapisz manifest jako demo.yaml, a następnie zastosuj go.

kubectl apply -f demo.yaml

Sprawdź, czy zasobniki są uruchomione.

kubectl get pods -l app=demo -o wide

Wyłączanie węzłów wirtualnych w wersji 2

Warning

Po wyłączeniu rozszerzenia węzła wirtualnego klaster usługi AKS rozłącza się z tworzeniem kopii zapasowych Azure Container Instances grup kontenerów. Aby uniknąć oddzielonych wystąpień, które kontynuują uruchamianie i naliczanie opłat, przed wyłączeniem rozszerzenia usuń wszystkie obciążenia uruchomione w węźle wirtualnym.

Usuń rozszerzenie i wyczyść zasoby węzłów wirtualnych.

az k8s-extension delete \
    --name <extension-name> \
    --cluster-name <cluster-name> \
    --resource-group <resource-group> \
    --cluster-type managedClusters
kubectl delete node <virtual-node-name>

Następne kroki