Usare i nodi virtuali v2 in Servizio Azure Kubernetes (AKS) (anteprima)

Nodi virtuali v2 è uno stack di nodi virtuali migliorato che estende il servizio Azure Kubernetes oltre i nodi basati su macchine virtuali eseguendo pod nel calcolo serverless in Istanze di Azure Container (ACI). I carichi di lavoro vengono eseguiti in modalità ACI in pochi secondi senza attendere il provisioning dei nuovi nodi e si paga solo per il calcolo usato durante l'esecuzione dei pod. I nodi virtuali v2 vengono distribuiti come estensione del cluster del servizio Azure Kubernetes.

Important

Le funzionalità in anteprima di AKS sono disponibili in modalità self-service, su base volontaria. Le anteprime vengono fornite "così come sono" e "come disponibili" e sono escluse dai contratti di servizio e dalla garanzia limitata. Le anteprime di AKS sono coperte solo parzialmente dall'assistenza clienti nei limiti del possibile. Di conseguenza, queste funzionalità non sono destinate all'uso in produzione. Per altre informazioni, vedere gli articoli di supporto seguenti:

Supportato

  • Contenitori init
  • Alias host
  • Hook del ciclo di vita dei contenitori (postStart e preStop)
  • kubectl exec con argomenti
  • Volumi persistenti e pvC (solo File di Azure)
  • Collegamento reti virtuali
  • Uscita controllata dal gruppo di sicurezza di rete
  • Gateway NAT per l'uscita
  • Contenitori riservati
  • Fino a 200 pod per nodo virtuale

Limitations

Le funzionalità seguenti non sono supportate:

  • Contenitori di Windows
  • DaemonSets
  • Port forwarding
  • IPv6
  • Intervalli IP autorizzati del server API
  • Overlay CNI di Azure
  • Cilium o NPM come criterio di rete
  • Rete virtuale Bring Your Own (BYO)
  • Più istanze di estensione per cluster
  • Pool di standby

Limiti di disponibilità e quota delle risorse

I nodi virtuali v2 sono disponibili in tutte le aree cloud pubbliche Azure in cui Istanze di Azure Container supporta gli SKU di rete virtuale. Per altre informazioni, vedere Disponibilità delle risorse e limiti di quota per ACI.

Prerequisiti

  • Azure CNI in modalità node-subnet
  • Calico o nessuno come criterio di rete
  • Identità del carico di lavoro abilitata
  • Almeno un pool di nodi con dimensioni di vm di 4+ vCPU e 16+ GiB di memoria. Ogni nodo virtuale riserva circa 3 vCPU e 12 GiB di memoria in un nodo del servizio Azure Kubernetes nel cluster, quindi assicurarsi che i nodi dispongano di risorse sufficienti.
  • k8s-extension versione 1.8 o successiva
  • kubectl 1.30 o successiva

Registrare il provider di risorse ACI:

az provider register --namespace Microsoft.ContainerInstance

Note

Eseguire il comando seguente se si verifica un errore in qualsiasi fase del processo di abilitazione dell'estensione.

az provider register --namespace Microsoft.KubernetesConfig

Abilitare i nodi virtuali v2

Installare l'estensione

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

Configurare le impostazioni dell'estensione

Le operazioni di creazione e aggiornamento supportano le impostazioni di configurazione seguenti.

Impostazione di configurazione Description
replicaCount Numero di nodi virtuali.
admissionControllerReplicaCount Numero di pod del controller di ammissione.
podAnnotations Annotazioni aggiunte ai pod dell'infrastruttura come mappa chiave-valore.
nodeSelector Etichette che selezionano i nodi del servizio Azure Kubernetes che ospitano i pod dell'infrastruttura e del controller di ammissione.
tolerations Tolerazioni applicate ai pod dell'infrastruttura e del controller di ammissione.
affinity Impostazioni di affinità aggiuntive unite alle regole di affinità del servizio Azure Kubernetes necessarie.
zones Zone di disponibilità delimitate da punto e virgola in cui vengono distribuiti i pod.
nodeLabels Etichette aggiunte ai nodi virtuali come coppie separate da key=value virgole.

Le etichette consentite kubernetes.io sono:

  • 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

Verificare l'estensione:

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

Confermare provisioningState è Succeeded. Può rimanere per qualche Pending minuto.

Verificare che i pod di estensione siano in esecuzione nello spazio dei vn-system nomi :

kubectl get pods --namespace vn-system

Aggiornare un'estensione

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

Note

Il --auto-upgrade-mode parametro supporta none, patcho compatible. Per aggiungere una versione di estensione specifica tramite --version, impostare su --auto-upgrade-modenone.

Accesso ad Registro Azure Container

Per eseguire il pull delle immagini da un Registro Azure Container privato, usare l'identità gestita dell'estensione o un segreto di pull dell'immagine Kubernetes.

Usare l'identità gestita dell'estensione

Concedere il AcrPull ruolo all'identità gestita generata per l'estensione. Questo ruolo concede a tutti i pod in esecuzione nei nodi virtuali dell'estensione l'accesso per eseguire il pull delle immagini dal Registro di sistema senza una configurazione aggiuntiva del pod. È necessario disporre dell'autorizzazione per creare assegnazioni di ruolo nel Registro di sistema.

Ottenere l'ID entità dell'identità gestita dell'estensione:

$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

Ottenere l'ID risorsa del registro contenitori:

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

Assegnare il AcrPull ruolo all'identità gestita dell'estensione nell'ambito del Registro di sistema:

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

Attendere alcuni minuti per propagare l'assegnazione di ruolo prima di distribuire carichi di lavoro che estraggono immagini dal Registro di sistema.

Usare un segreto pull di immagini

Per istruzioni, vedere Segreto pull Kubernetes per l'autenticazione di Registro Azure Container.

Distribuire un carico di lavoro nei nodi virtuali v2

Pianificare i pod nei nodi virtuali usando il virtualization: virtualnode2 selettore di nodi e la virtual-kubelet.io/provider tolleranza:

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

Salvare il manifesto come demo.yamle quindi applicarlo.

kubectl apply -f demo.yaml

Verificare che i pod siano in esecuzione.

kubectl get pods -l app=demo -o wide

Disabilitare i nodi virtuali v2

Avvertimento

Quando si disabilita l'estensione del nodo virtuale, il cluster del servizio Azure Kubernetes si disconnette dal backup Istanze di Azure Container gruppi di contenitori. Per evitare istanze orfane che continuano a essere in esecuzione e incorrere in addebiti, eliminare tutti i carichi di lavoro in esecuzione nel nodo virtuale prima di disabilitare l'estensione.

Eliminare l'estensione e pulire le risorse del nodo virtuale.

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

Passaggi successivi