Comment puis-je utiliser Amazon EBS Multi-Attach pour attacher le même volume sur plusieurs charges de travail dans Amazon EKS ?
Je souhaite utiliser Amazon Elastic Block Store (Amazon EBS) Multi-Attach en vue de gérer plusieurs charges de travail sur différents clusters dans Amazon Elastic Kubernetes Service (Amazon EKS).
Brève description
Amazon EBS Multi-Attach vous permet d’attacher un volume SSD IOPS provisionnés (io1 ou io2) sur plusieurs instances dans la même zone de disponibilité. Vous pouvez utiliser Multi-Attach pour partager le stockage persistant entre plusieurs charges de travail dans différents clusters Amazon EKS.
Résolution
Important : les systèmes de fichiers standard tels que XFS et EXT4 ne sont pas conçus pour être accessibles simultanément par plusieurs serveurs. Pour garantir la résilience et la fiabilité des données à vos charges de travail de production, utilisez des systèmes de fichiers en cluster.
Avant de commencer, assurez-vous que le pilote Amazon EBS CSI est installé dans les clusters Amazon EKS requis.
Pour plus d'informations sur l'installation du pilote Amazon EBS CSI, consultez la section Utiliser le stockage de volume Kubernetes avec Amazon EBS.
Remarque : les volumes compatibles Multi-Attach peuvent être attachés sur un maximum de 16 instances Linux créées sur le système Nitro et situées dans la même zone de disponibilité.
Pour utiliser Amazon EBS Multi-Attach afin d'attacher un volume sur plusieurs charges de travail dans plusieurs clusters, procédez comme suit :
Provisionner un volume Amazon EBS
Exécutez la commande create-volume de l’AWS CLI suivante :
aws ec2 create-volume --volume-type io2 --multi-attach-enabled --size 10 --iops 2000 --region example-region --availability-zone example-az --tag-specifications 'ResourceType=volume,Tags=[{Key=purpose,Value=prod},{Key=Name,Value=multi-attach-eks}]'
Remarque : remplacez example-region par la région AWS requise. Remplacez example-az par la zone de disponibilité requise.
Important : Amazon EBS Multi-Attach peut être activé pour les volumes io2 après leur création s’ils ne sont pas attachés à des instances. Amazon EBS Multi-Attach ne peut pas être activé pour les volumes io1 une fois qu'ils ont été créés.
Récupérer l’ID du volume
Exécutez la commande describe-volumes de l’AWS CLI suivante :
aws ec2 describe-volumes --filters "Name=tag:Name,Values=multi-attach-eks*" --query "Volumes[*].{ID:VolumeId}" --region example-region
Remarque : remplacez example-region par la région AWS requise.
Créer une classe de stockage
Créez un manifeste de classe de stockage avec la configuration suivante :
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: io2 provisioner: ebs.csi.aws.com volumeBindingMode: WaitForFirstConsumer parameters: type: io2 iops: "2000"
Appliquez la classe de stockage :
kubectl apply -f storageclass.yaml
Provisionner une charge de travail persistante dans le cluster A
Créez le manifeste suivant nommé workloadA.yaml :
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: example-pv-claim-name-a spec: storageClassName: io2 volumeName: example-pv-name-a accessModes: - ReadWriteMany volumeMode: Block resources: requests: storage: 10Gi --- apiVersion: v1 kind: Pod metadata: name: example-pod-a spec: containers: - name: <example-pod-container-name> image: centos:6.6 command: ["/bin/sh"] args: ["-c", "while true; do echo $(date -u) on pod A >> /data/out.txt; sleep 15; done"] volumeDevices: - name: example-volume-device-name devicePath: "/dev/xvda" volumes: - name: example-volume-device-name persistentVolumeClaim: claimName: example-pv-claim-name-a --- apiVersion: v1 kind: PersistentVolume metadata: name: example-pv-name-a spec: storageClassName: io2 volumeMode: Block accessModes: - ReadWriteMany capacity: storage: 10Gi csi: driver: ebs.csi.aws.com fsType: ext4 volumeHandle: example-preceding-volume-id nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: topology.ebs.csi.aws.com/zone operator: In values: - example-az
Remarque : remplacez tous les exemples de chaînes du manifeste par les valeurs requises.
Utiliser le même ID de volume pour créer une autre charge de travail dans le cluster B
Créez le manifeste suivant nommé workloadB.yml :
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: example-pv-claim-name-b spec: storageClassName: io2 volumeName: example-pv-name-b accessModes: - ReadWriteMany volumeMode: Block resources: requests: storage: 10Gi --- apiVersion: v1 kind: Pod metadata: name: example-pod-b spec: containers: - name: example-pod-container-name image: centos:6.6 command: ["/bin/sh"] args: ["-c", "while true; do echo $(date -u) on pod B >> /data/out.txt; sleep 15; done"] volumeDevices: - name: example-volume-device-name devicePath: "/dev/xvda" volumes: - name: example-volume-device-name persistentVolumeClaim: claimName: example-pv-claim-name-b --- apiVersion: v1 kind: PersistentVolume metadata: name: example-pv-name-b spec: storageClassName: io2 volumeMode: Block accessModes: - ReadWriteMany capacity: storage: 10Gi csi: driver: ebs.csi.aws.com fsType: ext4 volumeHandle: example-preceding-volume-id nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: topology.ebs.csi.aws.com/zone operator: In values: - example-az
Remarque : veillez à remplacer tous les exemples de chaîne par les valeurs requises.
Changez le contexte kubectl en cluster B, puis lancez la charge de travail :
kubectl config use-context example-clusterB-context kubectl apply -f workloadB.yaml
Remarque : remplacez example-clusterB-context par le contexte de cluster B.
Vérifier que les pods fonctionnent et ont le même contenu
Identifiez-vous sur les différents clusters et exécutez la commande suivante :
kubectl get pods
Exemple de sortie pour le cluster A :
NAME READY STATUS RESTARTS AGE example-pod-a 1/1 Running 0 18m
Exemple de sortie pour le cluster B :
NAME READY STATUS RESTARTS AGE example-pod-b 1/1 Running 0 3m13s
Pour exemple-pod-a, exécutez la commande suivante, afin d’afficher le contenu écrit dans le stockage :
kubectl exec -it example-pod-a -- cat /data/out.txt
Exemple de sortie :
Fri Sep 22 12:39:04 UTC 2024 on example-pod-a Fri Sep 22 12:39:19 UTC 2024 on example-pod-a Fri Sep 22 12:39:34 UTC 2024 on example-pod-a
Pour exemple-pod-b, exécutez la commande suivante, afin de lire le contenu écrit dans le même stockage que exemple-pod-a :
kubectl logs -f example-pod-b
Exemple de sortie :
Fri Sep 22 12:39:04 UTC 2024 on example-pod-b Fri Sep 22 12:39:19 UTC 2024 on example-pod-b Fri Sep 22 12:39:34 UTC 2024 on example-pod-b
Informations connexes
Attacher un volume EBS à plusieurs instances EC2 à l'aide de Multi-Attach
Activer le mode Multi-Attach pour un volume Amazon EBS
- Sujets
- StorageContainers
- Langue
- Français

Contenus pertinents
demandé il y a 2 ans
demandé il y a 2 ans
demandé il y a un an
demandé il y a 3 ans
AWS OFFICIELA mis à jour il y a 2 ans