Questa pagina mostra come utilizzare lo streaming delle immagini in Google Kubernetes Engine (GKE) per eseguire il pull delle immagini dei container trasmettendo in streaming i dati delle immagini in base alle esigenze delle tue applicazioni.
I nuovi cluster Autopilot che eseguono GKE versione 1.25.5-gke.1000 e successive utilizzano automaticamente lo streaming di immagini per eseguire il pull delle immagini idonee. Le istruzioni riportate in questa pagina si applicano solo ai cluster Standard.
Panoramica
Lo streaming di immagini è un metodo per eseguire il pull delle immagini dei container in cui GKE trasmette i dati dalle immagini idonee come richiesto dalle tue applicazioni. Puoi utilizzare lo streaming di immagini per consentire l'inizializzazione dei carichi di lavoro senza attendere il download dell'intera immagine, migliorando in modo significativo i tempi di inizializzazione. Il tempo di estrazione ridotto offre vantaggi tra cui:
- Scalabilità automatica più rapida
- Latenza ridotta durante il recupero di immagini di grandi dimensioni
- Avvio più rapido dei pod
Con lo streaming di immagini, GKE utilizza un file system remoto come file system radice per tutti i container che utilizzano immagini container idonee. GKE trasmette in streaming i dati delle immagini dal file system remoto in base alle esigenze dei tuoi workload. Senza lo streaming di immagini, GKE scarica l'intera immagine container su ogni nodo e la utilizza come file system root per i carichi di lavoro.
Durante lo streaming dei dati dell'immagine, GKE scarica l'intera immagine del container sul disco locale in background e la memorizza nella cache. GKE gestisce le future richieste di lettura dei dati dall'immagine memorizzata nella cache.
Quando esegui il deployment di carichi di lavoro che devono leggere file specifici nell'immagine container, il backend di Image Streaming pubblica solo i file richiesti.
Requisiti
Per utilizzare lo streaming di immagini nei cluster GKE Autopilot e Standard, devi soddisfare i seguenti requisiti:
Devi abilitare l'API Container File System.
I nuovi cluster Autopilot devono eseguire GKE versione 1.25.5-gke.1000 o successive per avere lo streaming delle immagini abilitato automaticamente. Per istruzioni, consulta Impostare la versione e il canale di rilascio di un nuovo cluster Autopilot.
Devi utilizzare l'immagine del nodo Container-Optimized OS con Containerd. I nodi Autopilot utilizzano sempre questa immagine del nodo.
Le immagini container devono essere archiviate in repository standard o remoti in Artifact Registry o in registri pubblici su Docker Hub.
Se abiliti i nodi privati sul cluster, devi abilitare l'accesso privato Google sulla subnet per consentire ai nodi di accedere al servizio di streaming delle immagini.
Se Controlli di servizio VPC protegge le tue immagini container e utilizzi lo streaming di immagini, devi includere anche l'API Image Streaming (
containerfilesystem.googleapis.com
) nel perimetro di servizio.Se i nodi GKE nel cluster non utilizzano il account di servizio predefinito, devi assicurarti che il account di servizio personalizzato disponga del ruolo IAM Consumer servizio di utilizzo (
roles/serviceusage.serviceUsageConsumer
) nel progetto che ospita l'immagine container.
Limitazioni
- Le immagini container che utilizzano lo schema 1 del manifest dell'immagine V2 non sono idonee.
- Le immagini container criptate con le chiavi di crittografia gestite dal cliente (CMEK) sono idonee per lo streaming di immagini su GKE versione 1.25.3-gke.1000 o successive. Nelle versioni precedenti, GKE scarica queste immagini senza eseguire lo streaming dei dati. Puoi comunque utilizzare CMEK per proteggere i dischi permanenti collegati e i dischi di avvio personalizzati nei cluster che utilizzano lo streaming di immagini.
- Le immagini container con livelli duplicati non sono supportate. GKE scarica queste immagini senza eseguire lo streaming dei dati. Controlla l'immagine del contenitore per livelli vuoti o duplicati.
- Se i tuoi workload leggono molti file in un'immagine durante l'inizializzazione, potresti notare tempi di inizializzazione più lunghi a causa della latenza aggiunta dalle letture dei file remoti.
- Potresti non notare i vantaggi dello streaming delle immagini durante il primo pull di un'immagine idonea. Tuttavia, dopo che Image Streaming memorizza nella cache l'immagine, i futuri pull di immagini su qualsiasi cluster traggono vantaggio da Image Streaming.
- I cluster GKE Standard utilizzano la configurazione a livello di cluster per determinare se abilitare lo streaming di immagini sui nuovi node pool creati utilizzando il provisioning automatico dei nodi. Tuttavia, non puoi utilizzare la separazione dei workload per creare pool di nodi con lo streaming di immagini abilitato quando lo streaming di immagini è disabilitato a livello di cluster.
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:
- Attiva l'API Google Kubernetes Engine. Attiva l'API Google Kubernetes Engine
- Se vuoi utilizzare Google Cloud CLI per questa attività,
installala e poi
inizializzala. Se hai già installato gcloud CLI, scarica l'ultima versione eseguendo
gcloud components update
.
Abilita l'API Container Filesystem.
Abilita lo streaming di immagini sui cluster
Puoi attivare lo streaming di immagini sui cluster standard nuovi o esistenti
utilizzando il flag gcloud CLI --enable-image-streaming
o la
consoleGoogle Cloud . Per impostazione predefinita, i node pool nel cluster ereditano l'impostazione
di streaming delle immagini a livello di cluster. Puoi modificare questo comportamento
attivando o disattivando lo streaming di immagini sui node pool
nel cluster.
Tutti i nuovi cluster Autopilot che eseguono GKE versione 1.25.5-gke.1000 e successive utilizzano lo streaming di immagini per eseguire il pull delle immagini idonee. Per istruzioni, consulta Impostare la versione e il canale di rilascio di un nuovo cluster Autopilot. Le seguenti istruzioni si applicano solo ai cluster GKE Standard.
Su un nuovo cluster
Puoi abilitare lo streaming di immagini sui nuovi cluster utilizzando gcloud CLI o la console Google Cloud .
gcloud
Per creare un nuovo cluster con lo streaming di immagini abilitato, esegui il seguente comando:
gcloud container clusters create CLUSTER_NAME \
--location=CONTROL_PLANE_LOCATION \
--image-type="COS_CONTAINERD" \
--enable-image-streaming
Sostituisci quanto segue:
CLUSTER_NAME
: il nome del nuovo cluster.CONTROL_PLANE_LOCATION
: la posizione di Compute Engine del control plane del tuo cluster. Fornisci una regione per i cluster regionali o una zona per i cluster zonali. Assicurati che la regione o la zona sia la stessa regione o si trovi all'interno della regione multipla del repository Artifact Registry che contiene l'immagine.
Console
- Nella console Google Cloud , vai alla pagina Crea un cluster Kubernetes.
- Nel riquadro di navigazione, in Cluster, fai clic su Funzionalità.
- Nella sezione Altro, seleziona la casella di controllo Abilita streaming di immagini.
- Configura il cluster in base alle esigenze, quindi fai clic su Crea.
Su un cluster esistente
Puoi attivare lo streaming di immagini sui cluster esistenti che soddisfano i requisiti utilizzando gcloud CLI o la console Google Cloud .
gcloud
Per aggiornare un cluster esistente in modo che utilizzi lo streaming di immagini, esegui il seguente comando utilizzando gcloud CLI:
gcloud container clusters update CLUSTER_NAME \
--enable-image-streaming
Console
Vai alla pagina Google Kubernetes Engine nella console Google Cloud .
Fai clic sul nome del cluster da modificare.
Nella pagina Cluster, nella sezione Funzionalità, fai clic su edit accanto a Streaming di immagini.
Nella finestra di dialogo Modifica flusso immagine, seleziona la casella di controllo Abilita flusso immagine.
Fai clic su Salva modifiche.
Dopo aver modificato il cluster, GKE abilita lo streaming di immagini sui node pool esistenti automaticamente per impostazione predefinita. Se hai abilitato o disabilitato esplicitamente lo streaming di immagini su singoli node pool, questi node pool non ereditano le modifiche all'impostazione a livello di cluster.
La modifica dell'impostazione Streaming di immagini rispetta la disponibilità della manutenzione quando viene aggiornata a livello di cluster, ma non a livello di pool di nodi.
Questa modifica richiede la ricreazione dei nodi, il che può causare interruzioni ai carichi di lavoro in esecuzione. Per informazioni dettagliate su questa modifica specifica, trova la riga corrispondente nella tabella Modifiche manuali che ricreano i nodi utilizzando una strategia di upgrade dei nodi e rispettando le norme di manutenzione. Per saperne di più sugli aggiornamenti dei nodi, consulta Pianificare le interruzioni dell'aggiornamento dei nodi.
Verifica che lo streaming di immagini sia abilitato su un cluster
Puoi verificare se lo streaming di immagini è abilitato a livello di cluster utilizzando gcloud CLI o la console Google Cloud .
gcloud
Esegui questo comando:
gcloud container clusters describe CLUSTER_NAME \
--flatten "nodePoolDefaults.nodeConfigDefaults"
L'impostazione è abilitata se l'output è simile al seguente:
gcfsConfig:
enabled: true
...
L'impostazione è disabilitata se l'output è simile al seguente:
gcfsConfig: {}
...
Console
Vai alla pagina Google Kubernetes Engine nella console Google Cloud .
Fai clic sul nome del cluster che vuoi controllare.
Nella pagina Cluster, nella sezione Funzionalità, accanto a Streaming immagini viene indicato se l'impostazione è attiva.
Abilita lo streaming di immagini sui node pool
Per impostazione predefinita, i node pool ereditano l'impostazione dello streaming di immagini a livello di cluster. Puoi attivare o disattivare lo streaming di immagini su pool di nodi specifici utilizzando gcloud CLI.
Su un nuovo pool di nodi
Per creare un nuovo pool di nodi con lo streaming di immagini abilitato, esegui il seguente comando:
gcloud container node-pools create NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--location=CONTROL_PLANE_LOCATION \
--image-type="COS_CONTAINERD" \
--enable-image-streaming
Sostituisci quanto segue:
NODE_POOL_NAME
: il nome del nuovo pool di nodi.CLUSTER_NAME
: il nome del cluster per il node pool.CONTROL_PLANE_LOCATION
: la posizione di Compute Engine del control plane del tuo cluster. Fornisci una regione per i cluster regionali o una zona per i cluster zonali.
In un pool di nodi esistente
Puoi attivare lo streaming di immagini sui pool di nodi esistenti che soddisfano i requisiti.
Per aggiornare un pool di nodi esistente in modo che utilizzi lo streaming di immagini, esegui il seguente comando:
gcloud container node-pools update POOL_NAME \
--cluster=CLUSTER_NAME \
--enable-image-streaming
La modifica dell'impostazione Streaming di immagini rispetta la disponibilità della manutenzione quando viene aggiornata a livello di cluster, ma non a livello di pool di nodi.
Questa modifica richiede la ricreazione dei nodi, il che può causare interruzioni ai carichi di lavoro in esecuzione. Per informazioni dettagliate su questa modifica specifica, trova la riga corrispondente nella tabella Modifiche manuali che ricreano i nodi utilizzando una strategia di upgrade dei nodi senza rispettare le norme di manutenzione. Per saperne di più sugli aggiornamenti dei nodi, consulta Pianificare le interruzioni dell'aggiornamento dei nodi.
Verifica che lo streaming di immagini sia abilitato in un pool di nodi
Controlla se lo streaming di immagini è abilitato per un pool di nodi:
gcloud container node-pools describe POOL_NAME \
--cluster=CLUSTER_NAME \
L'impostazione è abilitata se l'output è simile al seguente:
gcfsConfig:
enabled: true
...
L'impostazione è disabilitata se l'output è simile al seguente:
gcfsConfig: {}
...
Pianificare un carico di lavoro utilizzando lo streaming di immagini
Dopo aver abilitato lo streaming di immagini sul cluster, GKE utilizza automaticamente lo streaming di immagini quando estrae le immagini container idonee da Artifact Registry senza richiedere ulteriore configurazione.
GKE aggiunge l'etichetta cloud.google.com/gke-image-streaming: "true"
ai nodi nei pool di nodi con lo streaming di immagini abilitato. Su GKE
Standard, se attivi o disattivi lo streaming di immagini su pool di nodi specifici
in modo che il cluster abbia un mix di nodi che utilizzano lo streaming di immagini e
nodi che non lo utilizzano, puoi utilizzare i
selettori di nodi
nei tuoi deployment per controllare se GKE pianifica i tuoi
carichi di lavoro sui nodi che utilizzano lo streaming di immagini.
Nell'esempio seguente, pianifichi un deployment che utilizza un'immagine container di grandi dimensioni su un cluster con lo streaming di immagini abilitato. Puoi quindi, se vuoi, confrontare il rendimento con un pull di immagini senza lo streaming di immagini attivato.
Crea un nuovo cluster con lo streaming di immagini abilitato:
gcloud container clusters create CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --enable-image-streaming \ --image-type="COS_CONTAINERD"
Recupera le credenziali per il cluster:
gcloud container clusters get-credentials CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION
Salva il seguente manifest come
frontend-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: frontend spec: replicas: 1 selector: matchLabels: app: guestbook tier: frontend template: metadata: labels: app: guestbook tier: frontend spec: containers: - name: php-redis image: us-docker.pkg.dev/google-samples/containers/gke/gb-frontend:v5 env: - name: GET_HOSTS_FROM value: "dns" resources: requests: cpu: 100m memory: 100Mi ports: - containerPort: 80
L'immagine container
gb-frontend
ha una dimensione di 327 MB.Applica il manifest al cluster:
kubectl apply -f frontend-deployment.yaml
Verifica che GKE abbia creato il deployment:
kubectl get pods -l app=guestbook
L'output è simile al seguente:
NAMESPACE NAME READY STATUS RESTARTS AGE default frontend-64bcc69c4b-pgzgm 1/1 Completed 0 3s
Ottieni il log eventi Kubernetes per visualizzare gli eventi di pull delle immagini:
kubectl get events --all-namespaces
L'output è simile al seguente:
NAMESPACE LAST SEEN TYPE REASON OBJECT MESSAGE default 11m Normal Pulling pod/frontend-64bcc69c4b-pgzgm Pulling image "us-docker.pkg.dev/google-samples/containers/gke/gb-frontend:v5" default 11m Normal Pulled pod/frontend-64bcc69c4b-pgzgm Successfully pulled image "us-docker.pkg.dev/google-samples/containers/gke/gb-frontend:v5" in 1.536908032s default 11m Normal ImageStreaming node/gke-riptide-cluster-default-pool-f1552ec4-0pjv Image us-docker.pkg.dev/google-samples/containers/gke/gb-frontend:v5 is backed by image streaming. ...
In questo output:
- L'evento
Pulled
mostra il tempo impiegato da Image streaming per recuperare l'immagine. L'evento
ImageStreaming
mostra che il nodo utilizza lo streaming di immagini per servire l'immagine container.
- L'evento
Confrontare il rendimento con i recuperi di immagini standard
In questo esempio facoltativo, crei un nuovo cluster con lo streaming di immagini
disattivato e implementi il deployment frontend
per confrontare il rendimento con
lo streaming di immagini.
Crea un nuovo cluster con lo streaming di immagini disattivato:
gcloud container clusters create CLUSTER2_NAME\ --location=CONTROL_PLANE_LOCATION \ --image-type="COS_CONTAINERD"
Recupera le credenziali per il cluster:
gcloud container clusters get-credentials CLUSTER2_NAME \ --location=CONTROL_PLANE_LOCATION
Esegui il deployment di
frontend
dall'esempio precedente:kubectl apply -f frontend-deployment.yaml
Recupera il log eventi di Kubernetes:
kubectl get events --all-namespaces
L'output è simile al seguente:
NAMESPACE LAST SEEN TYPE REASON OBJECT MESSAGE default 87s Normal Pulled pod/frontend-64bcc69c4b-qwmfp Successfully pulled image "us-docker.pkg.dev/google-samples/containers/gke/gb-frontend:v5" in 23.929723476s
Nota il tempo impiegato da GKE per estrarre l'intera immagine. In questo output di esempio, GKE ha impiegato quasi 24 secondi. Con lo streaming di immagini abilitato, GKE ha impiegato solo 1,5 secondi per estrarre i dati dell'immagine necessari per avviare il workload.
Esegui la pulizia
Per evitare addebiti, elimina i cluster che hai creato negli esempi precedenti:
gcloud container clusters delete CLUSTER_NAME CLUSTER2_NAME
Disattivare lo streaming di immagini
Se utilizzi GKE Autopilot, non puoi disattivare lo streaming di immagini sui singoli cluster. Puoi disabilitare l'API Container File System, che disabilita lo streaming di immagini per l'intero progetto.
Se utilizzi cluster GKE Standard, puoi disattivare lo streaming di immagini su singoli cluster o node pool specifici, come descritto nelle sezioni seguenti.
Disabilita lo streaming di immagini su un cluster GKE Standard
Puoi disattivare lo streaming di immagini sui cluster GKE Standard esistenti utilizzando gcloud CLI o la consoleGoogle Cloud .
gcloud
Per disattivare lo streaming di immagini su un cluster esistente, esegui questo comando:
gcloud container clusters update CLUSTER_NAME \
--no-enable-image-streaming
Console
Vai alla pagina Google Kubernetes Engine nella console Google Cloud .
Fai clic sul nome del cluster da modificare.
Nella pagina Cluster, in Funzionalità, fai clic su edit accanto a Streaming immagini.
Nella finestra di dialogo Modifica flusso immagine, deseleziona la casella di controllo Attiva flusso immagine.
Fai clic su Salva modifiche.
La modifica dell'impostazione Streaming di immagini rispetta la disponibilità della manutenzione quando viene aggiornata a livello di cluster, ma non a livello di pool di nodi.
Questa modifica richiede la ricreazione dei nodi, il che può causare interruzioni ai carichi di lavoro in esecuzione. Per informazioni dettagliate su questa modifica specifica, trova la riga corrispondente nella tabella Modifiche manuali che ricreano i nodi utilizzando una strategia di upgrade dei nodi e rispettando le norme di manutenzione. Per saperne di più sugli aggiornamenti dei nodi, consulta Pianificare le interruzioni dell'aggiornamento dei nodi.
Su un nuovo pool di nodi
Per disabilitare lo streaming di immagini durante la creazione di un nuovo pool di nodi, specifica il
flag --no-enable-image-streaming
, come nel comando seguente:
gcloud container node-pools create NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--location=CONTROL_PLANE_LOCATION \
--no-enable-image-streaming
In un pool di nodi esistente
Per disattivare lo streaming di immagini su un pool di nodi esistente, esegui questo comando:
gcloud container node-pools update NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--no-enable-image-streaming
La modifica dell'impostazione Streaming di immagini rispetta la disponibilità della manutenzione quando viene aggiornata a livello di cluster, ma non a livello di pool di nodi.
Questa modifica richiede la ricreazione dei nodi, il che può causare interruzioni ai carichi di lavoro in esecuzione. Per informazioni dettagliate su questa modifica specifica, trova la riga corrispondente nella tabella Modifiche manuali che ricreano i nodi utilizzando una strategia di upgrade dei nodi senza rispettare le norme di manutenzione. Per saperne di più sugli aggiornamenti dei nodi, consulta Pianificare le interruzioni dell'aggiornamento dei nodi.
Riserva di memoria per lo streaming di immagini
GKE riserva risorse di memoria per lo streaming di immagini in aggiunta alla memoria riservata per l'esecuzione dei componenti di sistema del nodo. GKE non riserva risorse CPU aggiuntive per lo streaming di immagini. Nei cluster GKE Standard, questa prenotazione modifica le risorse di memoria che puoi richiedere nei tuoi pod. In GKE Autopilot, GKE gestisce le allocazioni di sistema, quindi non ci sono conseguenze sulla pianificazione dei carichi di lavoro.
Per informazioni dettagliate sulle prenotazioni di memoria effettuate da GKE per i componenti dei nodi, consulta Architettura del cluster standard.
Nei nodi che utilizzano lo streaming di immagini, GKE effettua le seguenti prenotazioni di memoria aggiuntive per le nuove prenotazioni:
- Nessuna memoria aggiuntiva per le macchine con meno di 1 GiB di memoria
- 1% dei primi 4 GiB di memoria
- 0,8% dei successivi 4 GiB di memoria (fino a 8 GiB)
- 0,4% dei successivi 8 GiB di memoria (fino a 16 GiB)
- 0,24% dei successivi 112 GiB di memoria (fino a 128 GiB)
- 0,08% di qualsiasi memoria superiore a 128 GiB
Risoluzione dei problemi
Le sezioni seguenti forniscono consigli per la risoluzione dei problemi relativi allo streaming di immagini. Per suggerimenti sulla risoluzione dei problemi relativi ai pull di immagini standard, consulta Risolvere i problemi relativi ai pull di immagini.
GKE non utilizza il file system Image Streaming
Se il log eventi di GKE non mostra gli eventi di streaming delle immagini,
l'immagine non è supportata dal file system remoto. Se GKE ha estratto in precedenza l'immagine sul nodo, questo è il comportamento previsto perché GKE utilizza la cache locale dell'immagine per le estrazioni successive anziché utilizzare lo streaming di immagini.
Puoi verificarlo cercando Container image IMAGE_NAME already present on machine
nel campo Message
per l'evento Pod Pulled
.
Se non vedi l'evento di streaming delle immagini durante il primo pull dell'immagine sul nodo, assicurati di soddisfare i requisiti per lo streaming delle immagini. Se
soddisfi i requisiti, puoi diagnosticare il problema controllando i log del
servizio di streaming delle immagini (denominato gcfsd
):
Vai alla pagina Esplora log nella console Google Cloud :
Nel campo Query, specifica la seguente query:
logName="projects/PROJECT_ID/logs/gcfsd" resource.labels.cluster_name="CLUSTER_NAME"
Sostituisci quanto segue:
PROJECT_ID
: il nome del progetto.CLUSTER_NAME
: il nome del cluster.
Fai clic su Esegui query.
Puoi anche controllare i log di gcfsd
utilizzando Esplora log:
Vai a Esplora log nella console Google Cloud :
Nel campo Query, specifica la seguente query:
logName="projects/PROJECT_ID/logs/gcfsd"
Sostituisci
PROJECT_ID
con l'ID progetto Google Cloud .
PermissionDenied
Se i log gcfsd
mostrano un messaggio di errore simile al seguente, il nodo
non ha l'ambito API corretto. GKE esegue il pull delle immagini container
per i workload senza utilizzare il flusso di immagini.
level=fatal msg="Failed to create a Container File System client: rpc error:
code = PermissionDenied desc = failed to probe endpoint: rpc error: code = PermissionDenied
desc = Request had insufficient authentication scopes."
Per risolvere il problema, concedi l'ambito corretto al nodo per consentirgli di utilizzare
lo streaming di immagini. Aggiungi l'ambito devstorage.read_only
al cluster o
al pool di nodi, in modo simile al seguente comando:
gcloud container node-pools create NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--location=CONTROL_PLANE_LOCATION \
--image-type="COS_CONTAINERD" \
--enable-image-streaming \
--scopes="https://www.googleapis.com/auth/devstorage.read_only"
FailedPrecondition
Se noti un messaggio di errore con code = FailedPrecondition
, l'immagine
non è stata importata nel file system remoto di Image Streaming.
Potresti notare questo errore se hai provato a utilizzare lo streaming di immagini con un pool di nodil esistente. Se un nodo nel pool di nodi ha già l'immagine container sul disco, GKE utilizza l'immagine locale anziché Image Streaming per ottenere l'immagine.
Per risolvere il problema, prova quanto segue:
- Attendi qualche minuto e prova a eseguire di nuovo il deployment del carico di lavoro.
- Aggiungi nuovi nodi o un nuovo pool di nodi e pianifica il workload su questi nodi.
InvalidArgument
Se noti un messaggio di errore con code=InvalidArgument
, l'immagine container
utilizzata dal tuo workload non è idonea per lo streaming di immagini. Assicurati che l'immagine
soddisfi i requisiti. Se la tua immagine non è su Artifact Registry,
prova a eseguire la migrazione ad Artifact Registry.
backend.FileContent failed
Quando leggi i file contenitore con lo streaming di immagini abilitato, potrebbe essere visualizzato il seguente errore:
level=error msg="backend.FileContent failed" error="rpc error: code = ResourceExhausted desc = Quota exceeded for quota metric 'Content requests per project per region' and limit 'Content requests per project per region per minute per region' of service 'containerfilesystem.googleapis.com' for consumer 'project_number:PROJECT_NUMBER'." layer_id="sha256:1234567890" module=gcfs_backend offset=0 path=etc/passwd size=4096
Questo errore indica che il progetto ha superato la quota necessaria per leggere i file dal servizio del file system del container remoto. Per risolvere il problema, richiedi una modifica della quota per aumentare i seguenti valori di quota:
- Richieste di contenuti per progetto per regione al minuto per regione
- Richieste di contenuti per progetto per regione
GKE scarica l'immagine senza eseguire lo streaming dei dati
Le immagini container che utilizzano le chiavi di crittografia gestite dal cliente (CMEK) sono idonee solo per lo streaming di immagini su GKE versione 1.25.3-gke.1000 o successive. Le immagini container con livelli duplicati non sono idonee per lo streaming di immagini. Per ulteriori informazioni, consulta la sezione Limitazioni.
Controllo di livelli vuoti o duplicati
Per controllare l'immagine container per individuare livelli vuoti o duplicati, esegui questo comando:
docker inspect IMAGE_NAME
Sostituisci IMAGE_NAME
con il nome dell'immagine container.
Nell'output del comando, esamina le voci in "Layers"
.
Se una delle voci corrisponde esattamente al seguente output"sha256"
, l'immagine
del container ha un livello vuoto e non è idonea per lo streaming di immagini.
"Layers": [ ... "sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4", ... ]
Se sono presenti voci duplicate come nell'esempio seguente, l'immagine del container ha livelli duplicati e non è idonea per lo streaming di immagini.
"Layers": [
"sha256:28699c71935fe3ffa56533db44ad93e5a30322639f7be70d5d614e06a1ae6d9b",
...
"sha256:28699c71935fe3ffa56533db44ad93e5a30322639f7be70d5d614e06a1ae6d9b",
...
]
Il comando mv
e le chiamate di sistema renameat2
non riescono sui file symlink
Per i nodi GKE che eseguono la versione 1.25 e successive, quando
lo streaming di immagini è abilitato, il comando mv
e la chiamata di sistema renameat2
potrebbero non riuscire sui file di link simbolici nelle immagini dei container con il messaggio di errore "Nessun
dispositivo o indirizzo". Il problema è causato da una regressione sui kernel Linux recenti.
Queste chiamate di sistema non sono comuni, quindi la maggior parte delle immagini non è interessata da questo problema. Il problema si verifica in genere nelle fasi di inizializzazione del container quando un'applicazione viene preparata per l'esecuzione e lo spostamento dei file. Non è possibile testare l'immagine localmente, pertanto GKE consiglia di utilizzare lo streaming di immagini in ambienti di test per trovare il problema prima che l'immagine venga utilizzata in produzione.
La correzione è disponibile nelle seguenti versioni patch di GKE:
- 1.25: 1.25.14-gke.1351000 e versioni successive
- 1.26: 1.26.9-gke.1345000 e versioni successive
- 1.27: 1.27.6-gke.100 e versioni successive
- 1.28: 1.28.1-gke.1157000 e versioni successive
In alternativa, per attenuare questo problema per i workload interessati, puoi provare a sostituire il
codice che porta alla chiamata di sistema renameat2
. Se non puoi modificare il codice, devi disattivare lo streaming di immagini nel pool di nodi per risolvere il problema.