Eseguire il deployment di un'applicazione su GKE su Azure

Questa pagina descrive come creare un cluster e un pool di nodi, quindi eseguire il deployment di un'applicazione di esempio utilizzando GKE su Azure.

Supporto di Terraform

Se hai familiarità con Terraform, puoi utilizzare gli script Terraform disponibili su GitHub per automatizzare i prerequisiti e creare un cluster.

Prima di iniziare

Prima di creare un cluster, devi completare i prerequisiti. In particolare, devi fornire le seguenti risorse:

  • Una rete virtuale Azure in cui verrà eseguito il cluster.
  • Una subnet per le repliche del piano di controllo Kubernetes.
  • Assegnazioni di ruoli Azure che concederanno a GKE su Azure l'accesso al tuo ambiente Azure utilizzando un'entità servizio.
  • Una risorsa AzureClient che GKE su Azure utilizza per eseguire l'autenticazione ai servizi Azure e gestire le risorse nel tuo account Azure.
  • Una coppia di chiavi SSH per accedere alle macchine virtuali Azure nel cluster.

È tua responsabilità creare e gestire queste risorse, che possono essere condivise tra tutti i cluster. Tutte le altre risorse Azure sottostanti per il cluster sono gestite da GKE su Azure.

Impostare le impostazioni predefinite per gcloud CLI

Utilizza gcloud CLI per configurare le impostazioni predefinite per il progetto e Google Cloud regione predefiniti.

Il tuo progetto ha un ID progetto come identificatore univoco. Quando crei un progetto, puoi utilizzare l'ID progetto generato automaticamente o crearne uno tuo.

La Google Cloud regione è una località da cui verranno gestiti i cluster da. Ad esempio, us-west1. Per maggiori dettagli, consulta Regioni di gestione.

Quando configuri queste impostazioni predefinite, non devi includerle quando esegui Google Cloud CLI. Puoi anche specificare le impostazioni o sostituire le impostazioni predefinite passando i flag --project e --location a Google Cloud CLI.

Quando crei risorse GKE su Azure dopo aver configurato il progetto e la località predefiniti, le risorse vengono create automaticamente nel progetto e nella località.

Per impostare i valori predefiniti, segui questi passaggi:

  1. Imposta il progetto predefinito:

    gcloud config set project PROJECT_ID
    

    Sostituisci PROJECT_ID con l'ID progetto.

  2. Imposta la località di gestione predefinita:

    gcloud config set container_azure/location GOOGLE_CLOUD_LOCATION
    

    Sostituisci GOOGLE_CLOUD_LOCATION con la tua località, ad esempio us-west1.

Selezionare gli ID risorsa Azure per il cluster

Selezionare un ID gruppo di risorse

Salva il gruppo di risorse del cluster in una variabile di ambiente eseguendo il seguente comando:

CLUSTER_RESOURCE_GROUP_ID=$(az group show --query id --output tsv \
    --resource-group=CLUSTER_RESOURCE_GROUP_NAME)

Sostituisci CLUSTER_RESOURCE_GROUP_NAME con il nome del gruppo di risorse in cui eseguire il provisioning delle risorse del cluster, che hai configurato nel passaggio dei prerequisiti Creare un gruppo di risorse Azure.

Selezionare un ID rete virtuale

Salva l'ID della rete virtuale del cluster in una variabile di ambiente eseguendo il seguente comando:

VNET_ID=$(az network vnet show --query id --output tsv \
    --resource-group=VNET_RESOURCE_GROUP_NAME \
    --name=VNET_NAME)

Sostituisci quanto segue:

Selezionare un ID subnet

Salva l'ID della subnet del cluster in una variabile di ambiente eseguendo il seguente comando:

SUBNET_ID=$(az network vnet subnet show --query id --output tsv \
    --resource-group VNET_RESOURCE_GROUP_NAME \
    --vnet-name VNET_NAME \
    --name SUBNET_NAME)

