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 un ambiente Kubernetes self-hosted o di terze parti devi configurare l'autenticazione in Google Cloud prima di eseguire il pull di 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ò eseguire il pull delle 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 usa i seguenti valori predefiniti quando crei pool di nodi cluster:
- L'account di servizio predefinito di Compute Engine è l'identità per i nodi.
Questo account di servizio predefinito ha il ruolo Lettore Artifact Registry
(
roles/artifactregistry.reader
) se hai disabilitata durante la concessione del ruolo Editor di base. - I nodi che crei con l'account di servizio predefinito hanno Gli ambiti di accesso predefiniti di Compute Engine, inclusi accesso di sola lettura allo spazio di archiviazione. Non puoi modificare gli ambiti di accesso in applicazioni esistenti nodi.
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 a quella minima, deve configurare Kubernetes imagePullSecrets in abilitare GKE al pull delle immagini.
Se GKE si trova in un progetto diverso da Artifact Registry, concedere le autorizzazioni di Artifact Registry l'account di servizio usato 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 ambiente Google Kubernetes Engine con il seguente comando:
kubectl run [NAME] --image=LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE:TAG
dove:
- LOCATION è la località a livello di una o più regioni del repository.
- PROJECT è la tua console Google Cloud
ID progetto.
Se l'ID progetto contiene i due punti (
:
), consulta Progetti con ambito dominio. - REPOSITORY è il nome del repository in cui l'immagine viene archiviato.
- 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, vedi 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
).
Mentre il file binario Docker è disponibile sui nodi Linux che utilizzano containerd come runtime, ne sconsigliamo l'uso. Docker non gestisce i container Kubernetes viene eseguito sui nodi containerd, quindi non puoi utilizzarlo visualizzare o interagire con l'esecuzione di container Kubernetes utilizzando i comandi Docker 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 dell'utente critico. e la documentazione di GKE su containerd.
Per i nodi Windows Server, il daemon containerd viene eseguito come servizio Windows
denominato containerd
. I log sono disponibili nella seguente directory dei log:
C:\etc\kubernetes\logs\containerd.log
e vengono visualizzati in Esplora log
sotto LOG NAME: "container-runtime"
.
Pull da un repository pubblico Artifact Registry
Dopo aver eseguito il deployment e l'immagine in un cluster GKE con
nodi containerd, puoi connetterti a un'istanza VM tramite SSH ed eseguire crictl
per la risoluzione dei problemi.
I repository pubblici Artifact Registry non richiedono l'autenticazione. crictl
può essere utilizzato anche per eseguire il pull delle immagini nei repository Artifact Registry privati.
Console
Nella console Google Cloud, vai alla pagina Istanze VM.
Nell'elenco delle istanze di macchine virtuali, fai clic sulla freccia accanto a SSH nella riga dell'istanza che vuoi connettere a.
Seleziona "Apri nella finestra del browser" o il metodo di connessione che preferisci dalle opzioni del menu a discesa.
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 è simile al 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
Assicurati di avere 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 La VM si trovaVM_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
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.
Usa
crictl
per eseguire il pull di un'immagine da Artifact Registry:crictl pull IMAGE_LOCATION:TAG
L'output è simile al 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.
Pull da un repository Artifact Registry privato
Console
Nella console Google Cloud, vai alla pagina Istanze VM.
Nell'elenco delle istanze di macchine virtuali, fai clic sulla freccia accanto a SSH nella riga dell'istanza che vuoi connettere a.
Seleziona "Apri nella 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 che utilizza
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 il valore le virgolette.Esegui il pull dell'immagine utilizzando
crictl pull --creds
e il valoreaccess_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
gcloud
Assicurati di avere 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 La VM si trovaVM_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
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.
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 al 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 il valore le virgolette.Esegui il pull dell'immagine utilizzando
crictl pull --creds
e il valoreaccess_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.