Deployment in Google Kubernetes Engine

Google Kubernetes Engine può estrarre immagini direttamente dai repository Docker. Alcune versioni includono il supporto preconfigurato per il pull delle immagini dai repository Docker di Artifact Registry.

Requisiti

Questa sezione descrive i requisiti per l'integrazione con GKE.

Autorizzazioni

GKE utilizza i seguenti valori predefiniti durante la creazione di pool di nodi o cluster:

Se utilizzi queste impostazioni predefinite, GKE può estrarre le immagini dai repository di Artifact Registry nello stesso progetto Google Cloud. Se devi eseguire il push delle immagini dai nodi, eseguire il pull o il push delle immagini tra progetti, utilizzare un account di servizio fornito dall'utente o avere altre esigenze che le impostazioni predefinite non supportano, consulta la documentazione sul controllo dell'accesso per informazioni sulla configurazione dell'accesso.

Versione GKE

La tabella seguente elenca le versioni di GKE minime richieste per creare cluster con autorizzazioni predefinite per eseguire il pull dei container dai repository Docker nello stesso progetto.

Versione Patch minima richiesta
1,14 1.14.10-gke.22
1,15 1,15,9-gke.8

Se la tua versione di GKE è precedente alla versione minima, devi configurare Kubernetes imagePullSecrets per abilitare GKE a estrarre le immagini.

Se GKE si trova in un progetto diverso da quello di Artifact Registry, concedi le autorizzazioni ad Artifact Registry all'account di servizio utilizzato dal nodo GKE. Per impostazione predefinita, i nodi utilizzano l'account di servizio predefinito di Compute Engine.

Esecuzione di un'immagine

Puoi eseguire un'immagine Artifact Registry su un cluster Google Kubernetes Engine utilizzando il seguente comando:

kubectl run [NAME] --image=LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE:TAG

dove:

  • LOCATION è la località del repository, a livello di una o più aree geografiche.
  • PROJECT è l'ID progetto della console Google Cloud. Se l'ID progetto contiene due punti (:), consulta Progetti con ambito Dominio.
  • REPOSITORY è il nome del repository in cui è archiviata l'immagine.
  • IMAGE è il nome dell'immagine nel repository.
  • TAG è il tag per la versione dell'immagine che vuoi estrarre.

Per ulteriori informazioni sui comandi di Kubernetes, consulta la panoramica di kubectl.

Risoluzione dei problemi relativi alle immagini dei nodi containerd

A partire dal nodo GKE versione 1.19, l'immagine del nodo predefinita per i nodi Linux è la versione di Container-Optimized OS con containerd (cos_containerd) anziché quella di Container-Optimized OS con Docker (cos).

Sebbene il programma binario di Docker sia attualmente disponibile sui nodi Linux che utilizzano containerd come runtime, sconsigliamo di utilizzarlo. Docker non gestisce i container che Kubernetes esegue sui nodi containerd, quindi non puoi usarli per visualizzare o interagire con i container Kubernetes in esecuzione usando i comandi Docker o l'API Docker.

Per il debug o la risoluzione dei problemi sui nodi Linux, puoi interagire con containerd utilizzando lo strumento a riga di comando portatile creato per i runtime dei container Kubernetes: crictl. crictl supporta funzionalità comuni per visualizzare container e immagini, leggere log ed eseguire comandi nei container.

Per ulteriori informazioni, consulta la guida dell'utente Crictl e la documentazione di GKE su containerd.

Per i nodi Windows Server, il daemon containerizzato viene eseguito come servizio Windows chiamato containerd. I log sono disponibili nella seguente directory di log: C:\etc\kubernetes\logs\containerd.log e vengono visualizzati in Esplora log in LOG NAME: "container-runtime".

Esegui il pull da un repository Artifact Registry pubblico

Dopo aver eseguito il deployment e il deployment di un'immagine in un cluster GKE con nodi containerizzati, puoi connetterti a un'istanza VM utilizzando SSH ed eseguire i comandi crictl per la risoluzione dei problemi.

I repository di Artifact Registry pubblico non richiedono l'autenticazione. crictl può essere utilizzato anche per eseguire il pull delle immagini nei repository Artifact Registry privati.

Console

  1. Nella console Google Cloud, vai alla pagina Istanze VM.

    Vai alle istanze VM

  2. Nell'elenco delle istanze di macchine virtuali, fai clic sulla freccia accanto a SSH nella riga dell'istanza a cui vuoi connetterti.

    Pulsante SSH accanto al nome dell'istanza.

  3. Seleziona "Apri nella finestra del browser" o il metodo di connessione preferito dalle opzioni del menu a discesa.

  4. La console Google Cloud apre una nuova finestra del terminale. Utilizza crictl per eseguire il pull di un'immagine da Artifact Registry:

    crictl pull IMAGE_LOCATION:TAG
    

    L'output ha il seguente aspetto:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

    Quando esegui il pull di un'immagine da un repository privato di Artifact Registry, devi eseguire l'autenticazione nel repository. Puoi utilizzare un token di accesso per fornire le tue credenziali.

