Deployment in Google Kubernetes Engine

Questa guida descrive come eseguire il pull delle immagini da Artifact Registry di cui eseguire il deployment Google Kubernetes Engine. Se vuoi eseguire il deployment in servizi Kubernetes auto-in hosting o di terze parti, devi configurare l'autenticazione in Google Cloud prima di estrarre le immagini da Artifact Registry. Per eseguire l'autenticazione in Google Cloud da Kubernetes carichi di lavoro esterni a Google Cloud, Configura la federazione delle identità per i carichi di lavoro con Kubernetes.

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

Requisiti

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

Autorizzazioni

GKE utilizza le seguenti impostazioni predefinite quando crei pool di nodi o cluster:

Se utilizzi queste impostazioni predefinite, GKE può eseguire il pull delle immagini Repository 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 i progetti, utilizzare account di servizio dall'utente o hai altre esigenze che le impostazioni predefinite non li supportano, consulta la documentazione relativa al controllo dell'accesso per informazioni sulla configurazione dell'accesso.

Se ti viene mostrato il messaggio "Autorizzazione negata" vedi gli errori, consulta Errore di autorizzazione negata.

Versione GKE

La tabella seguente elenca le versioni GKE minime richieste per creare cluster con autorizzazioni predefinite per eseguire il pull dei container da 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 imagePullSecrets di Kubernetes per consentire a GKE di estrarre le immagini.

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

Eseguire 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 posizione regionale o multiregionale del repository.
  • PROJECT è l'ID progetto della console Google Cloud. Se l'ID progetto contiene due punti (:), consulta Progetti basati sul dominio.
  • REPOSITORY è il nome del repository in cui è archiviata l'immagine.
  • IMAGE è il nome dell'immagine nel repository.
  • TAG è il tag della versione dell'immagine di cui vuoi eseguire il pull.

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

Risoluzione dei problemi relativi alle immagini dei nodi containerd

A partire dalla versione 1.19 del nodo GKE, l'immagine predefinita del nodo per i nodi Linux è Container-Optimized OS per i container (cos_containerd) variante anziché Container-Optimized OS con Variante Docker (cos).

Sebbene il file binario di Docker sia disponibile sui nodi Linux che utilizzano containerd come runtime, non consigliamo di utilizzarlo. Docker non gestisce i container Kubernetes in esecuzione sui nodi containerd, pertanto non puoi utilizzarlo per visualizzare o interagire con i container Kubernetes in esecuzione utilizzando i comandi Docker o l'API Docker.

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

Per ulteriori informazioni, consulta la guida utente di crictl e la documentazione di GKE su containerd.

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

Pull da un repository Artifact Registry pubblico

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

I repository Artifact Registry pubblici non richiedono l'autenticazione. crictl può essere utilizzato anche per estrarre le immagini dai repository Artifact Registry privati.

Console

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

    Vai a Istanze VM

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

    Pulsante SSH accanto al nome dell'istanza.

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

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

    crictl pull IMAGE_LOCATION:TAG
    

    L'output è il seguente:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

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

gcloud

  1. Assicurati di avere installato la versione più recente 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 La VM si trova
    • 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 ancora creato una chiave SSH, la generazione della chiave SSH ne genererà una per te. Inserisci una passphrase o lascia il campo vuoto quando richiesto.

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

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

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

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

Pull da un repository Artifact Registry privato

Console

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

    Vai a Istanze VM

  2. Nell'elenco delle istanze della macchina virtuale, 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 del menu 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 il valore le virgolette.

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

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

    L'output è il seguente:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

gcloud

  1. Assicurati di avere installato la versione più recente 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 La VM si trova
    • VM_NAME: il nome della VM

    Se disponi impostare le proprietà predefinite per Google Cloud CLI, puoi omettere --project e --zone da questo comando. Ad esempio:

    gcloud compute ssh VM_NAME
    
  3. Se non hai ancora creato una chiave SSH, la generazione della chiave SSH 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 è il 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 il valore le virgolette.

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

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

    L'output è simile al seguente:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

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