Utiliser des disques de démarrage secondaires pour précharger des données ou des images de conteneurs


Cette page explique comment améliorer la latence de démarrage des charges de travail en utilisant des disques de démarrage secondaires dans Google Kubernetes Engine (GKE). Avec les disques de démarrage secondaires, vous pouvez précharger les données ou les images de conteneurs sur de nouveaux nœuds. Cela permet aux charges de travail d'accélérer le démarrage à froid et d'améliorer l'utilisation globale des ressources provisionnées.

Présentation

À partir de la version 1.28.3-gke.1067000, vous pouvez configurer le pool de nœuds avec des disques de démarrage secondaires. Vous pouvez indiquer à GKE de provisionner les nœuds et de leur ajouter des données, telles qu'un modèle de machine learning ou une image de conteneur. L'utilisation de données préchargées ou d'une image de conteneur sur un disque secondaire présente les avantages suivants pour vos charges de travail :

  • Autoscaling plus rapide
  • Latence réduite lors de l'extraction d'images volumineuses
  • Récupération plus rapide après des perturbations telles que des événements de maintenance et des erreurs système

Avant de commencer

Avant de commencer, effectuez les tâches suivantes :

  • Activez l'API Google Kubernetes Engine.
  • Activer l'API Google Kubernetes Engine
  • Si vous souhaitez utiliser Google Cloud CLI pour cette tâche, installez puis initialisez gcloud CLI. Si vous avez déjà installé gcloud CLI, assurez-vous de disposer de la dernière version en exécutant la commande gcloud components update.

Conditions requises

Les exigences suivantes s'appliquent à l'utilisation d'un disque de démarrage secondaire :

  1. Cette fonctionnalité est disponible dans GKE version 1.28.3-gke.106700 et ultérieure.
  2. Lorsque vous modifiez l'image disque, vous devez créer un pool de nœuds. Vous ne pouvez pas mettre à jour l'image disque sur des nœuds existants.

  3. Vous devez configurer le streaming d'images pour utiliser la fonctionnalité de disque de démarrage secondaire.

Configurer le disque de démarrage secondaire

Les sections suivantes expliquent comment configurer le disque de démarrage secondaire :

Précharger les données

Avant de créer le cluster GKE et le pool de nœuds avec un disque de démarrage secondaire, nous vous recommandons de préparer l'image disque lorsque les données sont prêtes pendant la compilation, idéalement de manière automatisée dans un pipeline CI/CD.

Préparer l'image disque contenant les données

Créez une image disque personnalisée en tant que source de données en procédant comme suit :

  1. Créez une VM avec un disque vide.
  2. Connectez-vous en SSH à la VM.
    1. Installez le disque vide.
    2. Téléchargez les données sur le disque vide.
  3. Créez une image personnalisée à partir du disque.

Créer le cluster GKE et le pool de nœuds avec un disque de démarrage secondaire

Vous pouvez configurer un disque de démarrage secondaire à l'aide de gcloud CLI :

  1. Créez un cluster GKE Standard avec le streaming d'images activé à l'aide de l'option --enable-image-streaming :

    gcloud container clusters create CLUSTER_NAME \
        --location LOCATION \
        --cluster-version=CLUSTER_VERSION \
        --enable-image-streaming
    

    Remplacez les éléments suivants :

    • CLUSTER_NAME : le nom du cluster
    • LOCATION : l'emplacement du cluster
    • CLUSTER-VERSION : version de GKE à utiliser. Doit être 1.28.3-gke.106700 ou une version ultérieure.
  2. Créez un pool de nœuds avec un disque de démarrage secondaire à l'aide de l'option --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
    

    Remplacez DISK_IMAGE_NAME par le nom de votre image disque.

    GKE crée un pool de nœuds dans lequel chaque nœud dispose d'un disque secondaire avec des données préchargées. Cette opération permet d'associer et d'installer le disque de démarrage secondaire sur le nœud.

  3. Vous pouvez éventuellement installer l'image de disque secondaire dans les conteneurs de pod à l'aide d'une installation de volume hostPath. Utilisez le fichier manifeste suivant pour définir des ressources de pod et utiliser une installation de volume hostPath afin de précharger le disque de données dans ses conteneurs :

    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
    

    Remplacez DISK_IMAGE_NAME par le nom de votre image disque.

Précharger l'image de conteneur

Dans ce guide, vous utilisez gke-disk-image-builder pour créer une instance de VM et extraire les images de conteneur sur un disque. Le fichier gke-disk-image-builder crée une image disque à partir de ce disque. Nous vous recommandons de préparer l'image disque juste après l'étape de compilation de l'image de conteneur, idéalement automatisée dans un pipeline CI/CD.

  1. Créez un bucket Cloud Storage pour stocker les journaux d'exécution de gke-disk-image-builder.
  2. Créez une image disque avec des images de conteneurs préchargées.

    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
    

    Remplacez les éléments suivants :

    • PROJECT_ID : le nom de votre projet Google Cloud
    • DISK_IMAGE_NAME : le nom de l'image du disque. Par exemple, nginx-python-image.
    • LOCATION : l'emplacement du cluster
    • LOG_BUCKET_NAME: nom du bucket Cloud Storage où stocker les journaux d'exécution. Exemple :gke-secondary-disk-image-logs/

  3. Créez un cluster GKE Standard avec le streaming d'images activé :

    gcloud container clusters create CLUSTER_NAME \
        --location=LOCATION \
        --cluster-version=CLUSTER_VERSION \
        --enable-image-streaming
    
  4. Créez un pool de nœuds avec un disque de démarrage secondaire :

    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. Ajoutez un fichier nodeSelector à votre modèle de pod :

    nodeSelector:
        cloud.google.com/gke-nodepool: NODE_POOL_NAME
    
  6. Vérifiez que le cache du disque de démarrage secondaire est utilisé :

    kubectl get events --all-namespaces
    

    Le résultat ressemble à ce qui suit :

    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 latence attendue pour l'extraction de l'image de conteneur mise en cache ne doit pas dépasser quelques secondes, quelle que soit la taille de l'image. Vous pouvez vérifier la latence d'extraction de l'image en exécutant la commande suivante :

    kubectl describe pod POD_NAME
    

    Remplacez POD_NAME par le nom du pod.

    Le résultat est semblable à celui-ci :

    …
      Normal  Pulled     15m   kubelet            Successfully pulled image "docker.io/library/nginx:latest" in 0.879149587s
    …
    

Étapes suivantes