Utiliser une ressource EFS

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
  1. 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.

  1. 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.
  1. 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 :

  1. 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.

  2. 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.

  3. Vérifiez que le pod de l'objet StatefulSet affiche l'état Running avec kubectl 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
    
  4. 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.

  5. Pour vérifier que votre ressource EFS est installée, vérifiez le contenu du fichier out.txt avec la commande tail.

    tail /efs-data/out.txt
    

    La sortie contient les heures récentes en temps UTC.

  6. 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