Utiliser des ressources StorageClass avec vos charges de travail

GKE sur AWS déploie automatiquement le pilote CSI (Container Storage Interface) pour Amazon Elastic Block Store (EBS) pour provisionner et gérer les volumes Amazon EBS dans vos clusters.

La version du pilote CSI pour EBS de GKE sur AWS est liée à une version Kubernetes de GKE sur AWS. La version du pilote est généralement la dernière disponible lors de la publication de la version de GKE. Lorsque le cluster est mis à niveau, les pilotes sont automatiquement mis à jour.

Utiliser la StorageClass par défaut

La création d'un objet PersistentVolumeClaim sans le champ spec.storageClassName définit le provisionnement d'un volume gp2 à l'aide de la ressource StorageClass par défaut du pilote CSI pour EBS de GKE sur AWS.

Le code YAML suivant crée un objet PersistentVolumeClaim (PVC) nommé mypvc avec une taille de 30 GiB.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mypvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 30Gi

Utiliser une autre StorageClass préinstallée

Le pilote CSI pour EBS de GKE sur AWS inclut également la ressource StorageClass premium-rwo, qui provisionne des volumes io1 à haut débit.

Vous pouvez l'utiliser en le spécifiant dans le fichier spec.storageclassName du PVC.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mypvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 30Gi
  storageclassName: premium-rwo

Utiliser une StorageClass personnalisée

Vous pouvez créer des ressources StorageClasses supplémentaires pour les volumes EBS ou utiliser des pilotes CSI (Container Storage Interface).

  1. Déterminez si vous allez utiliser un volume EBS ou un pilote CSI spécifique.

    Volume EBS

    Vous pouvez créer votre propre ressource StorageClass personnalisée qui spécifie un type de volume EBS, un type de système de fichiers et d'autres paramètres. Vous trouverez des paramètres StorageClass supplémentaires sur la page GitHub du pilote CSI pour EBS de GKE sur AWS.

    Pour configurer une ressource StorageClass personnalisée, copiez le fichier manifeste YAML suivant dans un fichier nommé my-custom-class.yaml.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: CLASS_NAME
    provisioner: ebs.csi.aws.com
    volumeBindingMode: WaitForFirstConsumer
    

    Remplacez CLASS_NAME par le nom de votre nouvelle ressource StorageClass.

    Par exemple, le code YAML suivant crée une nouvelle ressource StorageClass qui provisionne des volumes EBS HDD à débit optimisé formatés avec le système de fichiers XFS.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: my-custom-class
    provisioner: ebs.csi.aws.com
    volumeBindingMode: WaitForFirstConsumer
    parameters:
      csi.storage.k8s.io/fsType: xfs
      type: st1
    

    Pilote CSI

    Vous pouvez spécifier un autre pilote CSI dans le champ provisioner.

    Pour créer une ressource StorageClass avec un autre pilote CSI, vous pouvez utiliser l'exemple YAML ci-dessous.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: CLASS_NAME
    provisioner: CSI_DRIVER_NAME
    volumeBindingMode: WaitForFirstConsumer
    parameters:
      ...
    

    Remplacez les éléments suivants :

    • CSI_DRIVER_NAME par le nom du pilote CSI, par exemple, csi.example.com
    • CLASS_NAME par le nom de la ressource StorageClass (par exemple, my-custom-class)

    Configurez les sous-champs sous parameters en fonction de votre pilote CSI.

  2. Appliquez le code YAML à votre cluster.

    kubectl apply -f my-custom-class.yaml
    

Créer un PersistentVolumeClaim avec une StorageClass personnalisée

  1. Une fois créée, vous pouvez spécifier votre ressource StorageClass personnalisée dans un objet PVC. L'exemple ci-dessous crée un objet PVC nommé my-pvc qui référence la ressource StorageClass my-custom-class.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: my-pvc
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 30Gi
      storageclassName: my-custom-class
    

Définir la StorageClass par défaut

GKE sur AWS utilise une ressource StorageClass par défaut appelée standard-rwo qui provisionne les volumes EBS gp2. Vous pouvez remplacer la valeur par défaut par une autre ressource StorageClass.

Pour modifier la ressource StorageClass par défaut, procédez comme suit :

  1. Mettez à jour l'annotation is-default-class de la ressource StorageClass standard-rwo avec kubectl patch.

    kubectl patch storageclass standard-rwo -p \
    '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
    
  2. Créez une ressource StorageClass comportant l'annotation storageclass.kubernetes.io/is-default-class: true.

    L'exemple suivant de ressource StorageClass utilise le pilote ebs.csi.aws.com. Pour installer un autre pilote de stockage, consultez la section Installer un pilote CSI.

    Copiez le fichier YAML suivant dans un fichier nommé my-custom-class.yaml.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: CLASS_NAME
      annotations:
        storageclass.kubernetes.io/is-default-class: true
    provisioner: ebs.csi.aws.com
    volumeBindingMode: WaitForFirstConsumer
    parameters:
      type: EBS_VOLUME_TYPE
    

    Remplacez les éléments suivants :

    • EBS_VOLUME_TYPE : type de volume EBS AWS créé par la StorageClass.
    • CLASS_NAME par le nom de votre nouvelle StorageClass

    Par exemple, le code YAML suivant crée une nouvelle ressource StorageClass par défaut qui provisionne des volumes EBS HDD à débit optimisé formatés avec le système de fichiers XFS.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: my-custom-default-class
      annotations:
        storageclass.kubernetes.io/is-default-class: "true"
    provisioner: ebs.csi.aws.com
    volumeBindingMode: WaitForFirstConsumer
    parameters:
      csi.storage.k8s.io/fsType: xfs
      type: st1
    
  3. Appliquez la nouvelle classe personnalisée à votre cluster.

    kubectl apply -f my-custom-class.yaml
    

Après avoir appliqué ce fichier manifeste, GKE sur AWS utilise la ressource StorageClass my-custom-default-class pour les nouvelles requêtes de stockage.

Référencer la ressource StorageClass dans un StatefulSet

Pour utiliser votre nouvelle StorageClass, vous pouvez faire référence à cette ressource dans la spécification volumeClaimTemplates d'un StatefulSet.

Lorsque vous référencez une ressource StorageClass dans la spécification volumeClaimTemplates d'un StatefulSet, Kubernetes fournit un espace de stockage stable à l'aide de PersistentVolumes (PVs). Kubernetes appelle l'approvisionneur défini dans la StorageClass pour créer un volume de stockage. Une fois le volume provisionné, Kubernetes crée automatiquement un PV.

L'objet StatefulSet suivant référence la StorageClass my-custom-class et provisionne un volume de 1 gibioctet :

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: registry.k8s.io/nginx-slim:0.8
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates: # This is the specification in which you reference the StorageClass
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi
      storageClassName: my-custom-class # This field references the existing StorageClass

Étape suivante