Comment puis-je utiliser le stockage permanent dans Amazon EKS ?

Date de la dernière mise à jour : 29/09/2020

Je souhaite utiliser le stockage permanent dans Amazon Elastic Kubernetes Service (Amazon EKS).

Brève description

Vous pouvez configurer un stockage permanent dans Amazon EKS en utilisant l'une des options suivantes :

Pour utiliser l'une de ces options, suivez les étapes de l'une des sections suivantes

  • Option A : déployer et tester le pilote CSI Amazon EBS
  • Option B : déployer et tester le pilote CSI Amazon EFS

Remarque : kubectl version 1.14 ou ultérieure est nécessaire pour les commandes de cet article. Pour voir quelle version de kubectl vous avez, exécutez la commande kubectl version --client --short.

Solution

Remarque : Si vous recevez des erreurs lors de l'exécution de commandes depuis l'interface de ligne de commande AWS (AWS CLI), veillez à utiliser la version la plus récente de l'interface de ligne de commande AWS CLI.

Avant de suivre les étapes de l'une ou l'autre des sections, vous devez :

  1. Installez l'AWS CLI.
  2. Définir les autorisations AWS Identity and Access Management (IAM) pour créer et attacher une stratégie au rôle de nœud de travail Amazon EKS NodeInstanceRole.
  3. Créer votre cluster Amazon EKS et joindre vos nœuds de travail au cluster.
    Remarque : Pour vérifier que vos nœuds de travail sont attachés à votre cluster, exécutez la commande kubectl get nodes.

Option A : déployer et tester le pilote CSI Amazon EBS

Déployer le pilote CSI Amazon EBS :

1.    Pour télécharger un exemple de stratégie IAM avec des autorisations qui permettent à vos nœuds de travail de créer et de modifier des volumes Amazon EBS, exécutez la commande suivante :

curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-ebs-csi-driver/v0.4.0/docs/example-iam-policy.json

2.    Pour créer une stratégie IAM appelée Amazon_EBS_CSI_Driver, exécutez la commande suivante :

aws iam create-policy --policy-name Amazon_EBS_CSI_Driver \--policy-document file://example-iam-policy.json

3.    Pour attacher votre nouvelle stratégie IAM à NodeInstanceRole, exécutez la commande suivante :

aws iam attach-role-policy \
--policy-arn arn:aws:iam::111122223333:policy/Amazon_EBS_CSI_Driver \
--role-name eksctl-alb-nodegroup-ng-xxxxxx-NodeInstanceRole-xxxxxxxxxx

Remarque : remplacez l'Amazon Resource Name (ARN) de la stratégie par l'ARN de la stratégie créée à l'étape 2 précédente. Remplacez le nom du rôle par NodeInstanceRole.

4.    Pour déployer le pilote CSI Amazon EBS, exécutez la commande suivante :

kubectl apply -k "github.com/kubernetes-sigs/aws-ebs-csi-driver/deploy/kubernetes/overlays/stable/?ref=master"

Tester le pilote CSI Amazon EBS :

Vous pouvez tester votre pilote CSI Amazon EBS avec une application qui utilise la mise en service dynamique. Le volume Amazon EBS est mis en service à la demande par un pod qui en a besoin.

1.    Pour cloner le référentiel aws-ebs-csi-driver à partir d'AWS GitHub, exécutez la commande suivante :

git clone https://github.com/kubernetes-sigs/aws-ebs-csi-driver.git

2.    Pour remplacer votre répertoire de travail par le dossier qui contient les fichiers de test du pilote Amazon EBS, exécutez la commande suivante :

cd aws-ebs-csi-driver/examples/kubernetes/dynamic-provisioning/

3.    Pour créer les ressources Kubernetes requises pour les tests, exécutez la commande suivante :

kubectl apply -f specs/

Remarque : la commande kubectl crée un objet StorageClass, PersistentVolumeClaim (PVC) et un pod. Le pod fait référence au PVC. Un volume Amazon EBS est mis en service uniquement lorsque le pod est créé.

4.    Pour afficher le volume persistant créé à la suite du pod qui fait référence au PVC, exécutez la commande suivante :

kubectl get persistentvolumes

5.    Pour afficher des informations sur le volume persistant, exécutez la commande suivante :

kubectl describe persistentvolumes pv_name

Remarque : remplacez pv_name par le nom du volume persistant renvoyé à l'étape 4 précédente. La valeur de la propriété Source.VolumeHandle dans la sortie correspond à l'ID du volume Amazon EBS physique créé dans votre compte.

6.    Pour vérifier que le pod écrit correctement les données sur le volume, exécutez la commande suivante :

kubectl exec -it app cat /data/out.txt

