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 faço para usar Topology Aware Hints no Amazon EKS?
Quero usar Topology Aware Hints (TAH) no meu cluster do Amazon Elastic Kubernetes Service (Amazon EKS).
Resolução
Observação: O TAH pode não ser adequado para clusters que têm instâncias spot, escalamento automático de pods horizontais ou ajuste de escala automático do Amazon Elastic Compute Cloud (Amazon EC2) ativados. Ao usar essas configurações de cluster, não é possível obter uma alocação proporcional aos núcleos de CPU alocados aos nós. Você excede o limite de sobrecarga permitido. Além disso, se houver restrições de atribuição de pod que proíbam a redistribuição de endpoints, o kube-proxy não usará o TAH.
Pré-requisitos
- Certifique-se de que sua versão do cluster do Amazon EKS seja 1.24 ou posterior.
- Configure um cluster do Amazon EKS e um grupo de nós gerenciados com três nós. Cada nó deve ter a mesma capacidade de CPU e deve ser distribuído em três Zonas de disponibilidade.
Para usar o TAH no Amazon EKS, conclua as seguintes etapas:
-
Crie um novo namespace:
Observação: Substitua example-namespace pelo seu nome do namespace.
apiVersion: v1 kind: Namespace metadata: name: "example-namespace" labels: pod-security.kubernetes.io/audit: restricted pod-security.kubernetes.io/enforce: restricted pod-security.kubernetes.io/warn: restricted -
Use a imagem do BusyBox para criar uma implantação de amostra:
Observação: Substitua example-deployment-name pelo seu nome de implantação e example-namespace pelo seu nome do namespace.
apiVersion: apps/v1 kind: Deployment metadata: name: example-deployment-name namespace: example-namespace spec: replicas: 3 selector: matchLabels: app: demo template: metadata: labels: app: demo spec: dnsPolicy: Default enableServiceLinks: false automountServiceAccountToken: false securityContext: seccompProfile: type: RuntimeDefault runAsNonRoot: true runAsUser: 1000 runAsGroup: 1000 containers: - name: busybox image: public.ecr.aws/docker/library/busybox:latest command: ["/bin/sh"] args: - "-c" - | echo "<html><body><h1>PodName: $MY_POD_NAME NodeName: $MY_NODE_NAME podIP:$MY_POD_IP</h1></body></html>" > /tmp/index.html; while true; do printf 'HTTP/1.1 200 OK\n\n%s\n' $(cat /tmp/index.html) | nc -l -p 8080 done ports: - containerPort: 8080 env: - name: MY_NODE_NAME valueFrom: fieldRef: fieldPath: spec.nodeName - name: MY_POD_IP valueFrom: fieldRef: fieldPath: status.podIP - name: MY_POD_NAME valueFrom: fieldRef: fieldPath: metadata.name resources: limits: memory: "128Mi" cpu: "500m" requests: memory: "64Mi" cpu: "250m" securityContext: readOnlyRootFilesystem: true allowPrivilegeEscalation: false capabilities: drop: - ALL volumeMounts: - name: tmp mountPath: /tmp volumes: - name: tmp emptyDir: {} -
Exponha a implantação como um tipo de serviço ClusterIP e, em seguida, adicione service.kubernetes.io/topology-mode: auto como uma anotação:
Observação: Substitua example-service-name pelo nome do seu serviço e example-namespace pelo seu nome do namespace. Na versão 1.27 ou posterior, a anotação service.kubernetes.io/topology-aware-hints: auto é alterada para service.kubernetes.io/topology-mode: auto.
apiVersion: v1 kind: Service metadata: name: example-service-name namespace: example-namespace annotations: service.kubernetes.io/topology-mode: auto spec: selector: app: demo ports: - protocol: TCP port: 80 targetPort: 8080 -
Verifique se os TAHs estão preenchidos no endpoint:
Observação: Substitua example-namespace pelo seu nome do namespace e example-service-name pelo seu nome do serviço.
kubectl get 'endpointslices.discovery.k8s.io' -l kubernetes.io/service-name=example-service-name -n example-namespace -o yamlExemplo de saída:
endpoints: - addresses: - 10.0.21.125 conditions: ready: true serving: true terminating: false hints: forZones: - name: eu-west-1b nodeName: ip-10-0-17-215.eu-west-1.compute.internal targetRef: kind: Pod name: example-deployment-name-5875bbbb7c-m2j8t namespace: example-namespace uid: 4e789648-965e-4caa-91db-bd27d240ea59 zone: eu-west-1b -
Implante um pod de teste para verificar se o tráfego é roteado para um pod na mesma Zona de disponibilidade.
Observação: Substitua example-node-name pelo nome do seu nó.
kubectl run tmp-shell --rm -i --tty --image nicolaka/netshoot --overrides='{"spec": { "nodeSelector": {"kubernetes.io/hostname":"example-node-name"}}}' -
Encontre o pod e o nó aos quais seu pod de teste se conecta:
curl example-service-name.example-namespace:80Exemplo de saída:
PodName: 7b7b9bf455-c27z9 HTTP/1.1 200 OK NodeName: ip-10-0-9-45.eu-west-1.compute.internal HTTP/1.1 200 OK podIP: example-10.0.11.140 -
Use PodName e NodeName da saída anterior para verificar se o tráfego está alinhado com a mesma Zona de disponibilidade em que seu pod de teste está implantado.
-
Escale a implantação para quatro réplicas e, em seguida, inspecione os EndpointSlices:
Observação: Substitua example-namespace pelo seu nome do namespace e example-deployment-name pelo seu nome de implantação.
kubectl -n example-namespace scale deployments example-deployment-name --replicas=4Observação: Uma implantação escalada para quatro réplicas resulta em pelo menos uma Zona de disponibilidade com uma proporção de 50% de endpoints. Além disso, o limite de sobrecarga de 20% é excedido e os TAHs não são usados para kube-proxy.
Informações relacionadas
Topology Aware Routing no site do Kubernetes
Exploring the effect of Topology Aware Hints on network traffic in Amazon Elastic Kubernetes Service (Explorando o efeito do Topology Aware Hints no tráfego de rede no Amazon Elastic Kubernetes Service)
- Tópicos
- Containers
- Idioma
- Português

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