GKE sur AWS déploie automatiquement le pilote CSI (Container Storage Interface) pour Amazon Elastic Block Store (EBS) pour provisionner et gérer les volumes Amazon EBS dans vos clusters.
La version du pilote CSI pour EBS de GKE sur AWS est liée à une version Kubernetes de GKE sur AWS. La version du pilote est généralement la dernière disponible lors de la publication de la version de GKE. Lorsque le cluster est mis à niveau, les pilotes sont automatiquement mis à jour.
Utiliser la StorageClass par défaut
La création d'un objet PersistentVolumeClaim sans le champ spec.storageClassName
définit le provisionnement d'un volume gp2
à l'aide de la ressource StorageClass par défaut du pilote CSI pour EBS de GKE sur AWS.
Le code YAML suivant crée un objet PersistentVolumeClaim (PVC) nommé mypvc
avec une taille de 30 GiB.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi
Utiliser une autre StorageClass préinstallée
Le pilote CSI pour EBS de GKE sur AWS inclut également la ressource StorageClass premium-rwo
, qui provisionne des volumes io1
à haut débit.
Vous pouvez l'utiliser en le spécifiant dans le fichier spec.storageclassName
du PVC.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi
storageclassName: premium-rwo
Utiliser une StorageClass personnalisée
Vous pouvez créer des ressources StorageClasses supplémentaires pour les volumes EBS ou utiliser des pilotes CSI (Container Storage Interface).
Déterminez si vous allez utiliser un volume EBS ou un pilote CSI spécifique.
Volume EBS
Vous pouvez créer votre propre ressource StorageClass personnalisée qui spécifie un type de volume EBS, un type de système de fichiers et d'autres paramètres. Vous trouverez des paramètres StorageClass supplémentaires sur la page GitHub du pilote CSI pour EBS de GKE sur AWS.
Pour configurer une ressource StorageClass personnalisée, copiez le fichier manifeste YAML suivant dans un fichier nommé
my-custom-class.yaml
.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: CLASS_NAME provisioner: ebs.csi.aws.com volumeBindingMode: WaitForFirstConsumer
Remplacez
CLASS_NAME
par le nom de votre nouvelle ressource StorageClass.Par exemple, le code YAML suivant crée une nouvelle ressource StorageClass qui provisionne des volumes EBS HDD à débit optimisé formatés avec le système de fichiers XFS.
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: my-custom-class provisioner: ebs.csi.aws.com volumeBindingMode: WaitForFirstConsumer parameters: csi.storage.k8s.io/fsType: xfs type: st1
Pilote CSI
Vous pouvez spécifier un autre pilote CSI dans le champ
provisioner
.Pour créer une ressource StorageClass avec un autre pilote CSI, vous pouvez utiliser l'exemple YAML ci-dessous.
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: CLASS_NAME provisioner: CSI_DRIVER_NAME volumeBindingMode: WaitForFirstConsumer parameters: ...
Remplacez les éléments suivants :
CSI_DRIVER_NAME
par le nom du pilote CSI, par exemple,csi.example.com
CLASS_NAME
par le nom de la ressource StorageClass (par exemple,my-custom-class
)
Configurez les sous-champs sous
parameters
en fonction de votre pilote CSI.Appliquez le code YAML à votre cluster.
kubectl apply -f my-custom-class.yaml
Créer un PersistentVolumeClaim avec une StorageClass personnalisée
Une fois créée, vous pouvez spécifier votre ressource StorageClass personnalisée dans un objet PVC. L'exemple ci-dessous crée un objet PVC nommé
my-pvc
qui référence la ressource StorageClassmy-custom-class
.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 30Gi storageclassName: my-custom-class
Définir la StorageClass par défaut
GKE sur AWS utilise une ressource StorageClass par défaut appelée standard-rwo
qui provisionne les volumes EBS gp2. Vous pouvez remplacer la valeur par défaut par une autre ressource StorageClass.
Pour modifier la ressource StorageClass par défaut, procédez comme suit :
Mettez à jour l'annotation
is-default-class
de la ressource StorageClassstandard-rwo
aveckubectl patch
.kubectl patch storageclass standard-rwo -p \ '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
Créez une ressource StorageClass comportant l'annotation
storageclass.kubernetes.io/is-default-class: true
.L'exemple suivant de ressource StorageClass utilise le pilote
ebs.csi.aws.com
. Pour installer un autre pilote de stockage, consultez la section Installer un pilote CSI.Copiez le fichier YAML suivant dans un fichier nommé
my-custom-class.yaml
.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: CLASS_NAME annotations: storageclass.kubernetes.io/is-default-class: true provisioner: ebs.csi.aws.com volumeBindingMode: WaitForFirstConsumer parameters: type: EBS_VOLUME_TYPE
Remplacez les éléments suivants :
EBS_VOLUME_TYPE
: type de volume EBS AWS créé par la StorageClass.CLASS_NAME
par le nom de votre nouvelle StorageClass
Par exemple, le code YAML suivant crée une nouvelle ressource StorageClass par défaut qui provisionne des volumes EBS HDD à débit optimisé formatés avec le système de fichiers XFS.
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: my-custom-default-class annotations: storageclass.kubernetes.io/is-default-class: "true" provisioner: ebs.csi.aws.com volumeBindingMode: WaitForFirstConsumer parameters: csi.storage.k8s.io/fsType: xfs type: st1
Appliquez la nouvelle classe personnalisée à votre cluster.
kubectl apply -f my-custom-class.yaml
Après avoir appliqué ce fichier manifeste, GKE sur AWS utilise la ressource StorageClass my-custom-default-class
pour les nouvelles requêtes de stockage.
Référencer la ressource StorageClass dans un StatefulSet
Pour utiliser votre nouvelle StorageClass, vous pouvez faire référence à cette ressource 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. Une fois le volume provisionné, Kubernetes crée automatiquement un PV.
L'objet StatefulSet suivant référence la StorageClass my-custom-class
et provisionne un volume de 1 gibioctet :
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
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: my-custom-class # This field references the existing StorageClass
Étape suivante
Découvrez les volumes persistants dans GKE.
Installez les pilotes de stockage dans votre cluster GKE sur AWS.
Déployez votre première charge de travail avec le guide de démarrage rapide.