Questa pagina mostra come migliorare la latenza di avvio dei carichi di lavoro utilizzando dischi di avvio secondari in Google Kubernetes Engine (GKE). Con i dischi di avvio secondari, puoi precaricare dati o immagini container su nuovi nodi. Ciò consente ai carichi di lavoro di ottenere un avvio a freddo rapido e di migliorare l'utilizzo complessivo delle risorse di cui è stato eseguito il provisioning.
Panoramica
A partire dalla versione 1.28.3-gke.1067000, puoi configurare il pool di nodi con dischi di avvio secondari. Puoi chiedere a GKE di eseguire il provisioning dei nodi e precaricarli con dati, come un modello di machine learning o un'immagine container. L'utilizzo di dati precaricati o di un'immagine container in un disco secondario offre i seguenti vantaggi per i carichi di lavoro:
- Scalabilità automatica più rapida
- Latenza ridotta per l'estrazione di immagini di grandi dimensioni
- Recupero più rapido da interruzioni come eventi di manutenzione ed errori di sistema
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti attività:
- Abilita l'API Google Kubernetes Engine. Abilita l'API Google Kubernetes Engine
- Se vuoi utilizzare Google Cloud CLI per questa attività, installa e initialize gcloud CLI. Se hai già installato gcloud CLI, scarica la versione più recente eseguendo
gcloud components update
.
Abilitare l'API Container File System.
Assicurati che il cluster abbia accesso all'immagine disco da caricare nei nodi.
Requisiti
Per l'utilizzo del disco di avvio secondario si applicano i seguenti requisiti:
- La funzionalità è disponibile in GKE versione 1.28.3-gke.106700 e successive.
Quando modifichi l'immagine disco, devi creare un nuovo pool di nodi. Non puoi aggiornare l'immagine disco sui nodi esistenti.
Devi configurare il flusso di immagini per utilizzare la funzionalità del disco di avvio secondario.
Configura il disco di avvio secondario
Le seguenti sezioni descrivono come configurare il disco di avvio secondario:
Precarica i dati
Prima di creare il cluster GKE e il pool di nodi con un disco di avvio secondario, ti consigliamo di preparare l'immagine disco quando i dati sono pronti durante la fase di compilazione, idealmente in modo automatico in una pipeline CI/CD.
Prepara l'immagine disco che contiene i dati
Crea un'immagine disco personalizzata come origine dati completando i seguenti passaggi:
- Crea una VM con un disco vuoto.
- Accedi tramite SSH alla VM.
- Crea un'immagine personalizzata dal disco.
Crea il cluster GKE e il pool di nodi con un disco di avvio secondario
Puoi configurare un disco di avvio secondario utilizzando gcloud CLI:
Crea un cluster GKE Standard con flusso di immagini abilitato utilizzando il flag
--enable-image-streaming
:gcloud container clusters create CLUSTER_NAME \ --location LOCATION \ --cluster-version=CLUSTER_VERSION \ --enable-image-streaming
Sostituisci quanto segue:
- CLUSTER_NAME: il nome del cluster.
- LOCATION: la località del cluster.
- CLUSTER-VERSION: la versione di GKE da utilizzare. Deve essere
1.28.3-gke.106700
o successiva.
Crea un pool di nodi con un disco di avvio secondario utilizzando il flag
--secondary-boot-disk=disk-image
:gcloud beta container node-pools create NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --location LOCATION \ --enable-image-streaming \ --secondary-boot-disk=disk-image=global/images/DATA_DISK IMAGE
Sostituisci DISK_IMAGE_NAME con il nome dell'immagine del tuo disco.
GKE crea un pool di nodi in cui ogni nodo dispone di un disco secondario con dati precaricati. Questa operazione collega e monta il disco di avvio secondario sul nodo.
Se vuoi, puoi montare l'immagine del disco secondario nei container dei pod utilizzando un montaggio del volume hostPath. Utilizza il manifest seguente per definire le risorse pod e utilizzare un montaggio del volume hostPath per precaricare il disco dati nei relativi 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 del tuo disco.
Precarica l'immagine container
In questa guida utilizzerai gke-disk-image-builder
per creare un'istanza VM ed eseguire il pull delle immagini container su un disco. L'elemento
gke-disk-image-builder
crea un'immagine disco da quel disco. Ti consigliamo di preparare l'immagine disco subito dopo il passaggio di creazione dell'immagine container, idealmente in modo automatico in una pipeline CI/CD.
- Crea un bucket Cloud Storage per archiviare i log di esecuzione di
gke-disk-image-builder
. Crea un'immagine disco con immagini container precaricate.
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 del bucket Cloud Storage in cui archiviare i log di esecuzione. Ad esempio,
gke-secondary-disk-image-logs/
.
Crea un cluster GKE Standard con flusso di immagini abilitato:
gcloud container clusters create CLUSTER_NAME \ --location=LOCATION \ --cluster-version=CLUSTER_VERSION \ --enable-image-streaming
Crea un pool di nodi con un disco di avvio secondario:
gcloud beta 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
Aggiungi
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
La latenza di pull dell'immagine prevista per l'immagine container memorizzata nella cache non deve essere superiore a pochi secondi, indipendentemente dalle dimensioni dell'immagine. Puoi controllare la latenza di pull dell'immagine 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 …
Passaggi successivi
- Utilizza Utilizza il flusso di immagini per estrarre le immagini dei container ed eseguire il pull delle immagini container trasmettendo i dati delle immagini in base alle esigenze dei tuoi carichi di lavoro.
- Consulta l'articolo Migliorare l'efficienza dei carichi di lavoro con NCCL Fast Socket per scoprire come utilizzare il plug-in Fast Socket NCCL (NVIDIA Collective Communication Library).