Cette page explique comment installer un pilote de stockage Container Storage Interface (CSI) sur des clusters créés à l'aide de Google Distributed Cloud (logiciel uniquement) pour VMware.
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. Lorsque vous déployez un pilote de stockage compatible avec CSI sur un cluster, le cluster peut se connecter directement à un périphérique de stockage compatible sans passer par le stockage vSphere.
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).
Avant de commencer
Par défaut, Google Distributed Cloud utilise des datastores vSphere via le pilote intégré vsphereVolume. De plus, les pilotes intégrés pour NFS et iSCSI peuvent associer et installer des volumes existants à vos charges de travail.
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
Après avoir installé un pilote CSI, vous pouvez vérifier l'installation en exécutant la commande suivante :
kubectl get csidrivers --kubeconfig KUBECONFIG
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.
Vous trouverez ci-dessous une StorageClass simple nommée premium-rwo
qui 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: fast # 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