Utiliser le pilote CSI de disque persistant Compute Engine


Google Kubernetes Engine (GKE) offre un moyen facile de déployer et gérer automatiquement le pilote CSI (Container Storage Interface) de disque persistant Compute Engine dans vos clusters. Le pilote CSI de disque persistant Compute Engine est toujours activé dans les clusters Autopilot et ne peut pas être désactivé ou modifié. Dans les clusters standards, vous devez activer le pilote CSI de disque persistant Compute Engine.

La version du pilote CSI de disque persistant Compute Engine est liée aux numéros de version de GKE. La version du pilote CSI de disque persistant Compute Engine est généralement le dernier pilote disponible au moment de la publication de la version de GKE. Les pilotes sont mis à jour automatiquement lorsque le cluster est mis à niveau afin d'intégrer le dernier correctif GKE.

Avantages

L'utilisation du pilote CSI de disque persistant Compute Engine offre les avantages suivants :

  • Cela permet de déployer et de gérer automatiquement le pilote de disque persistant sans avoir à le configurer manuellement.
  • Vous pouvez utiliser des clés de chiffrement gérées par le client (CMEK). Ces clés permettent de chiffrer les clés de chiffrement de données qui chiffrent vos données. Pour en savoir plus sur les clés CMEK sur GKE, consultez la page Utiliser des clés de chiffrement gérées par le client (CMEK).
  • Vous pouvez utiliser des instantanés de volume avec le pilote CSI de disque persistant Compute Engine. Les instantanés de volume permettent de créer une copie d'un volume à un moment précis. Cette copie peut servir à revenir à un état antérieur ou à provisionner un nouveau volume.
  • Vous pouvez utiliser le clonage de volume avec le pilote CSI de disque persistant Compute Engine dans les clusters exécutant GKE version 1.22 ou ultérieure. Vous pouvez ainsi créer un double de votre volume à un moment précis, provisionné avec toutes les données du volume source.
  • Les corrections de bugs et les mises à jour des fonctionnalités sont déployées indépendamment des versions mineures de Kubernetes. Ce calendrier de publication se traduit généralement par une cadence de publication de versions plus rapide.

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

Pour que vous puissiez utiliser le pilote CSI de disque persistant Compute Engine, vos clusters doivent exécuter les versions suivantes :

  • Clusters Linux : GKE 1.14 ou une version ultérieure.
  • Clusters Windows : GKE 1.18 ou une version ultérieure.

Dans les versions 1.22 et ultérieures, CSI Migration est activé. Les volumes existants qui utilisent le fournisseur gce-pd sont transférés pour qu'ils communiquent via les pilotes CSI. Aucune modification n'est requise pour une StorageClass. Le fournisseur gce-pd n'est toujours pas compatible avec des fonctionnalités telles que les CMEK ou les instantanés de volume. Vous devez utiliser le fournisseur pd.csi.storage.gke.io dans l'objet StorageClass pour activer ces fonctionnalités.

Pour utiliser le pilote CSI de disque persistant Compute Engine avec la fédération d'identité de charge de travail pour GKE, vos clusters standards doivent utiliser les versions suivantes :

  • Clusters Linux : GKE 1.16 ou une version ultérieure.
  • Clusters Windows : GKE 1.20.8-gke.900 ou une version ultérieure.

Activer le pilote CSI de disque persistant Compute Engine sur un nouveau cluster

Pour créer un cluster standard avec une version dans laquelle le pilote CSI de disque persistant Compute Engine n'est pas automatiquement activé, vous pouvez utiliser Google Cloud CLI ou Google Cloud Console.

Pour activer le pilote lors de la création du cluster, procédez comme suit :

gcloud

gcloud container clusters create CLUSTER-NAME \
    --addons=GcePersistentDiskCsiDriver \
    --cluster-version=VERSION

Remplacez les éléments suivants :

  • CLUSTER-NAME : nom du cluster
  • VERSION : numéro de version de GKE. Vous devez sélectionner la version 1.14 ou ultérieure pour utiliser cette fonctionnalité.

Pour obtenir la liste complète des options, consultez la documentation gcloud container clusters create.

Console

  1. Accédez à la page Google Kubernetes Engine dans Google Cloud Console.

    Accéder à Google Kubernetes Engine

  2. Cliquez sur Créer.

  3. Dans la section Standard, cliquez sur Configurer.

  4. Configurez le cluster comme vous le souhaitez.

  5. Dans le volet de navigation, sous Cluster, cliquez sur Fonctionnalités.

  6. Cochez la case Activer le pilote CSI de disque persistant Compute Engine.

  7. Cliquez sur Create (Créer).

