Verwenden von virtuellen Knoten v2 in Azure Kubernetes Service (AKS) (Vorschau)

„Virtual Nodes v2“ ist ein verbesserter Virtual-Nodes-Stack, der AKS über VM-basierte Knoten hinaus erweitert, indem Pods auf serverloser Recheninfrastruktur in Azure Container Instances (ACI). Workloads platzen in Sekunden auf ACI, ohne darauf zu warten, dass neue Knoten bereitgestellt werden, und Sie zahlen nur für die Berechnung, die Sie verwenden, während die Pods ausgeführt werden. Virtual Nodes v2 wird als AKS-Clustererweiterung bereitgestellt.

Important

AKS-Preview-Funktionen stehen auf Selbstbedienungs- und Opt-in-Basis zur Verfügung. Vorschauversionen werden „im Istzustand“ und „wie verfügbar“ bereitgestellt und sind von den Service Level Agreements und der eingeschränkten Garantie ausgeschlossen. AKS-Vorschauversionen werden teilweise vom Kundensupport auf Grundlage der bestmöglichen Leistung abgedeckt. Daher sind diese Funktionen nicht für die Verwendung in der Produktion vorgesehen. Weitere Informationen finden Sie in den folgenden Supportartikeln:

Unterstützt

  • Initialisierungscontainer.
  • Hostaliase.
  • Containerlebenszyklus-Hooks (postStart und preStop)
  • kubectl exec mit Argumenten
  • Persistente Volumes und PVCs (nur Azure Files)
  • VNet-Peering
  • NSG-kontrollierter Ausgang
  • NAT-Gateway für den Ausgang
  • Vertrauliche Container
  • Bis zu 200 Pods pro virtuellen Knoten

Limitations

Die folgenden Features werden nicht unterstützt:

  • Windows-Container
  • DaemonSets
  • Portweiterleitung
  • IPv6
  • Vom API-Server autorisierte IP-Adressbereiche
  • Azure CNI-Überlagerung
  • Cilium oder NPM als Netzwerkrichtlinie
  • Verwendung eines eigenen (BYO) virtuellen Netzwerks
  • Mehrere Erweiterungsinstanzen pro Cluster
  • Bereitschaftspools

Ressourcenverfügbarkeit und Kontingentgrenzen

Virtual Nodes v2 ist in allen öffentlichen Azure-Cloudregionen verfügbar, in denen Azure Container Instances VNet-SKUs unterstützt. Weitere Informationen finden Sie unter Ressourcenverfügbarkeits- & Kontingentbeschränkungen für ACI.

Prerequisites

  • Azure CNI im Knoten-Subnetzmodus
  • Calico oder keine als Netzwerkrichtlinie
  • Workload-Identität aktiviert
  • Mindestens ein Knotenpool mit einer VM-Größe von 4+ vCPUs und 16+ GiB Arbeitsspeicher. Jeder virtuelle Knoten reserviert etwa 3 vCPUs und 12 GiB Arbeitsspeicher auf einem AKS-Knoten in Ihrem Cluster, damit Ihre Knoten über genügend Ressourcen verfügen.
  • k8s-Erweiterung Version 1.8 oder höher
  • kubectl 1.30 oder höher

Registrieren des ACI-Ressourcenanbieters

az provider register --namespace Microsoft.ContainerInstance

Note

Führen Sie den folgenden Befehl aus, wenn in irgendeiner Phase des Erweiterungsaktivierungsprozesses ein Fehler auftritt.

az provider register --namespace Microsoft.KubernetesConfig

Virtual Nodes v2 aktivieren

Installieren Sie die Erweiterung:

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

Konfigurieren der Erweiterungseinstellungen

Erstellungs- und Aktualisierungsvorgänge unterstützen die folgenden Konfigurationseinstellungen.

