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.
Wie verwende ich Topology Aware Hints in Amazon EKS?
Ich möchte Topology Aware Hints (TAH) in meinem Amazon Elastic Kubernetes Service (Amazon EKS)-Cluster verwenden.
Behebung
Hinweis: TAH sind möglicherweise nicht für Cluster geeignet, bei denen Amazon Elastic Compute Cloud (Amazon EC2)-Spot-Instances, Horizontales Pod-Autoscaling oder Auto Scaling aktiviert sind. Wenn du diese Cluster-Konfigurationen verwendest, kannst du keine Zuordnung erreichen, die proportional zu den Knoten zugewiesenen CPU-Kernen ist. Du überschreitest den zulässigen Overhead-Schwellenwert. Wenn es Einschränkungen bei der Pod-Zuweisung gibt, die die Neuverteilung von Endpunkten verbieten, verwendet kube-proxy außerdem kein TAH.
Voraussetzungen
- Stelle sicher, dass die Amazon EKS-Cluster-Version 1.24 oder höher ist.
- Richte einen Amazon EKS-Cluster und eine verwaltete Knotengruppe mit drei Knoten ein. Jeder Knoten muss dieselbe CPU-Kapazität haben und auf drei Availability Zones verteilt sein.
Gehe wie folgt vor, um TAH in Amazon EKS zu verwenden:
-
Erstelle einen neuen Namespace:
Hinweis: Ersetze example-namespace durch deinen Namespace-Namen.
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 -
Verwende das BusyBox-Image, um eine Beispielbereitstellung zu erstellen:
Hinweis: Ersetze example-deployment-name durch den Bereitstellungsnamen und example-namespace durch deinen Namespace-Namen.
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: {} -
Stelle die Bereitstellung als ClusterIP-Servicetyp bereit und füge dann service.kubernetes.io/topology-mode: auto als Anmerkung hinzu:
Hinweis: Ersetze example-service-name durch den Servicenamen und example-namespace durch den Namespace-Namen. In Version 1.27 oder höher wurde die Anmerkung service.kubernetes.io/topology-aware-hints: auto zu service.kubernetes.io/topology-mode: auto geändert.
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 -
Prüfe, ob die TAHs im Endpunkt ausgefüllt sind:
Hinweis: Ersetze example-namespace durch deinen Namespace-Namen und example-service-name durch den Servicenamen.
kubectl get 'endpointslices.discovery.k8s.io' -l kubernetes.io/service-name=example-service-name -n example-namespace -o yamlBeispielausgabe:
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 -
Stelle einen Test-Pod bereit, um zu überprüfen, ob der Datenverkehr an einen Pod in derselben Availability Zone weitergeleitet wird.
Hinweis: Ersetze example-node-name durch den Knotennamen.
kubectl run tmp-shell --rm -i --tty --image nicolaka/netshoot --overrides='{"spec": { "nodeSelector": {"kubernetes.io/hostname":"example-node-name"}}}' -
Suche den Pod und den Knoten, mit denen der Test-Pod eine Verbindung herstellt:
curl example-service-name.example-namespace:80Beispielausgabe:
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 -
Verwende PodName und NodeName aus der vorherigen Ausgabe, um zu überprüfen, ob der Datenverkehr mit derselben Availability Zone übereinstimmt, in der der Test-Pod bereitgestellt wird.
-
Skaliere die Bereitstellung auf vier Replikate und überprüfe dann die EndpointSlices:
Hinweis: Ersetze example-namespace durch deinen Namespace-Namen und example-deployment-name durch den Bereitstellungsnamen.
kubectl -n example-namespace scale deployments example-deployment-name --replicas=4Hinweis: Eine Bereitstellung, die auf vier Replikate skaliert ist, führt zu mindestens einer Availability Zone mit einem Anteil von 50 % an Endpunkten. Außerdem wird der Overhead-Schwellenwert von 20 % überschritten und TAHs werden nicht für kube-proxy verwendet.
Ähnliche Informationen
Topology Aware Routing auf der Kubernetes-Website
- Themen
- Containers
- Sprache
- Deutsch

Relevanter Inhalt
AWS OFFICIALAktualisiert vor 3 Monaten
AWS OFFICIALAktualisiert vor 3 Monaten