Utiliser une ressource StorageClass personnalisée avec vos charges de travail

GKE sur Azure déploie automatiquement le pilote CSI Azure Disk et le pilote CSI Azure File.

Les versions du pilote CSI Azure Disk et du pilote CSI Azure File sont liées à une version de GKE sur Azure Kubernetes. 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 une ressource StorageClass personnalisée

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

  1. Indiquez si vous utilisez un volume de disque Azure ou un autre pilote CSI.

    Volume Azure Disk

    Vous pouvez créer votre propre ressource StorageClass personnalisée qui spécifie un type de volume Azure Disk, un type de système de fichiers et d'autres paramètres. Vous pouvez trouver d'autres paramètres StorageClass sur la page GitHub du pilote CSI Azure Disk de GKE sur Azure.

    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: disk.csi.azure.com
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    

    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 dans un compte de stockage spécifique et applique un tag valant group=dev à chaque nouveau volume.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: my-custom-class
    provisioner: disk.csi.azure.com
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    parameters:
      storageAccount: my-storage-account
      tags: group=dev
    

    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 valeurs suivantes :

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

    Configurez ensuite les sous-champs sous parameters, conformément à la documentation de votre pilote CSI.

  2. Appliquez le code YAML à votre cluster.

    kubectl apply -f my-custom-class.yaml
    
  3. Créez un objet PersistentVolumeClaim avec une ressource StorageClass personnalisée.

    Après avoir créé une ressource StorageClass personnalisée, vous pouvez la spécifier dans un PVC. L'exemple suivant crée un PVC nommé my-pvc qui fait référence à la 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 ressource StorageClass par défaut

GKE sur Azure utilise une StorageClass par défaut appelée standard-rwo, qui provisionne des disques SSD standards Azure avec LRS 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 disk.csi.azure.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: disk.csi.azure.com
    volumeBindingMode: WaitForFirstConsumer
    parameters:
      skuName: VOLUME_TYPE
    

    Remplacez l'élément suivant :

    • CLASS_NAME : nom de votre nouvelle ressource StorageClass.
    • VOLUME_TYPE : type de volume Azure Disk créé par la ressource StorageClass.

    Par exemple, le code YAML suivant crée une nouvelle ressource StorageClass par défaut qui provisionne des volumes Azure Disk SSD premium.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: my-custom-default-class
      annotations:
        storageclass.kubernetes.io/is-default-class: "true"
    provisioner: disk.csi.azure.com
    volumeBindingMode: WaitForFirstConsumer
    parameters:
      skuName: Premium_LRS
    
  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 Azure 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

Étapes suivantes