Installer un pilote Container Storage Interface (CSI)

Cette page explique comment installer un pilote de stockage CSI (Container Storage Interface) sur des clusters Google Distributed Cloud.

Présentation

Container Storage Interface (CSI) est une API standard Open Source, compatible avec la plupart des fournisseurs de stockage connus, qui permet à Kubernetes d'exposer des systèmes de stockage arbitraires à des charges de travail conteneurisées.

Les volumes Kubernetes sont gérés par des pilotes de stockage propres aux fournisseurs, qui ont toujours été compilés dans des binaires Kubernetes. Auparavant, vous ne pouviez pas utiliser un pilote de stockage qui n'était pas inclus dans Kubernetes. L'installation d'un pilote CSI permet d'utiliser un système de stockage qui n'est pas pris en charge de manière native par Kubernetes. CSI permet également d'utiliser des fonctionnalités de stockage modernes comme les instantanés et le redimensionnement.

Pour utiliser un pilote CSI, vous devez créer une StorageClass Kubernetes. Vous définissez le pilote CSI en tant que fournisseur pour la StorageClass. Vous pouvez ensuite définir la StorageClass comme valeur par défaut du cluster ou configurer vos charges de travail à l'aide de la StorageClass (exemple StatefulSet).

Installer le pilote CSI d'un fournisseur

D'autres fournisseurs de stockage développent leurs propres pilotes CSI et sont chargés de fournir des instructions d'installation. Dans des cas simples, l'installation peut uniquement impliquer le déploiement de fichiers manifestes sur vos clusters. Consultez la liste des pilotes CSI dans la documentation CSI.

Pour le stockage en production, nous vous recommandons d'installer un pilote CSI d'un partenaire de stockage GDC Ready.

Vérifier l'installation d'un pilote

Après avoir installé un pilote CSI, vous pouvez vérifier l'installation en exécutant la commande suivante :

kubectl get csinodes -o jsonpath='{range .items[*]} \
    {.metadata.name}{": "} {range .spec.drivers[*]} {.name}{"\n"} {end}{end}'

Utiliser un pilote CSI

Pour utiliser un pilote CSI, procédez comme suit :

  1. Créez une ressource StorageClass personnalisée qui référence le pilote dans son champ provisioner.

  2. Pour provisionner l'espace de stockage, vous pouvez :

Points à prendre en compte concernant les StorageClasses sauvegardées par un pilote CSI

Lorsque vous créez une StorageClass, tenez compte des points suivants :

  • La documentation du pilote CSI doit inclure les paramètres propres à ce pilote que vous fournissez à votre StorageClass, y compris le nom de l'approvisionneur.
  • Vous devez nommer la StorageClass en fonction de ses propriétés, plutôt que du nom du pilote ou du système spécifique sous-jacent. Nommer la StorageClass en fonction de ses propriétés vous permet de créer des StorageClass portant le même nom sur plusieurs clusters et environnements, et permet à vos applications d'obtenir de l'espace de stockage avec les mêmes propriétés dans les clusters.

Exemple : Référencer la StorageClass dans un StatefulSet

L'exemple suivant montre comment définir un pilote CSI dans une StorageClass, puis comment référencer la StorageClass dans une charge de travail StatefulSet. Cet exemple suppose que le pilote a déjà été installé sur le cluster.

La ressource StorageClass simple suivante, premium-rwo, utilise un pilote CSI fictif, csi.example.com, en tant qu'approvisionneur:

fast-sc.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: premium-rwo
provisioner: csi.example.com # CSI driver
parameters: # You provide vendor-specific parameters to this specification
  type: example-parameter # Be sure to follow the vendor's instructions
  datastore: my-datastore
reclaimPolicy: Retain
allowVolumeExpansion: true

Vous référencez la StorageClass 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. Dans ce cas, Kubernetes appelle le fournisseur fictif csi.example.com, qui appelle l'API du fournisseur, pour créer un volume. Une fois le volume provisionné, Kubernetes crée automatiquement un PersistentVolume pour représenter l'espace de stockage.

Voici un StatefulSet simple qui référence la StorageClass :

statefulset.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  replicas: 2
  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: premium-rwo # This field references the existing StorageClass

Étape suivante