Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
EKS im IP Virtual Server (IPVS) -Modus behebt das Problem der Netzwerklatenz, das häufig auftrittkube-proxy
.
Übersicht
IPVS, seit Kubernetes Version 1.11
IPVS bietet mehrere Optionen für die Verteilung des Datenverkehrs auf Backend-Pods. Detaillierte Informationen zu den einzelnen Optionen finden Sie in der offiziellen Kubernetes-Dokumentation
- rr (Round Robin) - wrr (Weighted Round Robin) - lc (Least Connections) - wlc (Weighted Least Connections) - lblc (Locality Based Least Connections) - lblcr (Locality Based Least Connections with Replication) - sh (Source Hashing) - dh (Destination Hashing) - sed (Shortest Expected Delay) - nq (Never Queue)
Implementierung
Es sind nur wenige Schritte erforderlich, um IPVS in Ihrem EKS-Cluster zu aktivieren. Als Erstes müssen Sie sicherstellen, dass auf Ihren EKS-Worker-Knoten-Images das Linux Virtual ipvsadm
Server-Verwaltungspaket installiert ist. Um dieses Paket auf einem Fedora-basierten Image wie Amazon Linux 2023 zu installieren, können Sie den folgenden Befehl auf der Worker-Node-Instance ausführen.
sudo dnf install -y ipvsadm
Auf einem Debian-basierten Image wie Ubuntu würde der Installationsbefehl so aussehen.
sudo apt-get install ipvsadm
Als Nächstes müssen Sie die Kernelmodule für die oben aufgeführten IPVS-Konfigurationsoptionen laden. Wir empfehlen, diese Module in eine Datei innerhalb des /etc/modules-load.d/
Verzeichnisses zu schreiben, damit sie einen Neustart überstehen.
sudo sh -c 'cat << EOF > /etc/modules-load.d/ipvs.conf
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_lc
ip_vs_wlc
ip_vs_lblc
ip_vs_lblcr
ip_vs_sh
ip_vs_dh
ip_vs_sed
ip_vs_nq
nf_conntrack
EOF'
Sie können den folgenden Befehl ausführen, um diese Module auf einen Computer zu laden, der bereits läuft.
sudo modprobe ip_vs sudo modprobe ip_vs_rr sudo modprobe ip_vs_wrr sudo modprobe ip_vs_lc sudo modprobe ip_vs_wlc sudo modprobe ip_vs_lblc sudo modprobe ip_vs_lblcr sudo modprobe ip_vs_sh sudo modprobe ip_vs_dh sudo modprobe ip_vs_sed sudo modprobe ip_vs_nq sudo modprobe nf_conntrack
Anmerkung
Es wird dringend empfohlen, diese Worker-Node-Schritte als Teil des Bootstrapping-Prozesses Ihres Worker-Knotens per Benutzerdatenskript oder in beliebigen Build-Skripten auszuführen, die zum Erstellen eines benutzerdefinierten Worker-Knoten-AMI ausgeführt werden.
Als Nächstes konfigurieren Sie Ihre Cluster so, dass sie im kube-proxy
DaemonSet IPVS-Modus ausgeführt werden. Dazu setzen Sie kube-proxy
mode
auf eine der oben aufgeführten Lastenausgleichsoptionen auf ipvs
und auf, zum Beispiel: rr
für Round Robin. ipvs scheduler
Warnung
Dabei handelt es sich um eine störende Änderung, die außerhalb der Geschäftszeiten durchgeführt werden sollte. Wir empfehlen, diese Änderungen bei der ersten Erstellung des EKS-Clusters vorzunehmen, um die Auswirkungen zu minimieren.
Sie können einen AWS-CLI-Befehl ausgeben, um IPVS zu aktivieren, indem Sie das kube-proxy
EKS-Add-on aktualisieren.
aws eks update-addon --cluster-name $CLUSTER_NAME --addon-name kube-proxy \
--configuration-values '{"ipvs": {"scheduler": "rr"}, "mode": "ipvs"}' \
--resolve-conflicts OVERWRITE
Oder Sie können dies tun, indem Sie die kube-proxy-config
ConfigMap in Ihrem Cluster ändern.
kubectl -n kube-system edit cm kube-proxy-config
Suchen Sie die scheduler
Einstellung unter ipvs
und legen Sie den Wert auf eine der oben aufgeführten IPVS-Lastenausgleichsoptionen fest, zum Beispiel: rr
für Round Robin. Suchen Sie die mode
Einstellung, die standardmäßig istiptables
, und ändern Sie den Wert auf. ipvs
Das Ergebnis einer der beiden Optionen sollte der folgenden Konfiguration ähneln.
iptables:
masqueradeAll: false
masqueradeBit: 14
minSyncPeriod: 0s
syncPeriod: 30s
ipvs:
excludeCIDRs: null
minSyncPeriod: 0s
scheduler: "rr"
syncPeriod: 30s
kind: KubeProxyConfiguration
metricsBindAddress: 0.0.0.0:10249
mode: "ipvs"
nodePortAddresses: null
oomScoreAdj: -998
portRange: ""
udpIdleTimeout: 250ms
Wenn Ihre Worker-Knoten Ihrem Cluster hinzugefügt wurden, bevor Sie diese Änderungen vorgenommen haben, müssen Sie den DaemonSet Kube-Proxy neu starten.
kubectl -n kube-system rollout restart ds kube-proxy
Validierung
Sie können überprüfen, ob Ihr Cluster und Ihre Worker-Knoten im IPVS-Modus ausgeführt werden, indem Sie den folgenden Befehl auf einem Ihrer Worker-Knoten ausführen.
sudo ipvsadm -L
Sie sollten mindestens ein Ergebnis wie das unten stehende sehen, das Einträge für den Kubernetes API Server-Dienst unter 10.100.0.1
und den CoreDNS-Dienst unter enthält. 10.100.0.10
IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP ip-10-100-0-1.us-east-1. rr -> ip-192-168-113-81.us-eas Masq 1 0 0 -> ip-192-168-162-166.us-ea Masq 1 1 0 TCP ip-10-100-0-10.us-east-1 rr -> ip-192-168-104-215.us-ea Masq 1 0 0 -> ip-192-168-123-227.us-ea Masq 1 0 0 UDP ip-10-100-0-10.us-east-1 rr -> ip-192-168-104-215.us-ea Masq 1 0 0 -> ip-192-168-123-227.us-ea Masq 1 0 0
Anmerkung
Diese Beispielausgabe stammt aus einem EKS-Cluster mit einem Service-IP-Adressbereich von. 10.100.0.0/16