Installer manuellement un pilote CSI


Cette page explique comment installer un pilote de stockage CSI (Container Storage Interface) sur des clusters Google Kubernetes Engine (GKE) standards. Cette page ne s'applique pas aux clusters GKE Autopilot, qui utilisent automatiquement le pilote CSI de disque persistant Compute Engine.

Si vous utilisez le pilote CSI de disque persistant Compute Engine dans votre cluster standard, nous vous recommandons de déployer automatiquement le pilote pour réduire vos coûts de gestion.

Présentation

CSI est une API standard Open Source qui permet à Kubernetes d'exposer des systèmes de stockage arbitraires à des charges de travail en conteneur. 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.

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.

Vérifier l'installation d'un pilote

Une fois que vous avez installé un pilote CSI, vous pouvez vérifier l'installation en exécutant l'une des commandes suivantes, en fonction de la version de GKE de votre cluster :

1.14+

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

1.13.x

kubectl get nodes \
-o jsonpath='{.items[*].metadata.annotations.csi\.volume\.kubernetes\.io\/nodeid}'

Utiliser un pilote CSI

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

  1. Créez une StorageClass Kubernetes qui référence le pilote dans son champ provisioner, si aucune StorageClass n'est créée pour vous lors de l'installation du pilote. Certains pilotes CSI déploient une StorageClass lorsque vous les installez.

  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.

Voici une StorageClass simple nommée premium-rwo qui utilise un pilote CSI fictif, csi.example.com, comme 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 StorageClass dans la spécification volumeClaimTemplates d'un StatefulSet, Kubernetes fournit un espace de stockage stable à l'aide de PersistentVolumes. 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