GKE sur AWS déploie automatiquement les CSI (Container Storage Interface) Amazon Elastic Block Store (EBS) et Amazon Elastic File Store (EFS).
Les versions du pilote CSI EBS et du pilote CSI EFS sont liées à 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 ressource StorageClass par défaut
La création d'un objet PersistentVolumeClaim sans champ spec.storageClassName
définit le provisionnement d'un volume SSD à usage général (gp2) en utilisant 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 ressource StorageClass préinstallée
Le pilote CSI pour EBS de GKE sur AWS inclut également la ressource StorageClass premium-rwo
, qui provisionne des volumes SSD IOPS provisionnés (io1
) offrant un débit supérieur.
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 ressource StorageClass personnalisée
Si ni la ressource StorageClass par défaut, ni la ressource StorageClass premium-rwo
ne répondent à vos besoins, vous pouvez créer des ressources StorageClass supplémentaires pour les volumes EBS ou utiliser des pilotes CSI (Container Storage Interface).
Indiquez si vous utilisez un volume EBS ou un autre pilote CSI.
Volume EBS
Cet onglet décrit comment 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 allowVolumeExpansion: true 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 allowVolumeExpansion: true volumeBindingMode: WaitForFirstConsumer parameters: csi.storage.k8s.io/fsType: xfs type: st1
Ressource StorageClass EFS personnalisée
Cet onglet décrit comment créer une ressource StorageClass personnalisée pour l'approvisionneur CSI pour EFS. Pour obtenir la liste des conditions préalables à l'utilisation de cette ressource StorageClass, consultez la page Utiliser une ressource EFS. La page du pilote CSI pour EFS présente des paramètres StorageClass supplémentaires en plus de ceux du fichier manifeste suivant.
Copiez le fichier manifeste YAML suivant dans un fichier nommé
my-custom-class.yaml
.kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: <var>EFS_STORAGE_CLASS_NAME</var> provisioner: efs.csi.aws.com mountOptions: - tls parameters: provisioningMode: efs-ap fileSystemId: EFS_ID directoryPerms: "700"
Remplacez :
- EFS_STORAGE_CLASS_NAME par le nom de l'objet
StorageClass
- EFS_ID par votre ID de système de fichiers EFS (par exemple, fs-12345678a).
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 allowVolumeExpansion: true 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.- EFS_STORAGE_CLASS_NAME par le nom de l'objet
Appliquez le code YAML à votre cluster.
kubectl apply -f my-custom-class.yaml
Créer un objet PersistentVolumeClaim avec une ressource 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 ressource 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 des pilotes CSI supplémentaires.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 allowVolumeExpansion: true 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 SSD à usage général (gp3).
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 allowVolumeExpansion: true volumeBindingMode: WaitForFirstConsumer parameters: type: gp3
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
Apprenez-en plus sur les volumes persistants et le provisionnement dynamique dans GKE.
Installez des pilotes CSI supplémentaires sur GKE sur AWS.
Déployez votre première charge de travail avec le guide de démarrage rapide.