Cette rubrique explique comment installer un pilote Container Storage Interface (CSI) pour les clusters GKE On-Prem.
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 GKE On-Prem, 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 spécifiques au fournisseur, qui ont toujours été compilés dans des fichiers 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
Vérifiez les plug-ins de volume dans l'arborescence de Kubernetes et vérifiez si Kubernetes inclut déjà votre pilote.
Par défaut, GKE on-Prem 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 l'une des commandes suivantes, en fonction de la version GKE On-Prem de votre cluster :
1.2.0-gke.5
kubectl get csinodes \ -o jsonpath='{range .items[*]} {.metadata.name}{": "} {range .spec.drivers[*]} {.name}{"\n"} {end}{end}'
1.1.0-gke.6
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 :
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 ressource 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 ressource 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 classe StorageClass en fonction de ses propriétés (telles que "rapide" ou "hautement répliqué"), plutôt que du nom du pilote ou du système spécifique sous-jacent. Nommer la classe StorageClass en fonction de ses propriétés vous permet de créer des classes StorageClass portant le même nom sur plusieurs clusters et environnements, et permet à vos applications d'obtenir du 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 fast
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: fast 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
Étapes suivantes
- En savoir plus sur les concepts de stockage de GKE On-Prem.
- Définir une StorageClass par défaut pour votre cluster