Sostituisci:

  • VNET_RESOURCE_GROUP_NAME con il nome di un gruppo di risorse esistente che contiene la rete virtuale. Può essere il nome del gruppo di risorse che hai configurato in Creare una rete virtuale Azure.
  • VNET_NAME con il nome della rete virtuale. Può essere il nome della rete virtuale che hai configurato in Creare una rete virtuale Azure.
  • SUBNET_NAME con il nome della subnet, ad esempio default.

Selezionare gli intervalli CIDR per il cluster

Kubernetes richiede che vengano forniti due intervalli CIDR per il cluster. Questi intervalli CIDR devono essere scelti in modo che non si sovrappongano agli intervalli CIDR utilizzati dalle subnet VPC. Devono essere abbastanza grandi per le dimensioni massime previste del cluster.

  • Intervallo CIDR degli indirizzi dei pod: quando viene creato un nuovo Pod, gli viene allocato un indirizzo IP da questo intervallo. Intervallo di esempio: 192.168.208.0/20

  • Intervallo CIDR degli indirizzi dei servizi: quando viene creato un nuovo servizio, gli viene allocato un indirizzo IP da questo intervallo. Intervallo di esempio: 192.168.224.0/20

Creare un cluster

Utilizza il seguente comando per creare un cluster in GKE su Azure.

gcloud container azure clusters create azure-cluster-0 \
    --cluster-version 1.34.1-gke.4700 \
    --azure-region AZURE_REGION \
    --fleet-project FLEET_PROJECT_ID \
    --client CLIENT_NAME \
    --resource-group-id $CLUSTER_RESOURCE_GROUP_ID \
    --vnet-id $VNET_ID \
    --subnet-id $SUBNET_ID \
    --pod-address-cidr-blocks POD_CIDR_BLOCK \
    --service-address-cidr-blocks SERVICE_CIDR_BLOCK \
    --ssh-public-key "SSH_PUBLIC_KEY" \
    --tags "google:gkemulticloud:cluster=azure-cluster-0"

Sostituisci:

Per ulteriori informazioni e parametri facoltativi, consulta la pagina di riferimento di gcloud container azure clusters create.

Creare un pool di nodi

Crea un pool di nodi con Google Cloud CLI:

gcloud container azure node-pools create pool-0 \
    --cluster azure-cluster-0 \
    --node-version 1.34.1-gke.4700 \
    --vm-size Standard_B2s \
    --max-pods-per-node 110 \
    --min-nodes 1 \
    --max-nodes 5 \
    --ssh-public-key "SSH_PUBLIC_KEY" \
    --subnet-id $SUBNET_ID \
    --tags "google:gkemulticloud:cluster=azure-cluster-0"

Sostituisci SSH_PUBLIC_KEY con il testo della chiave pubblica SSH, creata nel passaggio dei prerequisiti Creare una coppia di chiavi SSH. Se hai salvato la chiave pubblica in una variabile di ambiente, puoi utilizzare ${SSH_PUBLIC_KEY}.

Visualizzare lo stato del cluster

Dopo aver creato un cluster e un pool di nodi, puoi visualizzare lo stato di un cluster con Google Cloud CLI o la Google Cloud console. Per visualizzare lo stato del cluster, scegli se utilizzi Google Cloud CLI o la Google Cloud console e segui questi passaggi:

gcloud

Utilizza il comando gcloud container azure clusters describe per ottenere dettagli sul cluster:

gcloud container azure clusters describe CLUSTER_NAME \
    --location GOOGLE_CLOUD_LOCATION

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del cluster
  • GOOGLE_CLOUD_LOCATION: il nome della Google Cloud località che gestisce il cluster

