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.
Como uso o Amazon EBS Multi-Attach para conectar o mesmo volume a vários workloads no Amazon EKS?
Quero usar o Amazon Elastic Block Store (Amazon EBS) Multi-Attach para vários workloads em vários clusters no Amazon Elastic Kubernetes Service (Amazon EKS).
Breve descrição
Quando você cria um workload persistente no Amazon EKS com armazenamento do Amazon EBS, o tipo de volume padrão é gp2. O Amazon EBS Multi-Attach permite que você anexe um único volume de SSD de IOPS provisionadas (io1 ou io2) a várias instâncias na mesma Zona de disponibilidade.
O Amazon EBS Multi-Attach não é suportado em volumes SSD de uso geral, como gp2 e gp3. O driver CSI do Amazon EBS não oferece suporte à anexação de vários volumes a workloads executadas em nós diferentes no mesmo cluster.
Para anexar várias vezes o mesmo armazenamento persistente do Amazon EBS a vários workloads em clusters diferentes, use volumes SSD de IOPS provisionadas. Certifique-se de que os pods sejam executados em nós de processamento que estejam na mesma Zona de disponibilidade (AZ) em todos os clusters.
Observação: Se seus workloads estiverem em várias Zonas de disponibilidade no mesmo cluster ou em clusters diferentes, use o Amazon Elastic File System (Amazon EFS). Para obter mais informações, consulte Create an Amazon EFS file system for Amazon EKS (Criar um sistema de arquivos do Amazon EFS para o Amazon EKS) no site do GitHub.
Resolução
Antes de começar, certifique-se de que o driver CSI do Amazon EBS esteja instalado nos clusters do Amazon EKS necessários.
Observação: Os volumes habilitados para vários anexos podem ser anexados a até 16 instâncias Linux criadas no Nitro System que estão na mesma Zona de disponibilidade.
Para usar o Amazon EBS Multi-Attach para anexar o mesmo volume a vários workloads em vários clusters, conclua as etapas a seguir.
Provisionar um volume do Amazon EBS
Para provisionar um volume do Amazon EBS, faça o seguinte:
- Provisione um volume estaticamente:
Observação: Substitua <example-region> pela sua região da AWS necessária. Substitua <example-az> pela sua Zona de disponibilidade necessária.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 você tiver um workload existente com um volume de gp2 ou gp3, primeiro crie um snapshot do volume. Em seguida, crie um volume io2 a partir desse snapshot.
Observação: O Amazon EBS Multi-Attach não pode ser ativado para volumes io1 após sua criação. O Amazon EBS Multi-Attach pode ser ativado para volumes io2 após sua criação, caso não estejam anexados às instâncias. Para o provisionamento dinâmico de armazenamento io2 no Amazon EKS, especifique o modo Imediato para provisionar o volume sem o pod para criar a classe de armazenamento. Certifique-se de ativar o Amazon EBS Multi-Attach antes de criar o pod.
Recupere o ID do volume
Recupere o ID do volume que foi provisionado para o workload:
aws ec2 describe-volumes --filters "Name=tag:Name,Values=multi-attach-eks*" --query "Volumes[*].{ID:VolumeId}" --region <example-region>
Observação: Substitua example-region pela região da AWS necessária.
Provisione um workload persistente em um cluster existente usando o ID do volume anterior
-
Crie o seguinte manifesto chamado 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>Observação: Substitua todas as strings example no comando a seguir pelos valores necessários. Certifique-se de que o valor do parâmetro storageClassName esteja definido como strings ****"" vazias.
-
Mude o contexto kubectl para o cluster A e implante o workload:
kubectl config use-context <example-clusterA-context> kubectl apply -f workloadA.yml
Use o ID do volume anterior para criar outro workload em outro cluster
-
Crie e implante o seguinte manifesto chamado 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-azObservação: Substitua todas as strings example pelos valores necessários. Certifique-se de que o valor do parâmetro storageClassName esteja definido como strings ****"" vazias.
-
Mude o contexto kubectl para o cluster B e, em seguida, implante o workload:
kubectl config use-context <example-clusterB-context> kubectl apply -f workloadB.ymObservação: Substitua example-clusterB-context pelo seu contexto.
Verifique se os pods estão em execução e têm o mesmo conteúdo
-
Autentique-se nos diferentes clusters e execute o seguinte comando:
kubectl get podsExemplo de saída para o cluster A:
NAME READY STATUS RESTARTS AGE example-pod-a 1/1 Running 0 18mExemplo de saída para o cluster B:
NAME READY STATUS RESTARTS AGE example-pod-b 1/1 Running 0 3m13s -
Em example-pod-a, execute o seguinte comando para visualizar o conteúdo gravado no armazenamento:
kubectl exec -it <example-pod-a> -- cat /data/out.txtExemplo de saída:
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 -
Em example-pod-b, execute o comando a seguir para ler o conteúdo gravado no mesmo armazenamento de example-pod-a:
kubectl logs -f <example-pod-b>Exemplo de saída:
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
Observação: Sistemas de arquivos padrão, como XFS e EXT4, não podem ser acessados ao mesmo tempo em vários servidores. Para obter mais informações, consulte Considerações e limitações.
Informações relacionadas
- Tópicos
- StorageContainers
- Idioma
- Português

Conteúdo relevante
- feita há 5 meses
AWS OFICIALAtualizada há 3 meses
AWS OFICIALAtualizada há um ano