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 Topology Aware Hints in Amazon EKS?
Desidero utilizzare Topology Aware Hints (TAH) nel mio cluster Amazon Elastic Kubernetes Service (Amazon EKS).
Risoluzione
Nota: TAH potrebbe non essere adatto per i cluster con istanze spot Amazon Elastic Compute Cloud (Amazon EC2), il dimensionamento automatico orizzontale dei pod o il dimensionamento automatico attivati. Quando utilizzi queste configurazioni del cluster, non puoi ottenere un'allocazione proporzionale ai core della CPU allocati ai nodi. Superi la soglia massima consentita. Inoltre, se sono presenti vincoli di assegnazione dei pod che vietano la ridistribuzione degli endpoint, kube-proxy non utilizza TAH.
Prerequisiti
- Assicurati che la versione del cluster Amazon EKS sia 1.24 o successiva.
- Configura un cluster Amazon EKS e un gruppo di nodi gestiti con tre nodi. Ogni nodo deve avere la stessa capacità in termini di CPU e deve essere distribuito in tre zone di disponibilità.
Per utilizzare TAH in Amazon EKS, completa i seguenti passaggi:
-
Crea un nuovo namespace:
Nota: sostituisci example-namespace con il nome del tuo 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 -
Utilizza l'immagine BusyBox per creare un esempio di distribuzione:
Nota: sostituisci example-deployment-name con il nome della tua distribuzione e example-namespace xon il nome del tuo 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: {} -
Esponi la distribuzione come tipo di servizio ClusterIP, quindi aggiungi service.kubernetes.io/topology-mode: auto come annotazione:
Nota: sostituisci example-service-name con il nome del tuo servizio e example-namespace con il nome del tuo namespace. Nella versione 1.27 o successiva, l'annotazione service.kubernetes.io/topology-aware-hints: auto viene sostituita da 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 -
Controlla se i TAH compaiono nell'endpoint:
Nota: sostituisci example-namespace con il nome del tuo namespace e example-service-name con il nome del tuo servizio.
kubectl get 'endpointslices.discovery.k8s.io' -l kubernetes.io/service-name=example-service-name -n example-namespace -o yamlEsempio di output:
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 -
Distribuisci un pod di prova per verificare se il traffico viene indirizzato a un pod nella stessa zona di disponibilità.
Nota: sostituisci example-node-name con il nome del tuo nodo.
kubectl run tmp-shell --rm -i --tty --image nicolaka/netshoot --overrides='{"spec": { "nodeSelector": {"kubernetes.io/hostname":"example-node-name"}}}' -
Individua il pod e il nodo a cui si connette il pod di prova:
curl example-service-name.example-namespace:80Esempio di output:
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 -
Utilizza PodName e NodeName dell'output precedente per verificare se il traffico è allineato con la stessa zona di disponibilità in cui è distribuito il pod di prova.
-
Scala la distribuzione a quattro repliche, quindi ispeziona gli EndpointSlice:
Nota: sostituisci example-namespace con il nome del tuo namespace e example-deployment-name con il nome della tua distribuzione.
kubectl -n example-namespace scale deployments example-deployment-name --replicas=4Nota: una distribuzione scalata a quattro repliche produce almeno una zona di disponibilità con un rapporto di endpoint del 50%. Inoltre, viene superata la soglia massima del 20% e i TAH non vengono utilizzati per kube-proxy.
Informazioni correlate
Topology Aware Routing sul sito web Kubernetes
Exploring the effect of Topology Aware Hints on network traffic in Amazon Elastic Kubernetes Service (Esplorazione dell'effetto dei Topology Aware Hints sul traffico di rete in Amazon Elastic Kubernetes Service)
- Argomenti
- Containers
- Lingua
- Italiano
