Usa dischi di avvio secondari per precaricare dati o immagini container


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.

Requisiti

Per l'utilizzo del disco di avvio secondario si applicano i seguenti requisiti:

  1. La funzionalità è disponibile in GKE versione 1.28.3-gke.106700 e successive.
  2. Quando modifichi l'immagine disco, devi creare un nuovo pool di nodi. Non puoi aggiornare l'immagine disco sui nodi esistenti.

  3. 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:

  1. Crea una VM con un disco vuoto.
  2. Accedi tramite SSH alla VM.
    1. Monta il disco vuoto.
    2. Scarica i dati sul disco vuoto.
  3. 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:

  1. 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.
  2. 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.

  3. 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.

  1. Crea un bucket Cloud Storage per archiviare i log di esecuzione di gke-disk-image-builder.
  2. 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/.

  3. 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
    
  4. 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
    
  5. Aggiungi nodeSelector al modello di pod:

    nodeSelector:
        cloud.google.com/gke-nodepool: NODE_POOL_NAME
    
  6. 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