Creare e configurare un cluster del servizio Azure Kubernetes per l'uso di nodi virtuali nel portale di Azure

I nodi virtuali consentono la comunicazione di rete tra i pod eseguiti in cluster Istanze di Azure Container (ACI) e servizio Azure Kubernetes (AKS). Per consentire la comunicazione viene creata una subnet di rete virtuale e vengono assegnate autorizzazioni delegate. I nodi virtuali funzionano solo con i cluster del servizio Azure Kubernetes creati usando la rete avanzata (Azure CNI). I cluster del servizio Azure Kubernetes vengono creati con la rete di base (kubenet) per impostazione predefinita.

Questo articolo illustra come creare una rete virtuale e subnet e quindi distribuire un cluster del servizio Azure Kubernetes che usa la rete avanzata usando il portale di Azure.

Nota

Per una panoramica della disponibilità e delle limitazioni dell'area del nodo virtuale, vedere Usare i nodi virtuali nel servizio Azure Kubernetes.

Operazioni preliminari

È necessario che il provider di servizi ACI sia registrato nella sottoscrizione.

  • Controllare lo stato della registrazione del provider ACI usando il az provider list comando .

    az provider list --query "[?contains(namespace,'Microsoft.ContainerInstance')]" -o table
    

    L'output di esempio seguente mostra che il provider Microsoft.ContainerInstance è Registered:

    Namespace                    RegistrationState    RegistrationPolicy
    ---------------------------  -------------------  --------------------
    Microsoft.ContainerInstance  Registered           RegistrationRequired
    
  • Se il provider è NotRegistered, registrarlo usando il az provider register comando .

    az provider register --namespace Microsoft.ContainerInstance
    

Creare un cluster del servizio Azure Kubernetes

  1. Passare alla home page portale di Azure.
  2. Selezionare Crea una risorsa>Contenitori.
  3. Nella risorsa servizio Azure Kubernetes (servizio Azure Kubernetes) selezionare Crea.
  4. Nella pagina Informazioni di base configurare le opzioni seguenti:
    • Dettagli progetto: selezionare una sottoscrizione di Azure, quindi selezionare o creare un gruppo di risorse di Azure, ad esempio myResourceGroup.
    • Dettagli cluster: immettere un nome del cluster Kubernetes, ad esempio myAKSCluster. Selezionare un'area e una versione di Kubernetes per il cluster del servizio Azure Kubernetes.
  5. Selezionare Avanti: Pool di nodi e selezionare *Abilita nodi virtuali. Screenshot that shows creating a cluster with virtual nodes enabled on the Azure portal. The option 'Enable virtual nodes' is highlighted.
  6. Selezionare Rivedi e crea.
  7. Al termine della convalida selezionare Crea.

Per impostazione predefinita, questo processo crea un'identità del cluster gestita, usata per la comunicazione e l'integrazione del cluster con altri servizi di Azure. Per altre informazioni, vedere Usare le identità gestite. È anche possibile usare un'entità servizio come identità del cluster.

Questo processo configura il cluster per la rete avanzata e i nodi virtuali per usare la propria subnet di rete virtuale di Azure. La subnet ha autorizzazioni delegate per connettere le risorse di Azure tra il cluster del servizio Azure Kubernetes. Se non si ha già una subnet delegata, il portale di Azure crea e configura una rete virtuale e una subnet di Azure con i nodi virtuali.

Stabilire la connessione al cluster

Azure Cloud Shell è una shell interattiva gratuita che è possibile usare per eseguire i passaggi descritti in questo articolo. Include strumenti comuni di Azure preinstallati e configurati per l'uso con l'account. Per gestire un cluster Kubernetes, usare kubectl, il client da riga di comando di Kubernetes. Il client kubectl è preinstallato in Azure Cloud Shell.

  1. Configurare kubectl per connettersi al cluster Kubernetes usando il az aks get-credentials comando . L'esempio seguente ottiene le credenziali per il nome cluster myAKSCluster nel gruppo di risorse denominato myResourceGroup:

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  2. Verificare la connessione al cluster usando .kubectl get nodes

    kubectl get nodes
    

    L'output di esempio seguente mostra il singolo nodo vm creato e il nodo Linux virtuale denominato virtual-node-aci-linux:

    NAME                           STATUS    ROLES     AGE       VERSION
    virtual-node-aci-linux         Ready     agent     28m       v1.11.2
    aks-agentpool-14693408-0       Ready     agent     32m       v1.11.2
    

