Utiliser des systèmes de fichiers EFS

Anthos clusters on AWS de version 1.6 ou ultérieure sont compatibles avec Elastic File System (EFS) AWS par le biais du pilote CSI EFS. Cet article explique comment installer un système de fichiers EFS existant en tant qu'objet PersistentVolume sur vos clusters d'utilisateur.

Avant de commencer

Pour effectuer la procédure de cet article, vous aurez besoin des éléments suivants :

  • Un système de fichiers EFS existant dans le même VPC AWS que votre installation Anthos clusters on AWS.
  • Au moins une cible d'installation EFS dans le même VPC AWS que votre installation Anthos clusters on AWS.
  • Toutes vos cibles d'installation EFS doivent appartenir aux éléments suivants :
    • Sous-réseaux privés pour votre installation Anthos clusters on AWS. Par défaut, Anthos clusters on AWS crée des sous-réseaux nommés gke-CLUSTER_ID-private-AWS_ZONE, où CLUSTER_ID est votre ID de cluster d'utilisateur et AWS_ZONE est la zone de disponibilité AWS.
    • Groupe de sécurité du pool de nœuds. Par défaut, Anthos clusters on AWS crée des pools de nœuds nommés gke-CLUSTER_ID-nodepool, où CLUSTER_ID est votre ID de cluster d'utilisateur.
  • À partir de votre répertoire anthos-aws, utilisez anthos-gke pour basculer vers le contexte de votre cluster d'utilisateur.
    cd anthos-aws
    env HTTPS_PROXY=http://localhost:8118 \
      anthos-gke aws clusters get-credentials CLUSTER_NAME
    Remplacez CLUSTER_NAME par le nom de votre cluster d'utilisateur.

Utiliser un objet PersistentVolume EFS

Pour utiliser un système de fichiers EFS en tant qu'objet PersistentVolume avec vos clusters d'utilisateur, vous devez d'abord créer un objet PersistentVolume, puis un objet PersistentVolumeClaim que vous référencez dans votre charge de travail.

Créer un objet PersistentVolume

Pour créer un objet PersistentVolume avec le pilote CSI EFS, procédez comme suit.

  1. À partir de votre répertoire anthos-aws, utilisez anthos-gke pour basculer vers le contexte de votre cluster d'utilisateur.

    cd anthos-aws
    env HTTPS_PROXY=http://localhost:8118 \
      anthos-gke aws clusters get-credentials CLUSTER_NAME
    Remplacez CLUSTER_NAME par le nom de votre cluster d'utilisateur.

  2. La configuration PersistentVolume que vous utilisez varie selon que vous vous connectez directement à Elastic File System ou via un point d'accès. Indiquez si vous vous connectez directement à Elastic File System ou via un point d'accès.

    Se connecter directement

    Copiez le fichier manifeste YAML suivant dans un fichier nommé efs-volume.yaml. Le fichier manifeste fait référence à la classe de stockage EFS que vous avez créée précédemment.

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: VOLUME_NAME
    spec:
      capacity:
        # Note: storage capacity is not used by the EFS CSI driver.
        # It is required by the PersistentVolume spec.
        storage: 5Gi
      volumeMode: Filesystem
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      storageClassName: "" # storageClassName is not required, see note in the following section.
      claimRef:
        name: CLAIM_NAME
        namespace: default
      csi:
        driver: efs.csi.aws.com
        volumeHandle: EFS_FILE_SYSTEM_ID
    

    Remplacez les éléments suivants :

    • VOLUME_NAME par le nom du volume persistant.
    • CLAIM_NAME par le nom que vous souhaitez utiliser pour l'objet PersistentVolumeClaim.
    • EFS_FILE_SYSTEM_ID par votre ID de système de fichiers EFS. Exemple : fs-12345678a.

    Point d'accès

    Copiez le fichier manifeste YAML suivant dans un fichier nommé efs-volume.yaml. Le fichier manifeste fait référence à la classe de stockage EFS que vous avez créée précédemment.

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: VOLUME_NAME
    spec:
      capacity:
        # Note: storage capacity is not used by the EFS CSI driver.
        # It is required by the PersistentVolume spec.
        storage: 5Gi
      volumeMode: Filesystem
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      storageClassName: "" # storageClassName is not required, see note in the following section.
      claimRef:
        name: CLAIM_NAME
        namespace: default
      csi:
        driver: efs.csi.aws.com
        volumeHandle: EFS_FILE_SYSTEM_ID::ACCESS_POINT_ID
    

    Remplacez les éléments suivants :

    • VOLUME_NAME par le nom du volume persistant.
    • CLAIM_NAME par le nom que vous souhaitez utiliser pour l'objet PersistentVolumeClaim.
    • EFS_FILE_SYSTEM_ID par votre ID de système de fichiers EFS. Exemple : fs-12345678a.
    • ACCESS_POINT_ID par l'ID de votre point d'accès. Exemple : fsap-1234567890abcde.
  3. Appliquez le code YAML à votre cluster d'utilisateur.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f efs-volume.yaml
    

    La sortie confirme la création de l'objet PersistentVolume.

    persistentvolume/VOLUME_NAME created
    

Créer un objet PersistentVolumeClaim

Pour utiliser votre système de fichiers EFS avec vos charges de travail, vous devez créer un objet PersistentVolumeClaim.

  1. Pour créer l'objet PersistentVolumeClaim, 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: ""
      resources:
        requests:
          storage: 5Gi
    

    Remplacez CLAIM_NAME par le nom de votre objet PersistentVolumeClaim. Par exemple, efs-claim1.

  2. Appliquez le code YAML à votre cluster d'utilisateur.

    env HTTPS_PROXY=http://localhost:8118 \
      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. Les étapes de cette section créent un exemple d'objet StatefulSet avec votre système de fichiers EFS installé. 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 objet StatefulSet qui installe le système de fichiers EFS référencé 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 Ubuntu Linux qui installe votre système de fichiers EFS sous /efs-data. Le conteneur écrit toutes les cinq secondes dans un fichier de votre système de fichiers 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 les éléments suivants :

    • 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 d'utilisateur.

    env HTTPS_PROXY=http://localhost:8118 \
     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 le téléchargement de l'image de conteneur et le lancement.

  3. Vérifiez que le pod de l'objet StatefulSet affiche l'état Running avec kubectl get pods.

    env HTTPS_PROXY=http://localhost:8118 \
      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.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl exec -it efs-shell-0 -- bash
    

    La commande kubectl lance une interface système sur le pod.

  5. Pour vous assurer que votre système de fichiers EFS est installé, vérifiez le contenu du fichier out.txt à l'aide de 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
    

    L'interface système revient à votre ordinateur local.

  7. Pour supprimer l'objet StatefulSet, utilisez kubectl delete.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl delete -f efs-statefulset.yaml
    

Nettoyer

Pour supprimer les ressources créées dans les sections précédentes, exécutez les commandes suivantes :

env HTTPS_PROXY=http://localhost:8118 \
  kubectl delete -f efs-statefulset.yaml
env HTTPS_PROXY=http://localhost:8118 \
  kubectl delete -f efs-claim.yaml
env HTTPS_PROXY=http://localhost:8118 \
  kubectl delete -f efs-volume.yaml

Étapes suivantes