Konfigurationseinstellung Description
replicaCount Anzahl virtueller Knoten.
admissionControllerReplicaCount Anzahl der Zugangscontrollerpods.
podAnnotations Anmerkungen, die Infrastruktur-Pods als Schlüsselwertzuordnung hinzugefügt werden.
nodeSelector Bezeichnungen, die die AKS-Knoten auswählen, die Infrastruktur- und Zugangscontrollerpods hosten.
tolerations Toleranzen, die auf Infrastruktur- und Zugangscontrollerpods angewendet werden.
affinity Zusätzliche Affinitätseinstellungen werden mit den erforderlichen AKS-Affinitätsregeln zusammengeführt.
zones Durch Semikolons getrennte Verfügbarkeitszonen, in denen Pods bereitgestellt werden.
nodeLabels Bezeichnungen, die virtuellen Knoten als kommagetrennte key=value Paare hinzugefügt werden.

Die zulässigen kubernetes.io Bezeichnungen sind:

  • 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

Überprüfen der Erweiterung:

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

Bestätigen Sie, dass provisioningStateSucceeded ist. Es kann Pending ein paar Minuten bleiben.

Überprüfen Sie, ob die Erweiterungs-Pods im vn-system Namespace ausgeführt werden:

kubectl get pods --namespace vn-system

Aktualisieren einer Erweiterung

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

Note

Der --auto-upgrade-mode Parameter unterstützt none, patch oder compatible. Zum Anheften einer bestimmten Erweiterungsversion mithilfe --versionvon , legen Sie --auto-upgrade-mode auf none fest.

Zugriff auf Azure Container Registry

Um Bilder aus einer privaten Azure Container Registry (ACR) abzurufen, verwenden Sie die verwaltete Identität der Erweiterung oder ein Kubernetes-Image-Pull-Secret.

Verwenden der verwalteten Erweiterungsidentität

Gewähren Sie der AcrPull Rolle die für die Erweiterung generierte verwaltete Identität. Diese Rolle gewährt allen Pods, die auf den virtuellen Knoten der Erweiterung ausgeführt werden, Zugriff auf das Abrufen von Bilder aus der Registrierung, ohne dass eine zusätzliche Pod-Konfiguration erforderlich ist. Sie müssen über die Berechtigung zum Erstellen von Rollenzuweisungen in der Registrierung verfügen.

Abrufen der Prinzipal-ID der verwalteten Identität der Erweiterung:

$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

Rufen Sie die Ressourcen-ID der Containerregistrierung ab:

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

Weisen Sie die AcrPull Rolle der verwalteten Erweiterungsidentität im Registrierungsbereich zu:

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

Warten Sie mehrere Minuten, bis die Rollenzuweisung verteilt wird, bevor Workloads bereitgestellt werden, die Bilder aus der Registrierung abrufen.

Verwenden eines Geheimnisses für Imagepullvorgänge

Anweisungen finden Sie unter Kubernetes Pull Secret für die ACR-Authentifizierung.

Bereitstellen einer Workload auf Virtual Nodes v2

Planen Sie Pods auf virtuellen Knoten mithilfe der virtualization: virtualnode2 Knotenauswahl und der virtual-kubelet.io/provider Toleration:

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

Speichern Sie das Manifest als demo.yaml, und wenden Sie es an.

kubectl apply -f demo.yaml

Überprüfen Sie, ob die Pods ausgeführt werden.

kubectl get pods -l app=demo -o wide

Virtual Nodes v2 deaktivieren

Warning

Wenn Sie die Erweiterung für virtuelle Knoten deaktivieren, trennt der AKS-Cluster die Verbindung zu den zugrunde liegenden Azure Container Instances-Containergruppen. Um verwaiste Instanzen zu vermeiden, die weiterhin ausgeführt werden und Gebühren verursachen, löschen Sie alle Workloads, die auf dem virtuellen Knoten ausgeführt werden, bevor Sie die Erweiterung deaktivieren.

Löschen Sie die Erweiterung und bereinigen Sie virtuelle Knotenressourcen.

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

Nächste Schritte