Après avoir activé le pilote CSI de disque persistant Compute Engine, vous pouvez utiliser le pilote dans les volumes Kubernetes à l'aide du nom du pilote et de l'approvisionneur : pd.csi.storage.gke.io.

Activer le pilote CSI de disque persistant Compute Engine sur un cluster existant

Pour activer le pilote CSI de disque persistant Compute Engine dans des clusters standards existants, utilisez Google Cloud CLI ou Google Cloud Console.

Pour activer le pilote sur un cluster existant, procédez comme suit :

gcloud

gcloud container clusters update CLUSTER-NAME \
   --update-addons=GcePersistentDiskCsiDriver=ENABLED

Remplacez CLUSTER-NAME par le nom du cluster existant.

Console

  1. Accédez à la page Google Kubernetes Engine dans Google Cloud Console.

    Accéder à Google Kubernetes Engine

  2. Dans la liste des clusters, cliquez sur le nom du cluster que vous souhaitez modifier.

  3. Sous Fonctionnalités, à côté du champ Pilote CSI de disque persistant Compute Engine, cliquez sur Modifier le pilote CSI Compute Engine.

  4. Cochez la case Activer le pilote CSI de disque persistant Compute Engine.

  5. Cliquez sur Save Changes (Enregistrer les modifications).

Désactiver le pilote CSI de disque persistant Compute Engine

Vous pouvez désactiver le pilote CSI de disque persistant Compute Engine pour des clusters standards à l'aide de Google Cloud CLI ou de la console Google Cloud.

Si vous désactivez le pilote, tous les pods qui utilisent actuellement les PersistentVolume appartenant au pilote ne s'arrêteront pas. En outre, les nouveaux pods tentant d'utiliser ces PersistentVolume ne pourront pas démarrer.

Pour désactiver le pilote sur un cluster standard existant, procédez comme suit :

gcloud

gcloud container clusters update CLUSTER-NAME \
    --update-addons=GcePersistentDiskCsiDriver=DISABLED

Remplacez CLUSTER-NAME par le nom du cluster existant.

Console

  1. Accédez à la page Google Kubernetes Engine dans Google Cloud Console.

    Accéder à Google Kubernetes Engine

  2. Dans la liste des clusters, cliquez sur le nom du cluster que vous souhaitez modifier.

  3. Sous Fonctionnalités, à côté du champ Pilote CSI de disque persistant Compute Engine, cliquez sur Modifier le pilote CSI Compute Engine.

  4. Cochez la case Activer le pilote CSI de disque persistant Compute Engine.

  5. Cliquez sur Save Changes (Enregistrer les modifications).

Utiliser le pilote CSI de disque persistant Compute Engine pour les clusters Linux

Les sections suivantes décrivent la procédure d'utilisation standard d'un volume Kubernetes reposant sur un pilote CSI dans GKE. Ces sections sont spécifiques aux clusters Linux

Créer un objet StorageClass

Une fois le pilote CSI de disque persistant Compute Engine activé, GKE installe automatiquement les ressources StorageClasses suivantes :

  • standard-rwo, avec un disque persistant avec équilibrage
  • premium-rwo, avec un disque persistant SSD

Pour les clusters Autopilot, la ressource StorageClass par défaut est standard-rwo, qui utilise le pilote CSI de disque persistant Compute Engine. Pour les clusters standards, la ressource StorageClass par défaut utilise le plug-in de volume gcePersistentDisk "in-tree" Kubernetes.

Exécutez la commande suivante pour trouver le nom de vos ressources StorageClasses installées :

kubectl get sc

Vous pouvez également installer une autre StorageClass qui utilise le pilote CSI de disque persistant Compute Engine en ajoutant pd.csi.storage.gke.io dans le champ de l'approvisionneur.

Par exemple, vous pouvez créer un objet StorageClass à l'aide du fichier suivant nommé pd-example-class.yaml :

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

Vous pouvez spécifier les types de disques persistants suivants dans le paramètre type :

  • pd-balanced
  • pd-ssd
  • pd-standard
  • pd-extreme (compatible avec les versions 1.26 et ultérieures de GKE)

Si vous utilisez pd-standard ou pd-extreme, consultez la section Types de machines non compatibles pour connaître les restrictions d'utilisation supplémentaires.

Lorsque vous utilisez l'option pd-extreme, vous devez également ajouter le champ provisioned-iops-on-create à votre fichier manifeste. Ce champ doit être défini sur la même valeur que la valeur d'IOPS provisionnées que vous avez spécifiée lors de la création de votre disque persistant.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: pd-extreme-example
provisioner: pd.csi.storage.gke.io
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
parameters:
  type: pd-extreme
  provisioned-iops-on-create: '10000'

