Utiliser des disques persistants dédiés en tant que volumes éphémères


Cette page explique comment utiliser du matériel de stockage externe, tel que des disques persistants Compute Engine, en tant que volumes éphémères dans vos charges de travail Google Kubernetes Engine (GKE). Vous devez déjà connaître les Volumes et les StorageClass de Kubernetes.

Quand utiliser le stockage éphémère dans Kubernetes

Le stockage éphémère est utile dans toutes les situations où vos charges de travail n'ont besoin que des données pendant le cycle de vie de l'application, par exemple pour les pipelines de traitement de données, les jobs de machine learning, le traitement par lot, la mise en cache locale ou les analyses. Par défaut, une partie du disque de démarrage des nœuds GKE est disponible pour le stockage éphémère dans vos pods. Cette approche nécessite souvent une planification minutieuse des espaces.

Les volumes éphémères génériques Kubernetes vous permettent de demander explicitement un stockage éphémère pour vos pods à l'aide de PersistentVolumeClaims. GKE provisionne les disques persistants Compute Engine de manière dynamique, puis les associe à vos nœuds. Ce type de stockage éphémère est utile dans les situations suivantes:

  • Vos charges de travail comportent des exigences de performances élevées. Vous devez donc contrôler le matériel de stockage.
  • Vous avez besoin d'un espace de stockage éphémère à court terme et spécifique aux conteneurs.
  • Vous souhaitez éviter d'utiliser emptyDir pour provisionner le stockage éphémère. Les volumes emptyDir sont toujours utiles lorsque vous souhaitez que plusieurs conteneurs partagent les données dans l'espace de stockage éphémère.
  • Vous souhaitez bénéficier d'une capacité de stockage éphémère supérieure aux valeurs par défaut intégrées de GKE.
  • Vous souhaitez éviter de devoir planifier à l'avance la taille et le type de votre disque de démarrage des nœuds pour les clusters GKE en mode standard.

Types de stockage éphémère dans GKE

En général, vous pouvez utiliser la capacité de stockage sur disque de démarrage ou les disques persistants dédiés comme espace de stockage éphémère dans vos pods et conteneurs. Le tableau suivant décrit les différences :

Type de stockage Comment l'utiliser ? Description
Disque de démarrage – Disques persistants

Installez un volume à l'aide de emptyDir dans la spécification du pod et demandez la capacité dont vous avez besoin.

Pour obtenir des instructions, consultez la page Créer des volumes.

Le stockage éphémère demandé est extrait d'une partie réservée du disque de démarrage des nœuds. Il s'agit de la valeur par défaut dans les clusters Autopilot et Standard.

À utiliser lorsque les pods ont de petites demandes de stockage éphémère ou lorsque vous souhaitez partager les données éphémères entre plusieurs conteneurs du pod.

Autopilot

  • La requête doit être comprise entre 10 Mio et 10 Gio.
  • Le type de matériel de stockage est préconfiguré.

Standard

Aucune limite de taille, mais nécessite une planification minutieuse de la taille du disque de démarrage des nœuds et du type de matériel de stockage.

Pour plus d'informations sur la manière dont GKE calcule la réservation de stockage éphémère dans le disque de démarrage des nœuds, consultez la page Réservation de stockage éphémère locale.

Disques SSD locaux
  1. Créez un pool de nœuds avec des disques SSD locaux associés et une série de machines compatible.
  2. Installez un volume à l'aide de emptyDir avec la capacité requise.
  3. Utilisez un sélecteur de nœuds pour placer des pods sur des nœuds auxquels des disques SSD locaux sont associés.

Pour obtenir des instructions, consultez la section Provisionner un stockage éphémère avec des disques SSD locaux.

Les disques SSD locaux utilisent des incréments fixes de 375 Go compatibles avec les clusters GKE en mode standard et dans les nœuds Autopilot exécutant des GPU A100 (80 Go).

À utiliser lorsque vous avez besoin d'un espace de stockage éphémère à haut débit.

Pour en savoir plus, consultez la page À propos des disques SSD locaux pour GKE.

Disques persistants dédiés
  1. Vous pouvez également créer une StorageClass Kubernetes pour le matériel.
  2. Installez un volume à l'aide du type de volume ephemeral dans la spécification de pod.

Ce document explique comment demander ce type de stockage éphémère.

Google Cloud provisionne dynamiquement le matériel externe demandé, l'associe à vos nœuds et installe le volume demandé dans votre pod.

À utiliser lorsque les pods comportent des requêtes de stockage éphémère volumineuses ou lorsque vous souhaitez contrôler le type de disque persistant sous-jacent. Ces volumes ont les propriétés suivantes:

  • Jusqu'à 64 Tio en mode Autopilot et en mode standard
  • Matériel spécialisé tel que les volumes basés sur SSD compatibles
  • Stockage en réseau
  • Utilise les volumes Kubernetes pour obtenir de l'espace de stockage, au lieu d'utiliser emptyDir pour partager le disque de démarrage des nœuds.

