Virtuele knooppunten v2 gebruiken in Azure Kubernetes Service (AKS) (preview)

Virtual Nodes v2 is een verbeterde stack van virtuele knooppunten die AKS verder uitbreidt dan vm-knooppunten door pods uit te voeren op serverloze compute in Azure Container Instances (ACI). Workloads schalen in seconden uit naar ACI zonder te wachten tot er nieuwe knooppunten zijn ingericht en u betaalt alleen voor de rekenkracht die u gebruikt zolang de pods draaien. Virtual Nodes v2 wordt geleverd als een AKS-clusterextensie.

Important

AKS preview-functies zijn beschikbaar op selfservice, opt-in basis. Previews worden geleverd 'zoals het is' en 'voor zover beschikbaar' en zijn uitgesloten van de serviceovereenkomsten en beperkte garantie. AKS-previews worden gedeeltelijk gedekt door klantondersteuning naar best vermogen. Zodoende zijn deze functies niet bedoeld voor productiegebruik. Zie de volgende ondersteuningsartikelen voor meer informatie:

Supported

  • Initcontainers
  • Aliassen voor hosts
  • Hooks voor de levenscyclus van containers (postStart en preStop)
  • kubectl exec met argumenten
  • Persistente volumes en PVC's (alleen Azure Files)
  • VNet-peering
  • NSG-gestuurd uitgaand verkeer
  • NAT-gateway voor uitgaand verkeer
  • Vertrouwelijke containers
  • Maximaal 200 pods per virtueel knooppunt

Limitations

De volgende functies worden niet ondersteund:

  • Windows-containers
  • DaemonSets
  • Poortdoorsturing
  • IPv6
  • Geautoriseerde IP-adresbereiken van API-server
  • Azure CNI-overlay
  • Cilium of NPM als netwerkbeleid
  • Gebruik uw eigen (BYO) virtueel netwerk
  • Meerdere extensie-exemplaren per cluster
  • Standbypools

Beschikbaarheid en quotumlimieten voor resources

Virtual Nodes v2 is beschikbaar in alle Azure openbare cloudregio's waar Azure Container Instances VNet-SKU's ondersteunt. Zie beschikbaarheids- en quotumlimieten voor resources voor ACI voor meer informatie.

Prerequisites

  • Azure CNI in de modus knooppuntsubnet
  • Calico of geen als netwerkbeleid
  • Identiteit voor workloads ingeschakeld
  • Ten minste één knooppuntpool met een VM-grootte van 4 of meer vCPU's en 16 GiB of meer geheugen. Elk virtueel knooppunt reserveert ongeveer 3 vCPU's en 12 GiB geheugen op een AKS-knooppunt in uw cluster, dus zorg ervoor dat uw knooppunten voldoende resources hebben.
  • k8s-extension versie 1.8 of hoger
  • kubectl 1.30 of later

Registreer de ACI-resourceprovider:

az provider register --namespace Microsoft.ContainerInstance

Note

Voer de volgende opdracht uit als er een fout optreedt in een fase van het extensie-activeringsproces.

az provider register --namespace Microsoft.KubernetesConfig

Virtuele knooppunten v2 inschakelen

De extensie installeren:

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

Extensie-instellingen configureren

Het maken en bijwerken van bewerkingen ondersteunt de volgende configuratie-instellingen.

Configuratie-instelling Description
replicaCount Aantal virtuele knooppunten.
admissionControllerReplicaCount Aantal toegangscontrollerpods.
podAnnotations Aantekeningen toegevoegd aan infrastructuurpods als een sleutel-waardetoewijzing.
nodeSelector Labels die de AKS-knooppunten selecteren die infrastructuur en toegangscontrollerpods hosten.
tolerations Toleranties toegepast op infrastructuur- en toegangscontrollerpods.
affinity Aanvullende affiniteitsinstellingen zijn samengevoegd met de vereiste AKS-affiniteitsregels.
zones Door puntkomma's gescheiden beschikbaarheidszones waar pods worden geïmplementeerd.
nodeLabels Labels toegevoegd aan virtuele knooppunten als door komma's gescheiden key=value paren.

De toegestane kubernetes.io labels zijn:

  • 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

Controleer de extensie:

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

Bevestig provisioningState dit.Succeeded Het kan een paar minuten blijven Pending .

Controleer of de extensie-pods actief zijn in de naamruimte vn-system:

kubectl get pods --namespace vn-system

Een extensie bijwerken

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

Note

De --auto-upgrade-mode-parameter ondersteunt none, patch of compatible. Als u een specifieke extensieversie wilt vastmaken met behulp van --version, stelt u in --auto-upgrade-mode op none.

Toegang tot Azure Container Registry

Als u images wilt ophalen uit een privé-Azure Container Registry (ACR), gebruikt u de beheerde identiteit van de extensie of een Kubernetes-image pull secret.

De beheerde identiteit van de extensie gebruiken

Verdeel de AcrPull rol aan de beheerde identiteit die voor de extensie is gegenereerd. Deze rol verleent alle pods die worden uitgevoerd op de virtuele knooppunten van de extensie toegang tot het ophalen van installatiekopieën uit het register zonder extra podconfiguratie. U moet gemachtigd zijn om roltoewijzingen in het register te maken.

Haal de principal-id op van de beheerde identiteit van de extensie:

$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

Haal de resource-id van het containerregister op:

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

Wijs de AcrPull rol toe aan de beheerde identiteit van de extensie op het registerbereik:

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

Wacht enkele minuten totdat de roltoewijzing is doorgegeven voordat u workloads implementeert die installatiekopieën uit het register ophalen.

Een pull-geheim voor afbeeldingen gebruiken

Zie Kubernetes Pull Secret voor ACR-verificatie voor instructies.

Een workload implementeren op virtuele knooppunten v2

Plan pods op virtuele knooppunten met behulp van de virtualization: virtualnode2 knooppuntkiezer en de virtual-kubelet.io/provider tolerantie:

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

Sla het manifest op als demo.yamlen pas het toe.

kubectl apply -f demo.yaml

Controleer of de pods worden uitgevoerd.

kubectl get pods -l app=demo -o wide

Virtuele knooppunten v2 uitschakelen

Warning

Wanneer u de extensie voor virtuele knooppunten uitschakelt, wordt de verbinding met het AKS-cluster verbroken met de back-up Azure Container Instances containergroepen. Verwijder alle workloads die worden uitgevoerd op het virtuele knooppunt voordat u de extensie uitschakelt om zwevende exemplaren te voorkomen die blijven werken en kosten in rekening brengen.

Verwijder de extensie en schoon virtuele knooppuntbronnen op.

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

Volgende stappen