Distribuire un'app di esempio

  1. In Azure Cloud Shell creare un file denominato virtual-node.yaml e copiarlo nel file YAML seguente:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: aci-helloworld
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: aci-helloworld
      template:
        metadata:
          labels:
            app: aci-helloworld
        spec:
          containers:
          - name: aci-helloworld
            image: mcr.microsoft.com/azuredocs/aci-helloworld
            ports:
            - containerPort: 80
          nodeSelector:
            kubernetes.io/role: agent
            beta.kubernetes.io/os: linux
            type: virtual-kubelet
          tolerations:
          - key: virtual-kubelet.io/provider
            operator: Exists
    

    YAML definisce un nodeSelector e la tolerazione, che consente di pianificare il pod nel nodo virtuale. Al pod viene assegnato un indirizzo IP interno della subnet di rete virtuale di Azure delegata per l'uso con nodi virtuali.

  2. Eseguire l'applicazione usando il kubectl apply comando .

    kubectl apply -f virtual-node.yaml
    
  3. Visualizzare i pod pianificati nel nodo usando il kubectl get pods comando con l'argomento -o wide .

    kubectl get pods -o wide
    

    L'output di esempio seguente mostra il virtual-node-helloworld pod pianificato nel virtual-node-linux nodo.

    NAME                                     READY     STATUS    RESTARTS   AGE       IP           NODE
    virtual-node-helloworld-9b55975f-bnmfl   1/1       Running   0          4m        10.241.0.4   virtual-node-aci-linux
    

Nota

Se si usano immagini archiviate nel Registro Azure Container, configurare e usare un segreto Kubernetes. Una limitazione dei nodi virtuali è che non è possibile usare l'autenticazione integrata dell'entità servizio Microsoft Entra. Se non si usa un segreto, i pod pianificati nei nodi virtuali non si avviano e segnalano l'errore HTTP response status code 400 error code "InaccessibleImage".

Testare il pod del nodo virtuale

Per testare il pod in esecuzione nel nodo virtuale, passare all'applicazione demo con un client Web. Al pod viene assegnato un indirizzo IP interno, in modo da poter testare facilmente la connettività da un altro pod nel cluster del servizio Azure Kubernetes.

  1. Creare un pod di test e collegarvi una sessione del terminale usando il comando seguente kubectl run .

    kubectl run -it --rm virtual-node-test --image=mcr.microsoft.com/dotnet/runtime-deps:6.0
    
  2. Eseguire l'installazione curl nel pod usando il comando seguente apt-get .

    apt-get update && apt-get install -y curl
    
  3. Accedere all'indirizzo del pod usando il comando seguente curl e specificare l'indirizzo IP interno.

    curl -L http://10.241.0.4
    

    L'output di esempio condensato seguente mostra l'applicazione demo.

    <html>
    <head>
      <title>Welcome to Azure Container Instances!</title>
    </head>
    [...]
    
  4. Chiudere la sessione del terminale al pod di test con exit, che elimina anche il pod.

    exit
    

Passaggi successivi

In questo articolo è stato pianificato un pod nel nodo virtuale ed è stato assegnato un indirizzo IP privato interno. Se si vuole, è invece possibile creare una distribuzione del servizio e instradare il traffico al pod tramite un controller di bilanciamento del carico o in ingresso. Per altre informazioni, vedereCreare un controller di ingresso di base nel servizio Azure Kubernetes.

I nodi virtuali sono un componente di una soluzione di scalabilità nel servizio Azure Kubernetes. Per altre informazioni sulle soluzioni di scalabilità, vedere gli articoli seguenti: