Använda Virtual Nodes v2 i Azure Kubernetes Service (AKS) (förhandsversion)

Virtual Nodes v2 är en förbättrad stack för virtuella noder som utökar AKS bortom VM-baserade noder genom att köra poddar på serverlös beräkning i Azure Container Instances (ACI). Arbetsbelastningar skalas ut till ACI på några sekunder utan att vänta på att nya noder ska provisioneras och du betalar bara för den beräkning du använder medan poddarna körs. Virtuella noder v2 levereras som ett AKS-klustertillägg.

Important

AKS-förhandsversionsfunktioner är tillgängliga via självbetjäning och frivillig registrering. Förhandsversioner tillhandahålls "i befintligt skick" och "i mån av tillgång," och de är undantagna från servicenivåavtal och begränsad garanti. AKS-förhandsversioner stöds delvis av kundsupport efter bästa förmåga. Därför är dessa funktioner inte avsedda för produktionsanvändning. Mer information finns i följande supportartiklar:

Supported

  • Init-containrar
  • Värdalias
  • Containerlivscykelkrokar (postStart och preStop)
  • kubectl exec med argument
  • Beständiga volymer och datorer (endast Azure Files)
  • VNet-peering
  • NSG-kontrollerad utgående
  • NAT Gateway för utgående trafik
  • Konfidentiella behållare
  • Upp till 200 poddar per virtuell nod

Limitations

Följande funktioner stöds inte:

  • Windows kontainers
  • DaemonSets
  • Portvidarebefordring
  • IPv6
  • De API-serverauktoriserade IP-intervallen
  • Azure CNI-överlägg
  • Cilium eller NPM som nätverksprincip
  • Ta med ditt eget virtuella nätverk (BYO)
  • Flera tilläggsinstanser per kluster
  • Väntelägespooler

Resurstillgänglighet och kvotgränser

Virtuella noder v2 är tillgängliga i alla Azure offentliga molnregioner där Azure Container Instances stöder VNet-SKU:er. Mer information finns i Resurstillgänglighet och kvotgränser för ACI.

Prerequisites

  • Azure CNI i nod-undernätsläge
  • Calico eller ingen som nätverksprincip
  • Arbetsbelastningsidentitet aktiverad
  • Minst en nodpool med en VM-storlek på 4+ vCPU:er och 16+ GiB minne. Varje virtuell nod reserverar cirka 3 vCPU:er och 12 GiB minne på en AKS-nod i ditt kluster, så se till att noderna har tillräckligt med resurser.
  • k8s-extension version 1.8 eller senare
  • kubectl 1.30 eller senare

Registrera ACI-resursprovidern:

az provider register --namespace Microsoft.ContainerInstance

Note

Kör följande kommando om du stöter på ett fel i något skede av processen för att aktivera tillägget.

az provider register --namespace Microsoft.KubernetesConfig

Aktivera virtuella noder v2

Installera tillägget:

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

Konfigurera tilläggsinställningar

Skapa och uppdatera åtgärder stöder följande konfigurationsinställningar.

Konfigurationsinställning Description
replicaCount Antal virtuella noder.
admissionControllerReplicaCount Antal poddar för antagningskontrollanter.
podAnnotations Anteckningar som lagts till i infrastrukturpoddar som en nyckel/värde-karta.
nodeSelector Etiketter som väljer DE AKS-noder som är värdar för infrastruktur- och antagningskontrollantpoddar.
tolerations Toleranser som tillämpas på poddar för infrastruktur- och antagningskontrollanter.
affinity Ytterligare tillhörighetsinställningar sammanfogade med nödvändiga AKS-tillhörighetsregler.
zones Semikolonavgränsade tillgänglighetszoner där poddar distribueras.
nodeLabels Etiketter som har lagts till i virtuella noder som kommaavgränsade key=value par.

De tillåtna kubernetes.io etiketterna är:

  • 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

Kontrollera tillägget:

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

Bekräfta provisioningState är Succeeded. Det kan stanna Pending i några minuter.

Kontrollera att tilläggspoddar körs i vn-system namnområdet :

kubectl get pods --namespace vn-system

Uppdatera ett tillägg

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

Note

Parametern --auto-upgrade-mode stöder none, patcheller compatible. Om du vill fästa en specifik tilläggsversion med hjälp --versionav anger du --auto-upgrade-mode till none.

Azure Container Registry åtkomst

Om du vill hämta avbildningar från en privat Azure Container Registry (ACR) använder du tilläggets hanterade identitet eller en Kubernetes-avbildningshämtningshemlighet.

Använda tilläggets hanterade identitet

AcrPull Bevilja rollen till den hanterade identitet som genererats för tillägget. Den här rollen ger alla poddar som körs på tilläggets virtuella noder åtkomst till att hämta avbildningar från registret utan extra poddkonfiguration. Du måste ha behörighet att skapa rolltilldelningar i registret.

Hämta huvud-ID:t för den hanterade identiteten för tillägget:

$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

Hämta resurs-ID för containerregistret:

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

AcrPull Tilldela rollen till den tilläggshanterade identiteten i registeromfånget:

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

Vänta några minuter innan rolltilldelningen sprids innan du distribuerar arbetsbelastningar som hämtar avbildningar från registret.

Använda en bildhämtningshemlighet

Instruktioner finns i Kubernetes Pull Secret för ACR-autentisering.

Distribuera en arbetsbelastning till virtuella noder v2

Schemalägg poddar på virtuella noder med hjälp av virtualization: virtualnode2 nodväljaren och toleransen virtual-kubelet.io/provider :

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

Spara manifestet som demo.yamloch tillämpa det sedan.

kubectl apply -f demo.yaml

Kontrollera att poddarna körs.

kubectl get pods -l app=demo -o wide

Inaktivera virtuella noder v2

Varning

När du inaktiverar det virtuella nodtillägget kopplas AKS-klustret från Azure Container Instances containergrupper. Undvik frikopplade instanser som fortsätter att köras och medföra kostnader genom att ta bort alla arbetsbelastningar som körs på den virtuella noden innan du inaktiverar tillägget.

Ta bort tillägget och rensa virtuella nodresurser.

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ästa steg