Le système Elastic File System (EFS) est le mécanisme AWS sous-jacent permettant de fournir un espace de stockage (espace disque) à votre cluster. Une ressource PersistentVolume est une ressource de cluster qui rend le stockage EFS disponible pour vos charges de travail et garantit qu'il persiste même lorsqu'aucune charge de travail n'y est connectée. Cet article explique comment une charge de travail peut accéder à une ressource PersistentVolume avec un objet PersistentVolumeClaim.
GKE sur AWS est compatible avec le provisionnement statique des ressources PersistentVolume pour toutes les versions de Kubernetes compatibles. Pour les clusters de version Kubernetes 1.24 ou ultérieure, GKE sur AWS est également compatible avec le provisionnement dynamique. Pour utiliser le provisionnement dynamique, votre administrateur de cluster doit le configurer. Pour en savoir plus, consultez la page Configurer un objet PersistentVolume
.
Créer un objet PersistentVolumeClaim
Choisissez l'onglet approprié ci-dessous selon que vous souhaitez que votre charge de travail se connecte à un volume persistant provisionné de manière statique ou dynamique.
Statique
Ces instructions partent du principe que votre administrateur de cluster a déjà provisionné au moins une ressource PersistentVolume. Pour accéder à cette ressource PersistentVolume et utiliser son EFS sous-jacent avec vos charges de travail, créez un objet PersistentVolumeClaim.
Pour créer un objet PersistentVolumeClaim pour une ressource PersistentVolume provisionnée de manière statique, copiez le fichier manifeste YAML suivant dans un fichier nommé efs-claim.yaml
.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: CLAIM_NAME
spec:
accessModes:
- ReadWriteMany
storageClassName: "" # Leave as empty string for static provisioning
resources:
requests:
storage: 5Gi
Remplacez :
- CLAIM_NAME : nom que vous avez choisi d'associer à votre PersistentVolumeClaim, par exemple
efs-claim1
. Laissez ce champ vide pour associer à la classe de stockage par défaut
Appliquez le code YAML à votre cluster.
kubectl apply -f efs-claim.yaml
La sortie confirme la création de l'objet PersistentVolumeClaim.
persistentvolumeclaim/CLAIM_NAME created
Dynamique
Ces instructions supposent que votre administrateur de cluster a déjà provisionné au moins une ressource StorageClass pour le provisionnement dynamique. Pour créer une ressource PersistentVolume provisionnée de manière dynamique avec cette ressource StorageClass et utiliser le point d'accès EFS sous-jacent avec vos charges de travail, créez un objet PersistentVolumeClaim.
Pour créer un objet PersistentVolumeClaim, procédez comme suit : Le pilote CSI EFS utilise cet objet PersistentVolumeClaim avec la ressource StorageClass indiquée pour provisionner de manière dynamique une ressource PersistentVolume.
- Copiez le fichier manifeste YAML suivant dans un fichier nommé
efs-claim.yaml
.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: CLAIM_NAME
spec:
accessModes:
- ReadWriteMany
storageClassName: "EFS_STORAGE_CLASS_NAME"
resources:
requests:
storage: 5Gi
Remplacez :
- CLAIM_NAME : nom que vous avez choisi pour votre PersistentVolumeClaim, par exemple
efs-claim1
. - EFS_STORAGE_CLASS_NAME : nom de la ressource StorageClass que vous souhaitez lier à l'objet PersistentVolumeClaim. Laissez ce champ vide pour la lier à la classe de stockage par défaut.
Appliquez le code YAML à votre cluster.
kubectl apply -f efs-claim.yaml
La sortie confirme la création de l'objet PersistentVolumeClaim.
persistentvolumeclaim/CLAIM_NAME created
Créer un StatefulSet
Après avoir créé un objet PersistentVolumeClaim, vous pouvez l'utiliser dans une charge de travail.
Cette section crée un exemple de StatefulSet qui utilise un objet PersistentVolumeClaim.
Vous pouvez également utiliser un objet PersistentVolumeClaim avec d'autres types de charges de travail, comme des pods et des déploiements, en référençant la revendication dans spec.volumes
.
Pour créer un StatefulSet qui installe la ressource EFS référencée dans votre objet PersistentVolumeClaim, procédez comme suit :
Copiez le fichier manifeste YAML suivant dans un fichier nommé
efs-statefulset.yaml
. Cet exemple de fichier manifeste lance un conteneur Linux Ubuntu qui installe votre ressource EFS dans/efs-data
. Le conteneur écrit toutes les cinq secondes dans un fichier de votre ressource EFS nomméout.txt
.apiVersion: apps/v1 kind: StatefulSet metadata: name: efs-shell spec: selector: matchLabels: app: test-efs serviceName: efs-app replicas: 1 template: metadata: labels: app: test-efs spec: terminationGracePeriodSeconds: 10 containers: - name: linux image: ubuntu:bionic command: ["/bin/sh"] args: ["-c", "while true; do echo $(date -u) >> /efs-data/out.txt; sleep 5; done"] volumeMounts: - name: efs-volume mountPath: /efs-data volumes: - name: efs-volume persistentVolumeClaim: claimName: CLAIM_NAME
Remplacez CLAIM_NAME par le nom de l'objet PersistentVolumeClaim que vous avez spécifié précédemment, par exemple
efs-claim1
.Appliquez le code YAML à votre cluster.
kubectl apply -f efs-statefulset.yaml
La sortie confirme la création de l'objet StatefulSet.
statefulset.apps/efs-shell created
L'objet StatefulSet peut prendre plusieurs minutes pour télécharger et lancer l'image de conteneur.
Vérifiez que le pod de l'objet StatefulSet affiche l'état
Running
aveckubectl get pods
.kubectl get pods -l app=test-efs
La sortie inclut le nom du pod et son état. Dans la réponse suivante, le nom du pod est
efs-shell-0
.NAME READY STATUS RESTARTS AGE efs-shell-0 1/1 Running 0 1m
Une fois que le pod est en cours d'exécution, utilisez
kubectl exec
pour vous connecter au pod hébergeant l'objet StatefulSet.kubectl exec -it efs-shell-0 -- bash
La commande
kubectl
lance un shell sur le pod.Pour vérifier que votre ressource EFS est installée, vérifiez le contenu du fichier
out.txt
avec la commandetail
.tail /efs-data/out.txt
La sortie contient les heures récentes en temps UTC.
Déconnectez-vous du pod à l'aide de la commande
exit
.exit
Le shell revient à votre ordinateur local.
Effectuer un nettoyage
Pour supprimer l'objet StatefulSet, utilisez kubectl delete
.
kubectl delete -f efs-statefulset.yaml
Étapes suivantes
- Apprenez à configurer une ressource EFS.
- Découvrez comment utiliser des ressources StorageClass avec vos charges de travail.