Après avoir créé le fichier pd-example-class.yaml, exécutez la commande suivante :

kubectl create -f pd-example-class.yaml

Créer un objet PersistentVolumeClaim

Vous pouvez créer un PersistentVolumeClaim qui fait référence à la StorageClass du pilote CSI de disque persistant Compute Engine.

Le fichier suivant, nommé pvc-example.yaml, utilise l'objet StorageClass pré-installé standard-rwo :

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: podpvc
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: standard-rwo
  resources:
    requests:
      storage: 6Gi

Après avoir créé le fichier manifeste PersistentVolumeClaim, exécutez la commande suivante :

kubectl create -f pvc-example.yaml

Dans l'objet StorageClass pré-installé (standard-rwo), volumeBindingMode est défini sur WaitForFirstConsumer. Lorsque volumeBindingMode est défini sur WaitForFirstConsumer, l'objet PersistentVolume n'est pas provisionné tant qu'aucun pod référençant l'objet PersistentVolumeClaim n'est planifié. Si volumeBindingMode est défini sur Immediate dans l'objet StorageClass (ou s'il est omis), un objet PersistentVolume s'appuyant sur un disque persistant est provisionné après la création d'un objet PersistentVolumeClaim.

Créer un pod qui consomme le volume

Lorsque vous utilisez des pods avec des objets PersistentVolume, nous vous recommandons d'utiliser un contrôleur de charge de travail (tel que Deployment ou StatefulSet). Bien que les pods autonomes soient peu répandus, l'exemple suivant en utilise un pour plus de simplicité.

L'exemple suivant utilise le volume que vous avez créé dans la section précédente :

apiVersion: v1
kind: Pod
metadata:
  name: web-server
spec:
  containers:
   - name: web-server
     image: nginx
     volumeMounts:
       - mountPath: /var/lib/www/html
         name: mypvc
  volumes:
   - name: mypvc
     persistentVolumeClaim:
       claimName: podpvc
       readOnly: false

Utiliser le pilote CSI de disque persistant Compute Engine pour les clusters Windows

Les sections suivantes décrivent la procédure d'utilisation standard d'un volume Kubernetes reposant sur un pilote CSI dans GKE. Ces sections sont spécifiques aux clusters Windows

Vérifiez les données suivantes :

  • La version du cluster est 1.19.7-gke.2000, 1.20.2-gke.2000 ou ultérieure.
  • Les versions des nœuds sont 1.18.12-gke.1203, 1.19.6-gke.800 ou ultérieure.

Créer un objet StorageClass

La création d'une StorageClass pour Windows est très semblable à celle de Linux Sachez que la ressource StorageClass installée par défaut ne fonctionnera pas sous Windows, car le type de système de fichiers est différent. Le pilote CSI de disque persistant Compute Engine pour Windows nécessite NTFS en tant que type de système de fichiers.

Par exemple, vous pouvez créer un objet StorageClass à l'aide du fichier suivant nommé pd- windows-class.yaml. Veillez à ajouter csi.storage.k8s.io/fstype: NTFS à la liste des paramètres :

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: pd-sc-windows
provisioner: pd.csi.storage.gke.io
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
parameters:
  type: pd-balanced
  csi.storage.k8s.io/fstype: NTFS

Créer un objet PersistentVolumeClaim

Après avoir créé un objet StorageClass pour Windows, vous pouvez maintenant créer un objet PersistentVolumeClaim qui y fait référence :

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: podpvc-windows
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: pd-sc-windows
  resources:
    requests:
      storage: 6Gi

Créer un pod qui consomme le volume

L'exemple suivant utilise le volume que vous avez créé dans la tâche précédente :

apiVersion: v1
kind: Pod
metadata:
  name: web-server
spec:
  nodeSelector:
    kubernetes.io/os: windows
  containers:
    - name: iis-server
      image: mcr.microsoft.com/windows/servercore/iis
      ports:
      - containerPort: 80
      volumeMounts:
      - mountPath: /var/lib/www/html
        name: mypvc
  volumes:
    - name: mypvc
      persistentVolumeClaim:
        claimName: podpvc-windows
        readOnly: false

Utiliser le pilote CSI de disque persistant Compute Engine avec des types de systèmes de fichiers autres que ceux par défaut

Le type de système de fichiers par défaut pour les disques persistants Compute Engine dans GKE est ext4. Vous pouvez également utiliser le type de stockage xfs tant que votre image de nœud le permet. Consultez la section Compatibilité des pilotes de stockage avec la liste des pilotes compatibles par image de nœud.

