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.
Comment utiliser les indicateurs de topologie dans Amazon EKS ?
Je souhaite utiliser Topology Aware Hints (TAH) dans mon cluster Amazon Elastic Kubernetes Service (Amazon EKS).
Résolution
Remarque : TAH peut ne pas convenir aux clusters sur lesquels les instances ponctuelles Amazon Elastic Compute Cloud (Amazon EC2), l’autoscaling horizontal du pod ou l’autoscaling sont activés. Lorsque vous utilisez ces configurations de cluster, vous ne pouvez pas obtenir une allocation proportionnelle aux cœurs de processeur alloués aux nœuds. Vous dépassez le seuil de frais généraux autorisé. De plus, s'il existe des contraintes d'attribution de pods qui interdisent la redistribution des points de terminaison, kube-proxy n'utilise pas TAH.
Prérequis
- Assurez-vous que la version de votre cluster Amazon EKS est 1.24 ou ultérieure.
- Configurez un cluster Amazon EKS et un groupe de nœuds géré avec trois nœuds. Chaque nœud doit avoir la même capacité de processeur et doit être réparti dans trois zones de disponibilité.
Pour utiliser TAH dans Amazon EKS, procédez comme suit :
-
Créez un nouvel espace de noms :
Remarque : Remplacez example-namespace par le nom de votre espace de noms.
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 -
Utilisez l'image BusyBox pour créer un exemple de déploiement :
Remarque : Remplacez example-deployment-name par le nom de votre déploiement et example-namespace par le nom de votre espace de noms.
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: {} -
Exposez le déploiement en tant que type de service ClusterIP, puis ajoutez service.kubernetes.io/topology-mode: auto en tant qu'annotation :
Remarque : Remplacez example-service-name par le nom de votre service et example-namespace par le nom de votre espace de noms. Dans la version 1.27 ou ultérieure, l'annotation service.kubernetes.io/topology-aware-hints: auto est remplacée par 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 -
Vérifiez si les TAH sont renseignés dans le point de terminaison :
Remarque : Remplacez example-namespace par le nom de votre espace de noms et example-service-name par le nom de votre service.
kubectl get 'endpointslices.discovery.k8s.io' -l kubernetes.io/service-name=example-service-name -n example-namespace -o yamlExemple de sortie :
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 -
Déployez un module de test pour vérifier si le trafic est acheminé vers un espace situé dans la même zone de disponibilité.
Remarque : Remplacez example-node-name par le nom de votre nœud.
kubectl run tmp-shell --rm -i --tty --image nicolaka/netshoot --overrides='{"spec": { "nodeSelector": {"kubernetes.io/hostname":"example-node-name"}}}' -
Recherchez le module et le nœud auxquels votre module de test se connecte :
curl example-service-name.example-namespace:80Exemple de sortie :
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 -
Utilisez PodName et NodeName de la sortie précédente pour vérifier si le trafic s'aligne sur la même zone de disponibilité que celle dans laquelle votre module de test est déployé.
-
Mettez à l’échelle le déploiement vers quatre réplicas, puis inspectez les EndpointSlices :
Remarque : Remplacez example-namespace par le nom de votre espace de noms et example-deployment-name par le nom de votre déploiement.
kubectl -n example-namespace scale deployments example-deployment-name --replicas=4Remarque : Un déploiement mis à l’échelle vers quatre réplicas entraîne la création d'au moins une zone de disponibilité présentant un ratio de points de terminaison de 50 %. De plus, le seuil de frais généraux de 20 % est dépassé et les TAH ne sont pas utilisés pour kube-proxy.
Informations connexes
Routage tenant compte de la topologie sur le site Web de Kubernetes
- Sujets
- Containers
- Langue
- Français

Contenus pertinents
- demandé il y a 3 mois
- demandé il y a 5 mois
- demandé il y a 3 ans
AWS OFFICIELA mis à jour il y a 2 ans