Questa pagina mostra come migliorare la latenza di avvio del carico di lavoro utilizzando avvia i dischi in Google Kubernetes Engine (GKE) precaricare i dati o le immagini container su nuovi nodi. Ciò consente ai carichi di lavoro di raggiungere un avvio a freddo rapido e per migliorare l'utilizzo complessivo delle risorse di cui è stato eseguito il provisioning.
Questa pagina presuppone la conoscenza di Google Cloud, Kubernetes, container, YAML, il runtime containerd e Google Cloud CLI.
Panoramica
A partire da GKE versione 1.28.3-gke.1067000 in Standard di GKE e nella versione GKE 1.30.1-gke.1329000 Autopilot, puoi configurare il pool di nodi con un avvio secondario i dischi permanenti. Puoi capire GKE per eseguire il provisioning dei nodi e precaricarli con dati, ad esempio un modello di machine learning o un'immagine container. Utilizzare le immagini container precaricate o i dati in un disco secondario presentano i seguenti vantaggi per i carichi di lavoro:
- Latenza ridotta durante il pull di immagini container di grandi dimensioni o il download di dati
- Scalabilità automatica più rapida
- Ripristino più rapido dalle interruzioni come eventi di manutenzione ed errori di sistema.
Le sezioni seguenti descrivono come configurare il disco di avvio secondario GKE Autopilot e Standard.
Come funzionano i dischi di avvio secondari
Il carico di lavoro può avviarsi più rapidamente utilizzando il container precaricato su dischi di avvio secondari. I dischi di avvio secondari hanno le seguenti caratteristiche:
- I dischi di avvio secondari sono Dischi permanenti supportati da archiviazione a blocchi distribuita. Se l'immagine disco è già in uso nella zona, l'ora di creazione di tutto il disco successivo dalla stessa immagine disco sarà inferiore.
- Il tipo di disco di avvio secondario è uguale al disco di avvio del nodo.
- La dimensione del disco di avvio secondario viene decisa in base alle dimensioni dell'immagine del disco.
L'aggiunta di dischi di avvio secondari ai pool di nodi non aumenta per eseguire il provisioning. GKE esegue il provisioning dei dischi di avvio secondari l'immagine disco in parallelo al processo di provisioning dei nodi.
Per supportare le immagini container precaricate, GKE estende la containerd con plug-in che leggono la classe da dischi di avvio secondari. Le immagini container vengono riutilizzate strati di base: ti consigliamo di precaricare i livelli di base grandi nel mentre i livelli superiori più piccoli possono essere estratti registro di sistema.
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.
Requisiti
Per l'utilizzo del disco di avvio secondario si applicano i seguenti requisiti:
- I cluster stanno eseguendo la versione GKE 1.28.3-gke.1067000 in GKE Standard o versione 1.30.1-gke.1329000 in GKE Autopilot.
- Quando modifichi l'immagine disco, crea un nuovo pool di nodi. Aggiornamento l'immagine disco sui nodi esistenti non è supportata.
- Configurare Flusso di immagini per utilizzare la funzionalità del disco di avvio secondario.
- Utilizza Container-Optimized OS con un nodo containerd dell'immagine. I nodi Autopilot utilizzano questa immagine del nodo per impostazione predefinita.
- Prepara l'immagine disco con dati pronti in fase di creazione o con dati precaricati immagini container. Assicurati che il cluster abbia accesso all'immagine disco da caricare tra i nodi. Consigliamo di automatizzare l'immagine disco in una soluzione CI/CD una pipeline o un blocco note personalizzato.
prepara il disco di avvio secondario
Per preparare il disco di avvio secondario, scegli la scheda Immagini per il precaricamento immagini container o scegli la scheda Dati per precaricare i dati, segui queste istruzioni:
Immagini
GKE offre uno strumento chiamato
gke-disk-image-builder
per creare una macchina virtuale (VM) ed eseguire il pull delle immagini container su un disco, quindi creare un disco
dell'immagine da quel disco.
Per creare un'immagine disco con più immagini container precaricate, completa la seguenti passaggi:
- Crea un bucket Cloud Storage
per archiviare i log di esecuzione di
gke-disk-image-builder
. - Crea un'immagine disco con
gke-disk-image-builder
.
go run ./cli \
--project-name=PROJECT_ID \
--image-name=DISK_IMAGE_NAME \
--zone=LOCATION \
--gcs-path=gs://LOG_BUCKET_NAME \
--disk-size-gb=10 \
--container-image=docker.io/library/python:latest \
--container-image=docker.io/library/nginx:latest
Sostituisci quanto segue:
- PROJECT_ID: il nome del tuo progetto Google Cloud.
- DISK_IMAGE_NAME: il nome dell'immagine del
disco. Ad esempio:
nginx-python-image
. - LOCATION: la località del cluster.
- LOG_BUCKET_NAME: il nome dell'istanza di Cloud Storage
per archiviare i log di esecuzione. Ad esempio,
gke-secondary-disk-image-logs/
.
Quando crei un'immagine disco con
gke-disk-image-builder
,
Google Cloud crea più risorse per completare il processo (ad
ad esempio un'istanza VM, un disco temporaneo e un disco permanente). Dopo la sua esecuzione,
il generatore di immagini esegue la pulizia di tutte le risorse, tranne dell'immagine disco
è stato creato.
Dati
Crea un'immagine disco personalizzata come origine dati completando quanto segue passaggi:
Configura il disco di avvio secondario
Puoi configurare il disco di avvio secondario in un cluster GKE Autopilot o Standard. Ti consigliamo di utilizzare una Cluster Autopilot per un'esperienza Kubernetes completamente gestita. Per scegliere la modalità operativa GKE più adatta ai tuoi carichi di lavoro, consulta Scegliere una modalità operativa di GKE.
Usa GKE Autopilot
In questa sezione creerai una lista consentita di immagini disco per consentirne l'utilizzo in un GKE esistente Autopilot. Quindi, modifica il selettore dei nodi pod in modo da utilizzare una disco di avvio secondario.
Consenti l'utilizzo di immagini disco nel tuo progetto
In questa sezione creerai un GCPResourceAllowlist
per consentire a GKE
per creare nodi con dischi di avvio secondari dalle immagini disco
progetto Google Cloud.
Salva il seguente manifest come
allowlist-disk.yaml
:apiVersion: "node.gke.io/v1" kind: GCPResourceAllowlist metadata: name: gke-secondary-boot-disk-allowlist spec: allowedResourcePatterns: - "projects/PROJECT_ID/global/images/.*"
Sostituisci PROJECT_ID con il tuo ID progetto per ospitare il l'immagine disco.
Applica il manifest:
kubectl apply -f allowlist-disk.yaml
GKE crea nodi con dischi di avvio secondari da tutte le immagini disco nel progetto.
Aggiorna il selettore di nodi pod in modo che utilizzi un disco di avvio secondario
In questa sezione, modificare le specifiche del pod in modo che GKE crei i nodi con disco di avvio secondario.
Aggiungi un
nodeSelector
al modello di pod:nodeSelector: cloud.google.com.node-restriction.kubernetes.io/gke-secondary-boot-disk-DISK_IMAGE_NAME=CONTAINER_IMAGE_CACHE.PROJECT_ID
Sostituisci quanto segue:
- DISK_IMAGE_NAME: il nome dell'immagine disco.
- PROJECT_ID: l'ID progetto per ospitare l'immagine disco.
Usa il comando
kubectl apply
per applicare la specifica Kubernetes con il modello di pod.Verifica che la cache del disco di avvio secondario sia in uso:
kubectl get events --all-namespaces
L'output è simile al seguente:
75s Normal SecondaryDiskCachin node/gke-pd-cache-demo-default-pool-75e78709-zjfm Image gcr.io/k8s-staging-jobsejt/pytorch-mnist:latest is backed by secondary disk cache
Controlla la latenza del pull delle immagini:
kubectl describe pod POD_NAME
Sostituisci POD_NAME con il nome del pod.
L'output è simile al seguente:
… Normal Pulled 15m kubelet Successfully pulled image "docker.io/library/nginx:latest" in 0.879149587s …
La latenza del pull dell'immagine prevista per l'immagine del container memorizzata nella cache deve essere notevolmente ridotto, indipendentemente dalle dimensioni dell'immagine.
Utilizza GKE Standard
Per creare un cluster GKE Standard e un pool di nodi, completa le seguenti istruzioni, scegliendo la scheda Immagini o Dati in base a se vuoi precaricare le immagini container o i dati disco di avvio:
Immagini
Puoi configurare un disco di avvio secondario utilizzando Google Cloud CLI oppure Terraform:
gcloud
Crea un cluster GKE Standard con immagine Streaming abilitato:
gcloud container clusters create CLUSTER_NAME \ --location=LOCATION \ --cluster-version=VERSION \ --enable-image-streaming
Sostituisci quanto segue:
- CLUSTER_NAME: il nome del tuo cluster.
- LOCATION: la località del cluster.
- VERSION: la versione GKE da utilizzare. La
La versione GKE deve essere
1.28.3-gke.106700
o successiva.
Crea un pool di nodi con un disco di avvio secondario nello stesso progetto:
gcloud container node-pools create NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --location LOCATION \ --enable-image-streaming \ --secondary-boot-disk=disk-image=global/images/DISK_IMAGE_NAME,mode=CONTAINER_IMAGE_CACHE
Sostituisci quanto segue:
- NODE_POOL_NAME: il nome del pool di nodi.
- CLUSTER_NAME: il nome del cluster esistente.
- LOCATION: la zona o le zone di computing separate da della virgola del cluster.
- DISK_IMAGE_NAME: il nome dell'immagine disco.
Per creare un pool di nodi con un disco di avvio secondario dall'immagine disco in un altro progetto, completa i passaggi descritti in Utilizzare un disco di avvio secondario in un altro progetto.
Aggiungi un
nodeSelector
al modello di pod:nodeSelector: cloud.google.com/gke-nodepool: NODE_POOL_NAME
Verifica che la cache del disco di avvio secondario sia in uso:
kubectl get events --all-namespaces
L'output è simile al seguente:
75s Normal SecondaryDiskCachin node/gke-pd-cache-demo-default-pool-75e78709-zjfm Image gcr.io/k8s-staging-jobsejt/pytorch-mnist:latest is backed by secondary disk cache
Controlla la latenza del pull delle immagini eseguendo questo comando:
kubectl describe pod POD_NAME
Sostituisci
POD_NAME
con il nome del pod.L'output è simile al seguente:
… Normal Pulled 15m kubelet Successfully pulled image "docker.io/library/nginx:latest" in 0.879149587s …
La latenza del pull dell'immagine prevista per l'immagine del container memorizzata nella cache deve essere per non più di qualche secondo, a prescindere dalle dimensioni dell'immagine.
Terraform
Per creare un cluster con il pool di nodi predefinito utilizzando Terraform, consulta le nell'esempio seguente:
Crea un pool di nodi con un disco di avvio secondario nello stesso progetto:
Per saperne di più sull'utilizzo di Terraform, consulta Supporto Terraform per GKE.
Aggiungi un
nodeSelector
al modello di pod:nodeSelector: cloud.google.com/gke-nodepool: NODE_POOL_NAME
Verifica che la cache del disco di avvio secondario sia in uso:
kubectl get events --all-namespaces
L'output è simile al seguente:
75s Normal SecondaryDiskCachin node/gke-pd-cache-demo-default-pool-75e78709-zjfm Image gcr.io/k8s-staging-jobsejt/pytorch-mnist:latest is backed by secondary disk cache
Controlla la latenza del pull delle immagini eseguendo questo comando:
kubectl describe pod POD_NAME
Sostituisci POD_NAME con il nome del pod.
L'output è simile al seguente:
… Normal Pulled 15m kubelet Successfully pulled image "docker.io/library/nginx:latest" in 0.879149587s …
La latenza prevista per il pull dell'immagine per l'immagine del container memorizzata nella cache non deve essere qualche secondo, a prescindere dalle dimensioni dell'immagine.
Per scoprire di più sull'utilizzo di Terraform, consulta Supporto Terraform per GKE.
Dati
Puoi configurare un disco di avvio secondario e precaricare i dati utilizzando il comando Google Cloud CLI o Terraform:
gcloud
Crea un cluster GKE Standard con immagine Streaming abilitato:
gcloud container clusters create CLUSTER_NAME \ --location=LOCATION \ --cluster-version=VERSION \ --enable-image-streaming
Sostituisci quanto segue:
- CLUSTER_NAME: il nome del tuo cluster.
- LOCATION: la località del cluster.
- VERSION: la versione GKE da utilizzare. La La versione di GKE deve essere 1.28.3-gke.106700 o successiva.
Crea un pool di nodi con un disco di avvio secondario utilizzando il comando
--secondary-boot-disk
flag:gcloud container node-pools create NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --location LOCATION \ --enable-image-streaming \ --secondary-boot-disk=disk-image=global/images/DISK_IMAGE_NAME
Sostituisci quanto segue:
- NODE_POOL_NAME: il nome del pool di nodi.
- CLUSTER_NAME: il nome del cluster esistente.
- LOCATION: la zona o le zone di computing separate da della virgola del cluster.
- DISK_IMAGE_NAME: il nome dell'immagine disco.
Per creare un pool di nodi con un disco di avvio secondario dall'immagine disco in un altro progetto, completa i passaggi descritti in Utilizzare un disco di avvio secondario in un altro progetto.
GKE crea un pool di nodi in cui ogni nodo ha un disco secondario con dati precaricati. GKE collega e monta il disco di avvio secondario sul nodo.
Facoltativamente, puoi montare l'immagine del disco secondario nei container di pod utilizzando un montaggio del volume hostPath. Utilizza il manifest seguente per definire un pod e utilizzare un montaggio del volume hostPath per precaricare il disco dati container:
apiVersion: v1 kind: Pod metadata: name: pod-name spec: containers: ... volumeMounts: - mountPath: /usr/local/data_path_sbd name: data_path_sbd ... volumes: - name: data_path_sbd hostPath: path: /mnt/disks/gke-secondary-disks/gke-DISK_IMAGE_NAME-disk
Sostituisci DISK_IMAGE_NAME con il nome di dell'immagine disco.
Terraform
Per creare un cluster con il pool di nodi predefinito utilizzando Terraform, consulta le nell'esempio seguente:
Crea un pool di nodi con un disco di avvio secondario nello stesso progetto:
Per saperne di più sull'utilizzo di Terraform, consulta Supporto Terraform per GKE.
Facoltativamente, puoi montare l'immagine del disco secondario nei container di pod utilizzando un montaggio del volume hostPath. Utilizza il manifest seguente per definire un pod e utilizzare un montaggio del volume hostPath per precaricare il disco dati container:
apiVersion: v1 kind: Pod metadata: name: pod-name spec: containers: ... volumeMounts: - mountPath: /usr/local/data_path_sbd name: data_path_sbd ... volumes: - name: data_path_sbd hostPath: path: /mnt/disks/gke-secondary-disks/gke-DISK_IMAGE_NAME-disk
Sostituisci DISK_IMAGE_NAME con il nome dell'immagine disco.
Scalabilità automatica dei cluster con dischi di avvio secondari
Puoi creare un pool di nodi e configurare la scalabilità automatica del cluster con un avvio secondario il disco utilizzando Google Cloud CLI:
gcloud container node-pools create NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--location LOCATION \
--enable-image-streaming \
--secondary-boot-disk=disk-image=global/images/DISK_IMAGE_NAME,mode=CONTAINER_IMAGE_CACHE \
--enable-autoscaling \
--num-nodes NUM_NODES \
--min-nodes MIN_NODES \
--max-nodes MAX_NODES
Sostituisci quanto segue:
- NODE_POOL_NAME: il nome del pool di nodi.
- CLUSTER_NAME: il nome del cluster esistente.
- LOCATION: la zona o le zone di computing separate da della virgola del cluster.
- DISK_IMAGE_NAME: il nome dell'immagine disco.
- MIN_NODES: il numero minimo di nodi da
la scalabilità automatica per il pool di nodi specificato per zona. Per specificare
numero minimo di nodi per l'intero pool di nodi in GKE
1.24 e versioni successive, utilizza
--total-min-nodes
. Le bandiere--total-min-nodes
e--total-max-nodes
si escludono a vicenda con i flag--min-nodes
e--max-nodes
. - MAX_NODES: il numero massimo di nodi da
la scalabilità automatica per il pool di nodi specificato per zona. Per specificare
numero massimo di nodi per l'intero pool di nodi in GKE
1.24 e versioni successive, utilizza
--total-max-nodes
. Le bandiere--total-min-nodes
e--total-max-nodes
si escludono a vicenda con i flag--min-nodes
e--max-nodes
.
Provisioning automatico dei nodi con dischi di avvio secondari
In GKE 1.30.1-gke.1329000 e versioni successive, puoi configurare il provisioning automatico dei nodi crea ed elimina automaticamente i pool di nodi per soddisfare le esigenze di risorse carichi di lavoro con scale out impegnativi.
Crea una risorsa personalizzata nella lista consentita di immagini disco per il disco di avvio secondario per Provisioning automatico dei nodi GKE simile al seguente:
apiVersion: "node.gke.io/v1" kind: GCPResourceAllowlist metadata: name: gke-secondary-boot-disk-allowlist spec: allowedResourcePatterns: - "projects/<PROJECT_ID>/global/images/.*"
Sostituisci PROJECT_ID con il tuo ID progetto per ospitare l'immagine disco.
Esegui il deployment della risorsa personalizzata della lista consentita nel cluster, quindi esegui questo comando:
kubectl apply -f ALLOWLIST_FILE
Sostituisci ALLOWLIST_FILE con il nome del file manifest.
Aggiorna il selettore dei nodi pod per utilizzare il disco di avvio secondario:
nodeSelector: cloud.google.com.node-restriction.kubernetes.io/gke-secondary-boot-disk-DISK_IMAGE_NAME=CONTAINER_IMAGE_CACHE.PROJECT_ID
Sostituisci quanto segue:
- DISK_IMAGE_NAME: il nome dell'immagine disco.
- PROJECT_ID: l'ID progetto per ospitare l'immagine disco.
Usa un disco di avvio secondario in un altro progetto
Quando crei un pool di nodi con un disco di avvio secondario, puoi indicare a GKE di utilizzare l'immagine disco in una
in un progetto diverso usando il flag --secondary-boot-disk
.
Crea un pool di nodi con un disco di avvio secondario dall'immagine disco in un in un progetto diverso usando il flag
--secondary-boot-disk
. Ad esempio:gcloud beta container node-pools create NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --location LOCATION \ --enable-image-streaming \ --secondary-boot-disk=disk-image=projects/IMAGE_PROJECT_ID/global/images/DISK_IMAGE_NAME,mode=CONTAINER_IMAGE_CACHE
Sostituisci quanto segue:
- DISK_IMAGE_NAME: il nome dell'immagine disco.
- IMAGE_PROJECT_ID: il nome del progetto che a cui appartiene l'immagine disco.
GKE crea un pool di nodi in cui ogni nodo ha un disco secondario con dati precaricati. Questa operazione collega e monta il disco di avvio secondario nel nodo.
Concedi l'accesso alle immagini disco che appartengono a un altro progetto aggiungendo "Utente immagine Compute" ruoli per gli account di servizio del cluster:
- Account di servizio di computing predefinito: CLUSTER_PROJECT_NUMBER@cloudservices.gserviceaccount.com
- Account di servizio GKE: service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com
gcloud projects add-iam-policy-binding IMAGE_PROJECT_ID \ --member serviceAccount:CLUSTER_PROJECT_NUMBER@cloudservices.gserviceaccount.com \ --role roles/compute.imageUser gcloud projects add-iam-policy-binding IMAGE_PROJECT_ID \ --member serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \ --role roles/compute.imageUser
Passaggi successivi
- Utilizza le funzionalità di Utilizza Flusso di immagini per eseguire il pull delle immagini container ed eseguire il pull delle immagini container inviando i flussi di dati delle immagini in base alle esigenze dei tuoi carichi di lavoro.
- Consulta Migliorare l'efficienza dei carichi di lavoro utilizzando NCCL Fast Socket per scoprire come utilizzare lo standard plug-in Fast Socket NVIDIA Collective Communication Library (NCCL).