AWS announces preview of AWS Interconnect - multicloud
AWS announces AWS Interconnect – multicloud (preview), providing simple, resilient, high-speed private connections to other cloud service providers. AWS Interconnect - multicloud is easy to configure and provides high-speed, resilient connectivity with dedicated bandwidth, enabling customers to interconnect AWS networking services such as AWS Transit Gateway, AWS Cloud WAN, and Amazon VPC to other cloud service providers with ease.
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
Quando crei un carico di lavoro persistente in Amazon EKS utilizzando Amazon EBS per l'archiviazione, il tipo di volume predefinito è gp2. Amazon EBS Multi-Attach ti consente di collegare un singolo volume SSD IOPS con provisioning (io1 o io2) a più istanze nella stessa zona di disponibilità.
Amazon EBS Multi-Attach non è supportato nei volumi SSD per uso generico come gp2 e gp3. Il driver CSI di Amazon EBS non supporta volumi con più collegamenti a carichi di lavoro eseguiti su nodi diversi nello stesso cluster.
Per collegare più volte lo stesso spazio archiviazione persistente in Amazon EBS a più carichi di lavoro in cluster diversi, utilizza i volumi SSD IOPS con provisioning. Assicurati che i pod vengano eseguiti su nodi worker che si trovano nella stessa zona di disponibilità (AZ) dei cluster.
Nota: se i carichi di lavoro si trovano in più zone di disponibilità nello stesso cluster o in cluster diversi, utilizza Amazon Elastic File System (Amazon EFS). Per ulteriori informazioni, consulta Create an Amazon EFS file system for Amazon EKS (Creazione di un file system Amazon EFS per Amazon EKS) sul sito web GitHub.
Risoluzione
Prima di iniziare, assicurati che il driver CSI di Amazon EBS sia installato nei cluster Amazon EKS richiesti.
Nota: i volumi con Multi-Attach possono essere collegati a un massimo di 16 istanze Linux create sul sistema Nitro 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
Per effettuare il provisioning di un volume Amazon EBS, procedi come segue:
- Esegui il provisioning statico di un volume:
Nota: sostituisci <example-region> con la Regione AWS richiesta. Sostituisci <example-az> con la zona di disponibilità richiesta.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}]' - Se hai un carico di lavoro esistente con un volume gp2 o gp3, crea prima uno snapshot del volume. Quindi crea un volume io2 dallo snapshot.
Nota: non puoi attivarli Amazon EBS Multi-Attach per i volumi io1 dopo averli creati. Puoi invece attivare Amazon EBS Multi-Attach per i volumi io2 dopo averli creati purché non siano collegati a istanze. Per il provisioning dinamico di un volume di archiviazione io2 in Amazon EKS, crea la classe di archiviazione specificando la modalità Immediato per il provisioning del volume senza pod. Assicurati di attivare Amazon EBS Multi-Attach prima di creare il pod.
Recupera l'ID del volume
Recupera l'ID del volume a cui è stato assegnato il provisioning per il carico di lavoro:
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.
Effettua il provisioning di un carico di lavoro persistente in un cluster esistente utilizzando l'ID del volume precedente
-
Create il seguente manifesto denominato workloadA.yml:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: <example-pv-claim-name-a> spec: storageClassName: "" volumeName: <example-pv-name-a> accessModes: - ReadWriteOnce resources: requests: storage: 5Gi --- apiVersion: v1 kind: Pod metadata: name: <example-pod-a> spec: containers: - name: <example-pod-container-name> image: centos command: ["/bin/sh"] args: ["-c", "while true; do echo $(date -u) on pod A >> /data/out.txt; sleep 15; done"] volumeMounts: - name: <example-volume-mount-name> mountPath: /data volumes: - name: <example-volume-mount-name> persistentVolumeClaim: claimName: <example-pv-claim-name-a> --- apiVersion: v1 kind: PersistentVolume metadata: name: <example-pv-name-a> spec: accessModes: - ReadWriteOnce capacity: storage: 5Gi 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 example nel comando seguente con i valori richiesti. Assicurati che il valore del parametro storageClassName sia impostato su stringhe ****"" vuote.
-
Passa il contesto kubectl al cluster A, quindi distribuisci il carico di lavoro:
kubectl config use-context <example-clusterA-context> kubectl apply -f workloadA.yml
Utilizza l'ID del volume precedente per creare un altro carico di lavoro in un altro cluster
-
Crea e distribuisci il seguente manifesto denominato workloadB.yml:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: <example-pv-claim-name-b> spec: storageClassName: "" volumeName: <example-pv-name-b> accessModes: - ReadWriteOnce resources: requests: storage: 5Gi --- apiVersion: v1 kind: Pod metadata: name: <example-pod-b> spec: containers: - name: <example-pod-container-name> image: centos command: ["/bin/sh"] args: ["-c", "tail -f /data/out.txt"] volumeMounts: - name: <example-volume-mount-name> mountPath: /data volumes: - name: <example-volume-mount-name> persistentVolumeClaim: claimName: <example-pv-claim-name-b> --- apiVersion: v1 kind: PersistentVolume metadata: name: <example-pv-name-b> spec: accessModes: - ReadWriteOnce capacity: storage: 5Gi 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-azNota: sostituisci tutte le stringhe example con i valori richiesti. Assicurati che il valore del parametro storageClassName sia impostato su stringhe ****"" vuote.
-
Passa il contesto kubectl al cluster B, quindi distribuisci il carico di lavoro:
kubectl config use-context <example-clusterB-context> kubectl apply -f workloadB.ymNota: sostituisci example-clusterB-context con il tuo contesto.
Verifica che i pod siano funzionanti e abbiano lo stesso contenuto
-
Effettua l'autenticazione nei diversi cluster ed esegui questo comando:
kubectl get podsEsempio di output per il cluster A:
NAME READY STATUS RESTARTS AGE example-pod-a 1/1 Running 0 18mEsempio 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.txtEsempio 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
Nota: i file system standard come XFS ed EXT4 non sono accessibili contemporaneamente da più server. Per ulteriori informazioni, consulta Considerazioni e limitazioni.
Informazioni correlate
- Argomenti
- StorageContainers
- Lingua
- Italiano
