Questa guida descrive come estrarre immagini da Artifact Registry per eseguirne il deployment su 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 autenticarti su Google Cloud dai carichi di lavoro Kubernetes esterni a Google Cloud, consulta Configurare la federazione Workload Identity con Kubernetes.
Google Kubernetes Engine può estrarre le immagini direttamente dai repository Docker. Alcune versioni includono il supporto preconfigurato per il recupero delle immagini dai repository Docker di Artifact Registry.
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:
- L'account di servizio predefinito di Compute Engine è l'identità dei nodi.
Questo account di servizio predefinito ha il ruolo Lettore del registry di elementi
(
roles/artifactregistry.reader
) se hai disattivato la concessione del ruolo Editor di base. - I nodi creati con l'account di servizio predefinito dispongono degli ambiti di accesso predefiniti di Compute Engine, tra cui l'accesso di sola lettura allo spazio di archiviazione. Non puoi modificare gli ambiti di accesso nei nodi esistenti.
Se utilizzi questi valori predefiniti, GKE può estrarre le immagini dai repository Artifact Registry nello stesso progetto Google Cloud. Se devi eseguire il push di immagini dai nodi, eseguire il pull o il push di immagini tra progetti, utilizzare un account di servizio fornito dall'utente o hai altre esigenze non supportate dalle impostazioni predefinite, consulta la documentazione sul controllo dell'accesso per informazioni sulla configurazione dell'accesso.
Se si verificano errori di tipo "autorizzazione negata", consulta Errori 4xx.
Versione GKE
La tabella seguente elenca le versioni GKE minime richieste per creare cluster con autorizzazioni predefinite per estrarre i 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 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 di 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 che vuoi estrarre.
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 del nodo predefinita per i nodi Linux è la variante Container-Optimized OS con containerd (cos_containerd
) anziché la variante Container-Optimized OS con 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 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 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"
.
Estrazione 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
Nella console Google Cloud, vai alla pagina Istanze VM.
Nell'elenco delle istanze della macchina virtuale, fai clic sulla freccia accanto a SSH nella riga dell'istanza a cui vuoi connetterti.
Seleziona "Apri nella finestra del browser" o il metodo di connessione che preferisci tra le opzioni disponibili nel menu a discesa.
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 è il seguente:
Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5
Quando estrae un'immagine da un repository privato di Artifact Registry, devi autenticarti nel repository. Puoi utilizzare un token di accesso per fornire le tue credenziali.
gcloud
Assicurati di avere installato la versione più recente di Google Cloud CLI
gcloud components update
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 VMZONE
: il nome della zona in cui si trova la VMVM_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
Se non hai ancora creato una chiave SSH, keygen SSH ne genererà una per te. Inserisci una passphrase o lascia vuoto il campo quando richiesto.
Utilizza
crictl
per estrarre un'immagine da Artifact Registry:crictl pull IMAGE_LOCATION:TAG
L'output è il seguente:
Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5
Quando estrae un'immagine da un repository privato di Artifact Registry, devi autenticarti nel repository. Puoi utilizzare un token di accesso per fornire le tue credenziali.
Estrazione da un repository Artifact Registry privato
Console
Nella console Google Cloud, vai alla pagina Istanze VM.
Nell'elenco delle istanze della macchina virtuale, fai clic sulla freccia accanto a SSH nella riga dell'istanza a cui vuoi connetterti.
Seleziona "Apri in una finestra del browser" dalle opzioni del menu a discesa.
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"}
Copia il valore di
access_token
dall'output restituito senza le virgolette.Estrai l'immagine utilizzando
crictl pull --creds
e il valoreaccess_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
Assicurati di avere installato la versione più recente di Google Cloud CLI
gcloud components update
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 VMZONE
: il nome della zona in cui si trova la VMVM_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
Se non hai ancora creato una chiave SSH, keygen la genererà per te. Inserisci una passphrase o lascia vuoto il campo quando richiesto.
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"}
Copia il valore di
access_token
dall'output restituito senza le virgolette.Estrai l'immagine utilizzando
crictl pull --creds
e il valoreaccess_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
crictl
consente agli sviluppatori di eseguire il debug del runtime senza dover configurare i componenti Kubernetes. Per un elenco completo dei comandi, consulta la documentazione di crictl
e la documentazione di debug di Kubernetes.