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.
- 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
- À partir de votre répertoire
anthos-aws
, utilisezanthos-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.
À partir de votre répertoire
anthos-aws
, utilisezanthos-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.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
.
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.
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
.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.
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
.
- CLAIM_NAME par le nom de l'objet PersistentVolumeClaim que vous avez spécifié précédemment. Par exemple,
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.
Vérifiez que le pod de l'objet StatefulSet affiche l'état
Running
aveckubectl 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
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.Pour vous assurer que votre système de fichiers EFS est installé, vérifiez le contenu du fichier
out.txt
à l'aide de 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
L'interface système revient à votre ordinateur local.
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
- Découvrez d'autres façons d'utiliser les volumes EFS dans les exemples
aws-efs-csi-driver
.