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 :
Créez une ressource StorageClass personnalisée qui référence le pilote dans son champ
provisioner
.Pour provisionner l'espace de stockage, vous pouvez :
- référencer la StorageClass dans la spécification
volumeClaimTemplates
d'un objet StatefulSet ; - la définir en tant que StorageClass par défaut du cluster.
- référencer la StorageClass dans la spécification
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
- En savoir plus sur les concepts de stockage Google Distributed Cloud
- Définir une StorageClass par défaut pour votre cluster