Questa pagina mostra come utilizzare lo streaming di immagini in Google Kubernetes Engine (GKE) per eseguire il pull delle immagini container inviando i flussi di dati delle immagini in base alle esigenze delle tue applicazioni.
Nuovi cluster Autopilot eseguire GKE versione 1.25.5-gke.1000 e successive usa automaticamente Streaming delle immagini per estrarre immagini idonee. Le istruzioni sono disponibili solo in questa pagina si applicano ai cluster Standard.
Panoramica
Il flusso di immagini è un metodo per estrarre immagini container in cui GKE trasmette i flussi di dati da immagini idonee come richiesto diverse applicazioni. Puoi utilizzare flussi di immagini per consentire l'inizializzazione dei tuoi carichi di lavoro senza attendere il download dell'intera immagine, determinando notevoli miglioramenti nei tempi di inizializzazione. Il tempo di pull ridotto offre vantaggi tra cui:
- Scalabilità automatica più rapida
- Latenza ridotta durante il pull di immagini di grandi dimensioni
- Avvio più rapido dei pod
Con il flusso di immagini, GKE utilizza un file system remoto come per tutti i container che utilizzano immagini container idonee. GKE trasmette i flussi di dati delle immagini dal file system remoto in base alle esigenze per i carichi di lavoro. Senza il flusso di immagini, GKE scarica dell'intera immagine container su ciascun nodo e la utilizza come file system radice per i carichi di lavoro.
Durante il flusso di dati dell'immagine, GKE scarica l'intero container sul disco locale in background e la memorizza nella cache. GKE gestisce quindi 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 flussi di immagini gestisce solo i file richiesti.
Requisiti
Per utilizzare lo streaming di immagini in streaming, devi soddisfare i seguenti requisiti Cluster GKE Autopilot e Standard:
Devi abilitare l'API Container File System.
I nuovi cluster Autopilot devono eseguire la versione GKE 1.25.5-gke.1000 o versioni successive per abilitare automaticamente lo streaming di immagini. Per istruzioni, consulta Imposta la versione e il canale di rilascio di un nuovo cluster Autopilot.
Devi eseguire cluster GKE Standard nuovi ed esistenti versione 1.18.6-gke.4801 o successiva.
Devi utilizzare Container-Optimized OS con containerd immagine del nodo. I nodi Autopilot utilizzano sempre questa immagine del nodo.
Le immagini container devono essere archiviate in Artifact Registry.
Se utilizzi cluster privati, devi abilita l'accesso privato Google sulla subnet per consentire ai tuoi nodi di accedere al servizio flusso di immagini.
Se Controlli di servizio VPC protegge le immagini container e utilizzi Streaming immagine, devi includere anche l'API Image streaming (
containerfilesystem.googleapis.com
) nel perimetro di servizio.Se i nodi GKE nel cluster non utilizzano il valore predefinito devi assicurarti che il tuo account di servizio personalizzato il consumer utilizzo dei servizi (
roles/serviceusage.serviceUsageConsumer
) ruolo IAM nel progetto che ospita l'immagine container.
Limitazioni
- Non puoi usa un secret per eseguire il pull delle immagini container sulle versioni GKE precedenti alla 1.23.5-gke.1900.
- Immagini container che utilizzano File manifest dell'immagine V2, versione 1 dello schema non sono idonei.
- Immagini container criptate con chiavi di crittografia gestite dal cliente (CMEK) sono idonei per il flusso di immagini su GKE versione 1.25.3-gke.1000 o in un secondo momento. Nelle versioni precedenti, GKE scarica questi senza trasmettere i dati in modalità flusso. Puoi comunque usare CMEK per proteggere dischi permanenti collegati e dischi di avvio personalizzati che usano flussi di immagini.
- Le immagini container con livelli duplicati non sono supportate. GKE scarica queste immagini senza trasmettere i dati in modalità flusso. Controlla il container immagine per livelli vuoti o duplicati.
- Il repository Artifact Registry deve trovarsi nello stesso
region [regione]
come nodi GKE o in un
più regioni
che corrisponde alla regione in cui sono in esecuzione i nodi. Ad esempio:
- Se i nodi si trovano in
us-east1
, il flusso di immagini è disponibile per repository nella regioneus-east1
o nell'area multiregionaleus
poiché entrambi GKE e Artifact Registry vengono eseguiti in località di data center Stati Uniti. - Se i nodi si trovano nella regione
northamerica-northeast1
, vengono in esecuzione in Canada. In questo caso, lo streaming di immagini è disponibile solo per i repository nella stessa regione.
- Se i nodi si trovano in
- Se i carichi di lavoro leggono molti file in un'immagine durante l'inizializzazione, potresti notare un aumento dei tempi di inizializzazione a causa della latenza aggiunta legge il file remoto.
- Potresti non notare i vantaggi dello streaming di immagini durante la prima di un'immagine idonea. Tuttavia, dopo che il flusso di immagini ha memorizzato nella cache i futuri pull di immagini su qualsiasi cluster traggono vantaggio dal flusso di immagini.
- I cluster GKE Standard utilizzano la configurazione a livello di cluster per determinare se per abilitare il flusso di immagini sui nuovi pool di nodi creati utilizzando provisioning automatico dei nodi. Tuttavia, non puoi utilizzare separazione dei carichi di lavoro per creare pool di nodi con il flusso di immagini abilitato quando Il flusso di immagini è disabilitato a livello di cluster.
- Le funzionalità dei file Linux come
CAP_NET_RAW
sono supportate con Flusso di immagini in GKE versione 1.22.6-gke.300 e successive. Per le versioni precedenti di GKE, queste funzionalità non sono disponibile quando il file immagine viene riprodotto in streaming o quando l'immagine viene salvata disco locale. Per evitare potenziali interruzioni, non utilizzare lo streaming di immagini per i container con queste funzionalità nelle versioni GKE precedenti a 1.22.6-gke.300. Se il container si basa su funzionalità dei file Linux, potrebbero non iniziare con errori di autorizzazione negata durante l'esecuzione con Flusso delle immagini abilitato.
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti attività:
- Attiva l'API Google Kubernetes Engine. Abilita l'API Google Kubernetes Engine
- Se vuoi utilizzare Google Cloud CLI per questa attività,
install e poi
inizializzare
con gcloud CLI. Se hai già installato gcloud CLI, scarica la versione più recente
eseguendo
gcloud components update
.
Attiva l'API Container File System.
Abilita flusso di immagini sui cluster
Puoi abilitare il flusso di immagini su cluster standard nuovi o esistenti
mediante il flag --enable-image-streaming
della gcloud CLI oppure
nella console Google Cloud. Per impostazione predefinita, i pool di nodi nel cluster ereditano
Impostazione del flusso di immagini a livello di cluster. Puoi modificare questo comportamento
di
abilitazione o disabilitazione del flusso di immagini sui pool di nodi
nel cluster.
Tutti nuovi Pilota automatico i cluster che eseguono GKE versione 1.25.5-gke.1000 e successive usano Streaming delle immagini per estrarre immagini idonee. Per istruzioni, consulta Imposta la versione e il canale di rilascio di un nuovo cluster Autopilot. Le seguenti istruzioni si applicano solo a GKE Standard cluster.
In un nuovo cluster
Puoi abilitare i flussi di immagini su nuovi cluster utilizzando gcloud CLI o la console Google Cloud.
gcloud
Per creare un nuovo cluster con Flusso di immagini abilitato, esegui questo comando: :
gcloud container clusters create CLUSTER_NAME \
--zone=COMPUTE_ZONE \
--image-type="COS_CONTAINERD" \
--enable-image-streaming
Sostituisci quanto segue:
CLUSTER_NAME
: il nome del nuovo cluster.COMPUTE_ZONE
: la zona di Compute Engine per il tuo nuovo cluster. Per i cluster a livello di regione, utilizza--region=COMPUTE_REGION
. Assicurati che la zona o la regione siano nella stessa regione o che si trovino all'interno le regioni multiple del repository Artifact Registry che contiene l'immagine.
Console
Vai alla pagina Google Kubernetes Engine nella console Google Cloud.
Fai clic su add_box Crea.
Nella sezione GKE Standard, fai clic su Configura.
Nel riquadro di navigazione, in Cluster, fai clic su Funzionalità.
Nella sezione Altro, seleziona la casella di controllo Abilita flusso di immagini.
Configura il cluster in base alle tue esigenze, quindi fai clic su Crea.
Su un cluster esistente
Puoi abilitare flussi di immagini su cluster esistenti che soddisfano i requisiti utilizzando gcloud CLI o la console Google Cloud.
gcloud
Per aggiornare un cluster esistente per utilizzare Flusso di immagini, esegui questo 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 sezione Funzionalità della pagina Cluster, fai clic su edit accanto a Streaming di immagini.
Nella finestra di dialogo Modifica streaming immagine, seleziona Attiva Flusso di immagini.
Fai clic su Salva modifiche.
Dopo aver modificato il cluster, GKE abilita il flusso di immagini automaticamente i pool di nodi esistenti. Se hai abilitato o esplicitamente disabilitato di flussi di immagini su singoli pool di nodi, non ereditare le modifiche all'impostazione a livello di cluster.
Verificare che il flusso delle immagini sia abilitato su un cluster
Puoi verificare se il flusso 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 sezione Funzionalità della pagina Cluster, accanto a Streaming di immagini indica se l'impostazione è attiva.
Abilita flusso di immagini sui pool di nodi
Per impostazione predefinita, i pool di nodi ereditano l'impostazione Flusso di immagini a livello di cluster livello. Puoi abilitare o disabilitare il flusso di immagini su pool di nodi specifici utilizzando con gcloud CLI.
Su un nuovo pool di nodi
Per creare un nuovo pool di nodi con Flusso di immagini abilitato, esegui questo comando: :
gcloud container node-pools create NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--zone=COMPUTE_ZONE \
--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 nodo piscina.COMPUTE_ZONE
: la zona Compute Engine in un cluster Kubernetes. Per i cluster a livello di regione, utilizza--region=COMPUTE_REGION
.
Su un pool di nodi esistente
Puoi abilitare il flusso di immagini su pool di nodi esistenti che soddisfano i requisiti.
Per aggiornare un pool di nodi esistente in modo che utilizzi lo streaming di immagini, esegui questo comando: :
gcloud container node-pools update POOL_NAME \
--cluster=CLUSTER_NAME \
--enable-image-streaming
Verifica che il flusso delle immagini sia abilitato su un pool di nodi
Controlla se il flusso 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: {}
...
Pianifica un carico di lavoro utilizzando il flusso di immagini
Dopo aver abilitato Flusso di immagini sul cluster, GKE utilizza automaticamente il flusso di immagini durante il pull dei file idonei immagini container da Artifact Registry senza bisogno di ulteriore configurazione.
GKE aggiunge l'etichetta cloud.google.com/gke-image-streaming: "true"
ai nodi in pool di nodi con il flusso di immagini abilitato. In GKE
Standard, se abiliti o disattivi Flusso di immagini su un nodo specifico
in modo che il cluster abbia una combinazione di nodi che utilizzano flussi di immagini e
nodi che non lo fanno, puoi usare
selettori di nodi
nei tuoi deployment per controllare se GKE pianifica
carichi di lavoro sui nodi che usano flussi di immagini.
Nell'esempio seguente, pianifichi un deployment che utilizza un'immagine container di grandi dimensioni in un cluster con Flusso di immagini abilitato. Successivamente, puoi confrontare il rendimento del pull di un'immagine senza che sia abilitato il flusso delle immagini.
Crea un nuovo cluster con Flusso di immagini abilitato:
gcloud container clusters create CLUSTER_NAME \ --zone=COMPUTE_ZONE \ --enable-image-streaming \ --image-type="COS_CONTAINERD"
Ottieni le credenziali per il cluster:
gcloud container clusters get-credentials CLUSTER_NAME \ --zone=COMPUTE_ZONE
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
Scarica il log eventi di Kubernetes per vedere gli eventi 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 necessario per il pull del flusso di immagini dell'immagine. L'evento
ImageStreaming
mostra che il nodo utilizza Streaming di immagini per per pubblicare l'immagine container.
- L'evento
Confronta il rendimento con le estrazioni di immagini standard
In questo esempio facoltativo, creerai un nuovo cluster con Flusso di immagini
disabilitato ed esegui il deployment del deployment frontend
per confrontare le prestazioni
Flusso immagine.
Crea un nuovo cluster con Flusso di immagini disabilitato:
gcloud container clusters create CLUSTER2_NAME\ --zone=COMPUTE_ZONE \ --image-type="COS_CONTAINERD"
Ottieni le credenziali per il cluster:
gcloud container clusters get-credentials CLUSTER2_NAME \ --zone=COMPUTE_ZONE
Esegui il deployment del deployment
frontend
dall'esempio precedente:kubectl apply -f frontend-deployment.yaml
Scarica 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 eseguire il pull dell'intera immagine. In questo di esempio, GKE aveva bisogno di quasi 24 secondi. Con flusso di immagini abilitato, GKE ha avuto bisogno di solo 1,5 secondi per eseguire il pull dell'immagine necessari per avviare il carico di lavoro.
Esegui la pulizia
Per evitare addebiti, elimina i cluster che hai creato negli esempi precedenti:
gcloud container clusters delete CLUSTER_NAME CLUSTER2_NAME
Disattiva flusso immagine
Se usi GKE Autopilot, non puoi disabilitare Flusso di immagini su singoli cluster. Puoi disabilitare il file container API di sistema, che disabilita il flusso delle immagini per l'intero progetto.
Se utilizzi cluster GKE Standard, puoi disabilitare Flusso di immagini su singoli cluster o pool di nodi specifici, come descritto nelle sezioni seguenti.
Disabilita flusso di immagini su un cluster GKE Standard
Puoi disabilitare il flusso di immagini su GKE esistente Cluster standard mediante gcloud CLI o nella console Google Cloud.
gcloud
Per disabilitare il flusso di immagini in 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 di immagini.
Nella finestra di dialogo Modifica streaming immagine, deseleziona Attiva Flusso di immagini.
Fai clic su Salva modifiche.
Su un nuovo pool di nodi
Per disabilitare il flusso di immagini durante la creazione di un nuovo pool di nodi, specifica
--no-enable-image-streaming
, come nel seguente comando:
gcloud container node-pools create NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--zone=COMPUTE_ZONE \
--no-enable-image-streaming
Su un pool di nodi esistente
Per disabilitare il flusso 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
Prenotazione di memoria per il flusso di immagini
GKE prenota risorse di memoria per i flussi di immagini oltre a alla memoria riservata all'esecuzione dei componenti del sistema dei nodi. GKE non riserva risorse di CPU aggiuntive Flusso immagine. Nei cluster GKE Standard, modifica le risorse di memoria disponibili per la richiesta nei tuoi pod. In GKE Autopilot, le allocazioni del sistema vengono gestite, pertanto non c'è alcun impatto sulla pianificazione dei carichi di lavoro.
Per maggiori dettagli sulle prenotazioni di memoria effettuate da GKE per i nodi vedi Architettura dei cluster standard.
Nei nodi che utilizzano flussi di immagini, GKE esegue quanto segue 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% degli 8 GiB di memoria successivi (fino a 16 GiB)
- 0,24% dei successivi 112 GiB di memoria (fino a 128 GiB)
- 0,08% di memoria superiore a 128 GiB
Risoluzione dei problemi
GKE non utilizza il file system di flussi di immagini
Se il log eventi di GKE non mostra gli eventi di flussi di immagini,
l'immagine non è supportata dal file system remoto. Se GKE in precedenza
ha eseguito il pull dell'immagine sul nodo, questo è un comportamento previsto perché GKE
utilizza la cache locale dell'immagine per i pull successivi invece di usare lo streaming delle immagini.
Puoi verificarlo cercando Container image IMAGE_NAME already present on machine
nel campo Message
per l'evento Pulled
del pod.
Se non vedi l'evento Flusso immagine durante il primo pull on dell'immagine
assicurati di soddisfare i requisiti per il flusso di immagini. Se
soddisfare i requisiti, puoi eseguire la diagnosi del problema controllando i log delle
Servizio di streaming di 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 tuo 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 il tuo progetto Google Cloud ID.
PermissionDenied
Se i log gcfsd
visualizzano un messaggio di errore simile al seguente,
non dispone dell'ambito API corretto. GKE esegue il pull delle immagini container
per carichi di lavoro senza utilizzare flussi 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."
Puoi risolvere il problema concedendo al nodo l'ambito corretto per consentirne l'utilizzo
Flusso immagine. Aggiungi l'ambito devstorage.read_only
al cluster oppure
un pool di nodi simile al seguente comando:
gcloud container node-pools create NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--zone=COMPUTE_ZONE \
--image-type="COS_CONTAINERD" \
--enable-image-streaming \
--scope="https://www.googleapis.com/auth/devstorage.read_only"
FailedPrecondition
Se visualizzi un messaggio di errore con code = FailedPrecondition
, l'immagine
non è stato importato nel file system remoto streaming immagini.
Potresti notare questo errore se provi a utilizzare lo streaming di immagini con un pool di nodi esistente. Se un nodo nel pool di nodi include già l'immagine container su disco, GKE usa l'immagine locale Flusso di immagini per ottenere l'immagine.
Per risolvere il problema, prova a procedere nel seguente modo:
- Attendi alcuni minuti e riprova a eseguire il deployment del carico di lavoro.
- Aggiungi nuovi nodi o un nuovo pool di nodi e pianifica il carico di lavoro su quei nodi.
InvalidArgument
Se visualizzi un messaggio di errore con code=InvalidArgument
, l'immagine container
utilizzato dal carico di lavoro non è idoneo per il flusso di immagini. Assicurati che l'immagine
che soddisfi i requisiti. Se l'immagine non è in Artifact Registry,
prova a eseguire la migrazione ad Artifact Registry.
backend.FileContent failed
Potrebbe essere visualizzato il seguente errore durante la lettura dei file contenitore con Streaming delle immagini abilitato:
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 richiesta per leggere i file da il servizio di file system del container remoto. Per risolvere il problema, aumenta le quote seguenti:
- Richieste di contenuti per progetto per regione al minuto per regione
- Richieste di contenuti per progetto per regione
GKE scarica l'immagine senza trasmettere i dati in modalità flusso
le immagini container che utilizzano chiavi di crittografia gestite dal cliente (CMEK) sono idonei solo per il flusso di immagini sulla versione GKE 1.25.3-gke.1000 o versioni successive. Le immagini container con livelli duplicati non sono idoneo per lo streaming di immagini. Consulta le Limitazioni per ulteriori informazioni.
Controllo di livelli vuoti o duplicati in corso...
Per verificare la presenza di livelli vuoti o duplicati nell'immagine container, esegui il comando seguente comando:
docker inspect IMAGE_NAME
Sostituisci IMAGE_NAME
con il nome dell'immagine container.
Nell'output del comando, controlla le voci sotto "Layers"
.
Se una delle voci corrisponde esattamente al seguente output di "sha256"
,
l'immagine 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, il container l'immagine ha livelli duplicati e non è idonea per lo streaming di immagini.
"Layers": [
"sha256:28699c71935fe3ffa56533db44ad93e5a30322639f7be70d5d614e06a1ae6d9b",
...
"sha256:28699c71935fe3ffa56533db44ad93e5a30322639f7be70d5d614e06a1ae6d9b",
...
]
Il comando mv
e renameat2
chiamate di sistema hanno esito negativo nei file link simbolici
Per i nodi GKE che eseguono la versione 1.25 e successive, quando
Flusso di immagini abilitato, comando mv
e chiamata di sistema renameat2
potrebbe avere esito negativo sui file di link simbolici nelle immagini container con il messaggio di errore
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 è influenzata questo problema. Il problema si verifica in genere nelle fasi di inizializzazione dei container quando un'applicazione è in fase di preparazione per l'esecuzione e lo spostamento tra i file. Non è possibile testare l'immagine in locale, per cui GKE consiglia di usare Flusso di immagini negli ambienti di test per rilevare il problema prima dell'utilizzo dell'immagine in produzione.
La correzione è disponibile nelle seguenti versioni di patch 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 limitare il problema a eventuali carichi di lavoro interessati, puoi provare a sostituire il
che genera la chiamata di sistema renameat2
. Se non puoi modificare il codice,
deve disabilitare il flusso di immagini sul pool di nodi per mitigare
problema.