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 :
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.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.
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
- Découvrez les concepts de stockage de GKE.