L'exemple suivant montre comment utiliser xfs comme type de système de fichiers par défaut au lieu de ext4 avec le pilote CSI de disque persistant Compute Engine.

Créer un objet StorageClass

  1. Enregistrez le fichier YAML de manifeste suivant dans un fichier nommé pd-xfs-class.yaml :

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: xfs-class
    provisioner: pd.csi.storage.gke.io
    parameters:
      type: pd-balanced
      csi.storage.k8s.io/fstype: xfs
    volumeBindingMode: WaitForFirstConsumer
    
  2. Appliquer le fichier manifeste :

    kubectl apply -f pd-xfs-class.yaml
    

Créer un objet PersistentVolumeClaim

  1. Enregistrez le manifeste suivant sous le nom pd-xfs-pvc.yaml :

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: xfs-pvc
    spec:
      storageClassName: xfs-class
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
    
  2. Appliquer le fichier manifeste :

    kubectl apply -f pd-xfs-pvc.yaml
    

Créer un pod qui consomme le volume

  1. Enregistrez le manifeste suivant sous le nom pd-xfs-pod.yaml :

    apiVersion: v1
    kind: Pod
    metadata:
      name: pd-xfs-pod
    spec:
      containers:
      - name: cloud-sdk
        image: google/cloud-sdk:slim
        args: ["sleep","3600"]
        volumeMounts:
        - mountPath: /xfs
          name: xfs-volume
      volumes:
      - name: xfs-volume
        persistentVolumeClaim:
          claimName: xfs-pvc
    
  2. Appliquer le fichier manifeste :

    kubectl apply -f pd-xfs-pod.yaml
    

Vérifier que le volume a été correctement installé

  1. Ouvrez une session d'interface système dans le pod :

    kubectl exec -it pd-xfs-pod -- /bin/bash
    
  2. Recherchez les partitions xfs :

    df -aTh --type=xfs
    

    La sortie devrait ressembler à ce qui suit :

    Filesystem     Type  Size  Used Avail Use% Mounted on
    /dev/sdb       xfs    30G   63M   30G   1% /xfs
    

Afficher les journaux pour le pilote CSI de disque persistant Compute Engine

Vous pouvez utiliser Cloud Logging pour afficher les événements liés au pilote CSI de disque persistant Compute Engine. Les journaux peuvent vous aider à résoudre les problèmes.

Pour en savoir plus sur Cloud Logging, consultez la section Afficher vos journaux GKE.

Pour afficher les journaux du pilote CSI de disque persistant Compute Engine, procédez comme suit :

  1. Accédez à la page Cloud Logging dans la console Google Cloud.

    Accéder à Cloud Logging

  2. Exécutez la requête suivante :

     resource.type="k8s_container"
     resource.labels.project_id="PROJECT_ID"
     resource.labels.location="LOCATION"
     resource.labels.cluster_name="CLUSTER_NAME"
     resource.labels.namespace_name="kube-system"
     resource.labels.container_name="gce-pd-driver"
    

    Remplacez les éléments suivants :

    • PROJECT_ID : nom de votre projet.
    • LOCATION : région ou zone Compute Engine du cluster.
    • CLUSTER_NAME : nom du cluster.

Problèmes connus

Types de machines non compatibles

Si vous utilisez la famille de machines de la série C3, le type de disque persistant pd-standard n'est pas accepté.

Si vous essayez d'exécuter un pod sur une machine, et que le pod utilise un type de disque persistant non compatible, un message d'avertissement semblable au suivant s'affiche sur le pod :

AttachVolume.Attach failed for volume "pvc-d7397693-5097-4a70-9df0-b10204611053" : rpc error: code = Internal desc = unknown Attach error: failed when waiting for zonal op: operation operation-1681408439910-5f93b68c8803d-6606e4ed-b96be2e7 failed (UNSUPPORTED_OPERATION): [pd-standard] features are not compatible for creating instance.

Si votre cluster comporte plusieurs pools de nœuds avec différentes familles de machines, vous pouvez utiliser des rejets de nœuds et l'affinité de nœud pour limiter là où les charges de travail peuvent être planifiées. Par exemple, vous pouvez utiliser cette approche pour limiter l'exécution d'une charge de travail utilisant pd-standard sur une famille de machines non compatible.

Si vous utilisez le type de disque persistant pd-extreme, vous devez vous assurer que votre disque est associé à une instance de VM avec une forme de machine appropriée. Pour en savoir plus, consultez la page Compatibilité avec les types de machines.

Étapes suivantes