AWS Builder Center: Learn, Build and Connect with builders in the AWS community
AWS Builder Center is the official home for builders on AWS. Share and read what others are working on, follow people who inspire you, explore training and workshops, and find tools to support what you're building.
Come posso utilizzare Amazon EBS Multi-Attach per collegare lo stesso volume a più carichi di lavoro in Amazon EKS?
Desidero utilizzare Amazon Elastic Block Store (Amazon EBS) Multi-Attach per più carichi di lavoro su più cluster in Amazon Elastic Kubernetes Service (Amazon EKS).
Breve descrizione
Amazon EBS Multi-Attach ti consente di collegare un singolo volume SSD a capacità di IOPS allocata (io1 o io2) a più istanze nella stessa zona di disponibilità. Puoi utilizzare Multi-Attach per condividere lo storage persistente tra più carichi di lavoro in diversi cluster Amazon EKS.
Risoluzione
Nota: Se ricevi errori quando esegui i comandi dell’Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.
Importante: I file system standard come XFS ed EXT4 non sono progettati per essere accessibili contemporaneamente da più server. Utilizza un file system in cluster per garantire la resilienza e l’affidabilità dei dati per i carichi di lavoro di produzione.
Prima di iniziare, assicurati che il driver CSI di Amazon EBS sia installato nei cluster Amazon EKS richiesti.
Per ulteriori informazioni sull’installazione del driver CSI di Amazon EBS, consulta Utilizzare il volume di archiviazione Kubernetes con Amazon EBS.
Nota: I volumi con Multi-Attach abilitato possono essere collegati a un massimo di 16 istanze Linux basate su Nitro System che si trovano nella stessa zona di disponibilità.
Per utilizzare Amazon EBS Multi-Attach per collegare lo stesso volume a più carichi di lavoro in più cluster, completa i passaggi seguenti:
Effettua il provisioning di un volume Amazon EBS
Esegui questo comando AWS CLI create-volume:
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}]'
Nota: Sostituisci example-region con la Regione AWS richiesta. Sostituisci example-az con la zona di disponibilità richiesta.
Importante: Puoi attivare Amazon EBS Multi-Attach per i volumi io2 dopo averli creati, purché non siano collegati a istanze. Non puoi attivare Amazon EBS Multi-Attach per i volumi io1 dopo averli creati.
Recupera l’ID del volume
Esegui questo comando AWS CLI describe-volumes:
aws ec2 describe-volumes --filters "Name=tag:Name,Values=multi-attach-eks*" --query "Volumes[*].{ID:VolumeId}" --region example-region
Nota: Sostituisci example-region con la Regione AWS richiesta.
Crea una classe di archiviazione
Crea un manifesto della classe di archiviazione con la seguente configurazione:
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: io2 provisioner: ebs.csi.aws.com volumeBindingMode: WaitForFirstConsumer parameters: type: io2 iops: "2000"
Applica la classe di archiviazione:
kubectl apply -f storageclass.yaml
Effettua il provisioning di un carico di lavoro persistente nel cluster A
Crea il seguente manifesto denominato 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
Nota: Sostituisci tutte le stringhe di esempio nel manifesto con i valori richiesti.
Utilizza lo stesso ID di volume per creare un altro carico di lavoro nel cluster B
Crea il seguente manifesto denominato workloadB.yaml:
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
Nota: Sostituisci tutte le stringhe di esempio con i valori richiesti.
Passa il contesto kubectl al cluster B, quindi distribuisci il carico di lavoro:
kubectl config use-context example-clusterB-context kubectl apply -f workloadB.yaml
Nota: Sostituisci example-clusterB-context con il contesto del cluster B.
Verifica che i pod siano in esecuzione e abbiano lo stesso contenuto
Effettua l’autenticazione nei diversi cluster ed esegui questo comando:
kubectl get pods
Esempio di output per il cluster A:
NAME READY STATUS RESTARTS AGE example-pod-a 1/1 Running 0 18m
Esempio di output per il cluster B:
NAME READY STATUS RESTARTS AGE example-pod-b 1/1 Running 0 3m13s
Per example-pod-a, visualizza il contenuto scritto nello spazio di archiviazione eseguendo questo comando:
kubectl exec -it example-pod-a -- cat /data/out.txt
Esempio di output:
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
Per example-pod-b, leggi il contenuto scritto nello stesso spazio di archiviazione di example-pod-a eseguendo questo comando:
kubectl logs -f example-pod-b
Esempio di output:
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
Informazioni correlate
Collega un volume EBS a più istanze EC2 utilizzando Multi-Attach
Abilita Multi-Attach per un volume Amazon EBS
Utilizzare il volume di archiviazione Kubernetes con Amazon EBS
- Argomenti
- StorageContainers
- Lingua
- Italiano

Contenuto pertinente
AWS UFFICIALEAggiornata 2 anni fa