Google Cloud Console

  1. Nella Google Cloud console, vai alla pagina Panoramica dei cluster Google Kubernetes Engine.

    Vai ai cluster GKE

  2. I cluster sono elencati in base al nome e alla località.

  3. Fai clic sul nome del cluster. Viene visualizzato un riquadro con informazioni sul cluster, inclusi lo stato e le funzionalità abilitate.

Recuperare le credenziali di autenticazione per il cluster

Dopo aver creato il cluster, devi recuperare le credenziali di autenticazione per interagire con il cluster:

gcloud container azure clusters get-credentials azure-cluster-0

Questo comando configura kubectl per accedere al cluster creato utilizzando Connect Gateway. Per utilizzare Connect Gateway è necessario almeno un pool di nodi, perché si basa sull'agente Connect, che viene eseguito come deployment nel cluster.

Eseguire il deployment di un'applicazione nel cluster

Ora che hai creato un cluster, puoi eseguirvi il deployment di un'applicazione containerizzata. Per questa guida rapida, puoi eseguire il deployment della nostra applicazione web di esempio, hello-app.

Utilizza gli oggetti Kubernetes per creare e gestire le risorse del cluster. Utilizza l'oggetto Deployment per eseguire il deployment di applicazioni stateless come i server web. Gli oggetti Service definiscono le regole e i bilanciatori del carico per l'accesso all'applicazione da internet.

Creare il deployment

Per eseguire hello-app nel cluster, devi eseguire il deployment dell'applicazione eseguendo il seguente comando:

kubectl create deployment hello-server --image=us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0

Questo comando Kubernetes, kubectl create deployment crea un deployment denominato hello-server. Il pod del deployment esegue l'immagine container hello-app.

In questo comando:

  • --image specifica l'immagine container di cui va eseguito il deployment. In questo caso, il comando estrae l'immagine di esempio da un repository Artifact Registry, us-docker.pkg.dev/google-samples/containers/gke/hello-app. :1.0 indica la versione specifica dell'immagine da estrarre. Se non specifichi una versione, viene utilizzata l'immagine con il tag latest.

Esponi il deployment

Dopo aver eseguito il deployment dell'applicazione, devi esporla a internet in modo che gli utenti possano accedervi. Puoi esporre l'applicazione creando un servizio, una risorsa Kubernetes che espone l'applicazione al traffico esterno.

Per esporre l'applicazione, esegui il seguente kubectl expose comando:

kubectl expose deployment hello-server --type LoadBalancer --port 80 --target-port 8080

L'utilizzo del flag --type LoadBalancer comporta la creazione di un bilanciatore del carico Azure per il container. Il flag --port inizializza la porta pubblica 80 su internet e il flag --target-port instrada il traffico alla porta 8080 dell'applicazione.

I bilanciatori del carico vengono fatturati in base ai prezzi del bilanciatore del carico Azure.

Ispezionare e visualizzare l'applicazione

  1. Ispeziona i pod in esecuzione utilizzando kubectl get pods:

    kubectl get pods
    

    Dovresti vedere un pod hello-server in esecuzione sul cluster.

  2. Ispeziona il servizio hello-server utilizzando kubectl get service:

    kubectl get service hello-server
    

    Dall'output di questo comando copia l'indirizzo IP esterno del servizio riportato nella colonna EXTERNAL-IP.

  3. Visualizza l'applicazione dal browser web utilizzando l'IP esterno con la porta esposta:

    http://EXTERNAL-IP
    

Hai appena eseguito il deployment di un'applicazione web containerizzata su GKE su Azure.

Libera spazio

  1. Elimina il servizio e il deployment dell'applicazione:

    kubectl delete service hello-server
    kubectl delete deployment hello-server
    
  2. Elimina il pool di nodi eseguendo gcloud container azure node-pools delete:

    gcloud container azure node-pools delete pool-0 --cluster azure-cluster-0
    
  3. Elimina il cluster eseguendo gcloud container azure clusters delete:

    gcloud container azure clusters delete azure-cluster-0
    

Passaggi successivi