Pour en savoir plus sur ce type de volume éphémère, consultez la section Volumes éphémères génériques.

Tarifs

Le stockage que vous provisionnez via des volumes éphémères génériques tels que décrits dans ce guide est facturé en fonction des tarifs des disques Compute Engine.

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.
  • Assurez-vous de disposer d'un cluster GKE Autopilot ou standard exécutant la version 1.23 ou ultérieure.
  • Assurez-vous de disposer d'un quota suffisant dans votre projet Google Cloud pour le matériel de stockage. Pour gérer votre quota, consultez la section Afficher les quotas de votre projet.

Créer un objet StorageClass

Créer une StorageClass Kubernetes personnalisée vous permet de spécifier le type de stockage à provisionner en fonction de vos exigences en termes de prix et de performances. Bien que facultative, cette étape est recommandée. Si vous souhaitez utiliser la ressource StorageClass par défaut de GKE, qui est de type disque persistant pd-balanced, ignorez cette étape.

  1. Enregistrez le manifeste suivant sous le nom ephemeral-pd-class.yaml :

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: ephemeral-ssd
    provisioner: pd.csi.storage.gke.io
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    parameters:
      type: STORAGE_TYPE
    

    Remplacez STORAGE_TYPE par le nom du type de disque persistant souhaité, tel que pd-ssd. Pour obtenir la liste des types compatibles, consultez la section Types de disques persistants dans la documentation Compute Engine.

  2. Créez la StorageClass :

    kubectl create -f ephemeral-pd-class.yaml
    

Demander une capacité de stockage éphémère dans un pod

Pour provisionner, associer et utiliser du matériel externe en tant qu'espace de stockage éphémère, ajoutez le volume correspondant à votre fichier manifeste de pod et ajoutez l'installation d'un volume à la spécification du conteneur.

  1. Enregistrez le manifeste suivant sous le nom ephemeral-ssd-deployment.yaml :

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ephemeral-deployment
    spec:
      replicas: 1
      selector:
        matchLabels:
          storage: ephemeral
      template:
        metadata:
          labels:
            storage: ephemeral
        spec:
          containers:
          - name: ephemeral-container
            image: nginx
            resources:
              requests:
                cpu: 500m
                memory: 2Gi
                ephemeral-storage: 2Gi
            volumeMounts:
            - mountPath: "/short-term"
              name: ephemeral-volume
          volumes:
          - name: ephemeral-volume
            ephemeral:
              volumeClaimTemplate:
                metadata:
                  labels:
                    type: ephemeral
                spec:
                  accessModes: ["ReadWriteOnce"]
                  storageClassName: "ephemeral-ssd"
                  resources:
                    requests:
                      storage: 1Ti
    

    Ce fichier manifeste crée un objet PersistentVolumeClaim Kubernetes qui demande un nouvel objet PersistentVolume nommé ephemeral-volume avec les propriétés suivantes:

    • spec.volumes.ephemeral: type de volume ephemeral.
    • .spec.accessModes: mode d'accès au volume, qui détermine l'accès en lecture-écriture à partir des pods et le partage de volume entre les nœuds. Cet exemple utilise ReadWriteOnce, qui installe le PersistentVolume sur un seul nœud pour accéder à un ou plusieurs pods du nœud. Pour plus d'informations, consultez la section Modes d'accès.
    • .spec.storageClassName: (facultatif) nom de la StorageClass que vous avez créée. Si vous omettez de renseigner ce champ, GKE utilise la ressource StorageClass par défaut et provisionne un disque persistant pd-balanced.
    • .spec.resources.requests.storage: la capacité de stockage souhaitée.
  2. Créez le déploiement :

    kubectl create -f ephemeral-ssd-deployment.yaml
    

GKE provisionne un disque Compute Engine répondant aux exigences de l'objet PersistentVolumeClaim et associe le disque au nœud. GKE installe le volume dans le pod et fournit la capacité demandée au conteneur.

Vérifier que GKE a installé un volume éphémère

  1. Ouvrez une session shell dans le pod :

    kubectl exec -it deploy/ephemeral-deployment -- bash
    
  2. Vérifiez les volumes installés:

    df -h
    

    Le résultat ressemble à ce qui suit :

    Filesystem                Size      Used Available Use% Mounted on
    ...
    /dev/sdb               1006.9G     28.0K   1006.8G   0% /short-term
    /dev/sda1                94.3G      3.6G     90.6G   4% /etc/hosts
    /dev/sda1                94.3G      3.6G     90.6G   4% /dev/termination-log
    /dev/sda1                94.3G      3.6G     90.6G   4% /etc/hostname
    /dev/sda1                94.3G      3.6G     90.6G   4% /etc/resolv.conf
    ...
    
  3. Quittez la session shell :

    exit
    

Étapes suivantes