Remarque : La sortie de la commande affiche la date et l'heure actuelles stockées dans le fichier /data/out.txt qui se compose du jour, du mois, de la date et de l'heure.

Option B : déployer et tester le pilote CSI Amazon EFS

Déployer le pilote CSI Amazon EFS :

Le pilote CSI Amazon EFS permet à plusieurs pods d'écrire sur un volume en même temps avec le mode ReadWriteMany.

1.    Pour déployer le pilote CSI Amazon EFS, exécutez la commande suivante :

kubectl apply -k "github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=master"

2.    Pour obtenir l'ID de VPC de votre cluster Amazon EKS, exécutez la commande suivante :

aws eks describe-cluster --name cluster_name --query "cluster.resourcesVpcConfig.vpcId" --output text

3.    Pour obtenir la plage d'adresses CIDR de votre cluster VPC, exécutez la commande suivante :

aws ec2 describe-vpcs --vpc-ids vpc-id --query "Vpcs[].CidrBlock" --output text

Remarque : remplacez le nom du VPC par l'ID du VPC.

4.    Pour créer un groupe de sécurité qui autorise le trafic NFS (Network File System) entrant pour vos points de montage Amazon EFS, exécutez la commande suivante :

aws ec2 create-security-group --description efs-test-sg --group-name efs-sg --vpc-id VPC_ID

Remarque : remplacez VPC_ID par la sortie de l'étape 2 précédente. Enregistrez le GroupId pour une utilisation ultérieure.

5.    Pour ajouter une règle entrante NFS afin d'autoriser les ressources de votre VPC à communiquer avec votre EFS, exécutez la commande suivante :

aws ec2 authorize-security-group-ingress --group-id sg-xxx  --protocol tcp --port 2049 --cidr VPC_CIDR

Remarque : remplacez VPC_CIDR par la sortie de l'étape 3 précédente.

6.    Pour créer un système de fichiers Amazon EFS pour votre cluster Amazon EKS, exécutez la commande suivante :

aws efs create-file-system --creation-token eks-efs

Remarque : notez FileSystemId pour une utilisation ultérieure.

7.    Pour créer une cible de montage pour EFS, exécutez la commande suivante dans toutes les zones de disponibilité où vos nœuds de travail s'exécutent :

aws efs create-mount-target --file-system-id FileSystemId --subnet-id SubnetID --security-group GroupID

Remarque : Remplacez FileSystemId, SubnetID et GroupId par le FileSystemId que vous avez créé aux étapes 6 et 7 précédentes.

Remarque : Vous pouvez créer des cibles de montage pour toutes les zones de disponibilité dans lesquelles les nœuds de travail sont lancés. Ensuite, toutes les instances Amazon Elastic Compute Cloud (Amazon EC2) de la zone de disponibilité disposant de la cible de montage peuvent utiliser le système de fichiers.

L'EFS et ses cibles de montage sont désormais en cours d'exécution et prêts à être utilisés par les pods du cluster.

Tester le pilote CSI Amazon EFS :

Vous pouvez tester le pilote CSI Amazon EFS en déployant deux pods qui écrivent dans le même fichier.

1.    Pour cloner le référentiel aws-efs-csi-driver à partir d'AWS GitHub, exécutez la commande suivante :

git clone https://github.com/kubernetes-sigs/aws-efs-csi-driver.git

2.    Pour remplacer votre répertoire de travail par le dossier qui contient les fichiers de test du pilote CSI Amazon EFS, exécutez la commande suivante :

cd aws-efs-csi-driver/examples/kubernetes/multiple_pods/

3.    Pour récupérer votre ID de système de fichiers Amazon EFS créé précédemment, exécutez la commande suivante :

aws efs describe-file-systems --query "FileSystems[*].FileSystemId" --output text

Remarque : si la commande précédente renvoie plusieurs résultats, vous pouvez utiliser l'ID de système de fichiers EFS que vous avez enregistré précédemment.

4.    Modifiez le fichier specs/pv.yaml et remplacez la valeur spec.sci.volumeHandle par votre Amazon EFS FileSystemId des étapes précédentes.

5.    Pour créer les ressources Kubernetes requises pour les tests, exécutez la commande suivante :

kubectl apply -f specs/

Remarque : la commande kubectl de l'étape 5 précédente crée une classe de stockage Amazon EFS, un PVC, du volume persistant et deux pods (app1 et app2).

6.    Pour tester si les deux pods écrivent des données dans le fichier, attendez environ une minute, puis exécutez les commandes suivantes :

kubectl exec -it app1 -- tail /data/out1.txt 
kubectl exec -it app2 -- tail /data/out1.txt

La sortie affiche la date actuelle écrite en /data/out1.txt par les deux pods.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?