gcloud

  1. Assicurati di avere l'ultima versione di Google Cloud CLI

    gcloud components update
    
  2. Connettiti alla VM:

    gcloud compute ssh --project=PROJECT_ID \
     --zone=ZONE \
     VM_NAME
    

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del progetto che contiene la VM
    • ZONE: il nome della zona in cui si trova la VM
    • VM_NAME: il nome della VM

    Se hai impostato proprietà predefinite per Google Cloud CLI, puoi omettere i flag --project e --zone da questo comando. Ad esempio:

    gcloud compute ssh VM_NAME
    
  3. Se non hai già creato una chiave SSH, SSH keygen ne genererà una per te. Inserisci una passphrase o lascia il campo vuoto quando richiesto.

  4. Utilizza crictl per eseguire il pull di un'immagine da Artifact Registry:

    crictl pull IMAGE_LOCATION:TAG
    
  5. L'output ha il seguente aspetto:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

    Quando esegui il pull di un'immagine da un repository privato di Artifact Registry, devi eseguire l'autenticazione nel repository. Puoi utilizzare un token di accesso per fornire le tue credenziali.

Esegui il pull da un repository Artifact Registry privato

Console

  1. Nella console Google Cloud, vai alla pagina Istanze VM.

    Vai alle istanze VM

  2. Nell'elenco delle istanze di macchine virtuali, fai clic sulla freccia accanto a SSH nella riga dell'istanza a cui vuoi connetterti.

    Pulsante SSH accanto al nome dell'istanza.

  3. Seleziona "Apri nella finestra del browser" dalle opzioni a discesa.

  4. La console Google Cloud apre una nuova finestra del terminale. Genera un token di accesso all'account di servizio Compute Engine utilizzando curl.

    curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google"
    

    L'output è simile all'esempio seguente:

    "access_token":"ya29.c.KpkBCQgdwv6LrZ2tjrCpG6snWwPMX29LzMeUmAV_Hq_XaxUurfXcCfGZfASGh_KbdmUYTvkuV3sh-WaSBplEskdP6Tc
    HDsTv4B9hMyvoL4M9HrzKHuKTa1ZGj_3iQ1lwq_dAMxAPGjxEVKexatwN2KP0EAWyb6R55Cuu8ItgLf9f4pm9lC5zH4Qo0fkxPUsnCGRBe4AYxEpN6T
    sh","expires_in":3526,"token_type":"Bearer"}
  5. Copia il valore di access_token dall'output restituito senza le virgolette.

  6. Estrai l'immagine usando crictl pull --creds e il valore access_token copiato nel passaggio precedente.

    crictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" IMAGE_LOCATION:TAG

    L'output ha il seguente aspetto:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

gcloud

  1. Assicurati di avere l'ultima versione di Google Cloud CLI

    gcloud components update
    
  2. Connettiti alla VM:

    gcloud compute ssh --project=PROJECT_ID \
     --zone=ZONE \
     VM_NAME
    

    Sostituisci le seguenti variabili:

    • PROJECT_ID: l'ID del progetto che contiene la VM
    • ZONE: il nome della zona in cui si trova la VM
    • VM_NAME: il nome della VM

    Se hai impostato proprietà predefinite per Google Cloud CLI, puoi omettere i flag --project e --zone da questo comando. Ad esempio:

    gcloud compute ssh VM_NAME
    
  3. Se non hai già creato una chiave SSH, SSH keygen ne genererà una per te. Inserisci una passphrase o lascia il campo vuoto quando richiesto.

  4. Genera un token di accesso all'account di servizio Compute Engine utilizzando curl.

    curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google"
    

    L'output ha il seguente aspetto:

    "access_token":"ya29.c.KpkBCQgdwv6LrZ2tjrCpG6snWwPMX29LzMeUmAV_Hq_XaxUurfXcCfGZfASGh_KbdmUYTvkuV3sh-WaSBplEskdP6Tc
    HDsTv4B9hMyvoL4M9HrzKHuKTa1ZGj_3iQ1lwq_dAMxAPGjxEVKexatwN2KP0EAWyb6R55Cuu8ItgLf9f4pm9lC5zH4Qo0fkxPUsnCGRBe4AYxEpN6T
    sh","expires_in":3526,"token_type":"Bearer"}
  5. Copia il valore di access_token dall'output restituito senza le virgolette.

  6. Estrai l'immagine usando crictl pull --creds e il valore access_token copiato nel passaggio precedente.

    crictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" IMAGE_LOCATION:TAG

    L'output ha il seguente aspetto:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

crictl consente agli sviluppatori di eseguire il debug del proprio runtime senza dover configurare i componenti Kubernetes. Per un elenco completo dei comandi, consulta la documentazione di crictl e i documenti di debug per Kubernetes.