Erhöhen Sie die Anzahl der verfügbaren IP-Adressen für Ihre Amazon-EC2-Knoten - Amazon EKS

Erhöhen Sie die Anzahl der verfügbaren IP-Adressen für Ihre Amazon-EC2-Knoten

Standardmäßig basiert die Anzahl der IP-Adressen, die pods zugewiesen werden können, auf der Anzahl der IP-Adressen, die Elastic-Network-Schnittstellen zugewiesen sind, und der Anzahl der Netzwerkschnittstellen, die mit Ihrem Amazon-EC2-Knoten verbunden sind. Sie können Version 1.9.0 oder höher des Amazon VPC CNI-Add-ons zum Zuweisen von /28-IPv4-Adresspräfixen konfigurieren. Mit 1.10.1 oder höher des Add-ons können Sie immer noch /28-IPv4-Adresspräfixe zuweisen, aber wenn Ihr Cluster Version 1.21 oder höher ist und Sie ihn für IPv6 konfiguriert haben, können Sie stattdessen /80-IPv6-Adresspräfixe zuweisen.

Wenn es für die Präfixzuweisung konfiguriert ist, kann das CNI-Add-on einer Netzwerkschnittstelle deutlich mehr IP-Adressen zuweisen als beim Zuweisen einzelner IP-Adressen. Der Knoten kann pods dann deutlich mehr verfügbare IP-Adressen zuweisen. Weitere Informationen zur Amazon-EC2-Funktion, die dem Add-on dies ermöglicht, finden Sie unter Zuweisen von Präfixen zu Amazon-EC2-Netzwerkschnittstellen im Amazon-EC2-Benutzerhandbuch für Linux-Instances.

Ohne diese Funktion zu aktivieren, muss das Add-on mehr Amazon-EC2-Application-Programming-Interface-(API)-Aufrufe ausführen, um die Netzwerkschnittstellen und IP-Adressen zu konfigurieren, die für die pod-Konnektivität erforderlich sind. Die Häufigkeit dieser API-Aufrufe in Kombination mit einer hohen Anzahl von Netzwerkschnittstellen in jeder VPC kann zu längeren Startzeiten für pod und Instances führen, wenn Cluster größer werden. Dies führt zu Skalierungsverzögerungen, um die Nachfrage nach großen und spitzen Workloads zu decken, und erhöht den Kosten- und Verwaltungsaufwand, da Sie zusätzliche Cluster und VPCs bereitstellen müssen, um die Skalierungsanforderungen zu erfüllen. Sehen Sie das Kubernetes-Skalierbarkeitsschwellenwerte für weitere Informationen.

Überlegungen

  • AWS Nitro-basierte Knoten verwenden diese Funktion. Instances, die nicht Nitro-basiert sind, weisen weiterhin einzelne sekundäre IP-Adressen zu, weisen jedoch eine deutlich geringere Anzahl von IP-Adressen auf, die pods zugewiesen werden können als Nitro-based Instances.

  • Nachdem Sie das Add-On so konfiguriert haben, dass Netzwerkschnittstellen Präfixe zugewiesen werden, können Sie Ihr Amazon-VPC-CNI-Add-On nicht auf eine niedrigere Version als 1.9.0 (oder 1.10.1) herabstufen, ohne alle Knoten in allen Knotengruppen in Ihrem Cluster zu entfernen.

  • Ihre VPC muss über genügend zusammenhängende /28-IPv4-Adressblöcke verfügen, um diese Funktion zu unterstützen.

  • Jeder Instance-Typ unterstützt eine maximale Anzahl von pods. Wenn Ihre verwaltete Knotengruppe aus mehreren Instance-Typen besteht, wird die kleinste maximale Anzahl von pods für eine Instance im Cluster auf alle Knoten im Cluster angewendet.

  • Wenn Sie über eine vorhandene verwaltete Knotengruppe verfügen, führt die nächste AMI- oder Startvorlagenaktualisierung Ihrer Knotengruppe dazu, dass neue Worker-Knoten den neuen max-pod-Wert mit aktivierter IP-Adresspräfixzuweisung aufweisen.

Voraussetzungen

  • Einen vorhandenen -Cluster. Informationen zum Bereitstellen finden Sie unter Erstellen eines Amazon-EKS-Clusters.

  • Version 1.9.0 oder höher (für Cluster der Version 1.20 oder früher oder 1.21 oder höher, die für IPv4 konfiguriert sind) oder 1.10.1 oder höher (für Cluster der Version 1.21 oder höher, die für IPv6 konfiguriert sind) des Amazon VPC CNI plugin for Kubernetes-Add-ons, das auf Ihrem Cluster bereitgestellt wird.

So erhöhen Sie die Anzahl der verfügbaren IP-Adressen für Ihre Amazon-EC2-Knoten

  1. Bestätigen Sie, dass Ihre aktuell installierte Amazon VPC CNI plugin for Kubernetes-Version 1.9.0 oder 1.10.1 oder höher ist.

    kubectl describe daemonset aws-node --namespace kube-system | grep Image | cut -d "/" -f 2

    Die Beispielausgabe lautet wie folgt.

    amazon-k8s-cni:v1.10.1-eksbuild.1

    Wenn Ihre Version älter als 1.9.0 ist, müssen Sie sie aktualisieren. Weitere Informationen finden Sie in den Aktualisierungsabschnitten von Verwalten der Amazon VPC CNI plugin for Kubernetes.

  2. Aktivieren Sie den Parameter, um den Netzwerkschnittstellen für das Amazon VPC CNI DaemonSet Präfixe zuzuweisen. Wenn Sie einen Cluster ab 1.21 bereitstellen, wird Version 1.10.1 oder höher des Amazon VPC CNI plugin for Kubernetes-Add-ons zusammen mit ihm bereitgestellt. Wenn Sie den Cluster mit der IPv6-Familie erstellt haben, wurde für diese Einstellung standardmäßig true festgelegt. Wenn Sie den Cluster mit der IPv4-Familie erstellt haben, wurde für diese Einstellung standardmäßig false festgelegt.

    kubectl set env daemonset aws-node -n kube-system ENABLE_PREFIX_DELEGATION=true
    Wichtig

    Auch wenn Ihr Subnetz über freie IP-Adressen verfügt, wird in den Amazon VPC CNI plugin for Kubernetes-Protokollen der folgende Fehler angezeigt, wenn im Subnetz keine zusammenhängenden /28-Blöcke verfügbar sind:

    "failed to allocate a private IP/Prefix address: InsufficientCidrBlocks: The specified subnet does not have enough free cidr blocks to satisfy the request"

    Dies kann aufgrund der Fragmentierung vorhandener sekundärer IP-Adressen auftreten, die über ein Subnetz verteilt sind. Um diesen Fehler zu beheben, erstellen Sie entweder ein neues Subnetz und starten Sie dort pods, oder verwenden Sie eine Amazon-EC2-Subnetz-CIDR-Reservierung, um Speicherplatz in einem Subnetz für die Verwendung mit Präfixzuweisung zu reservieren. Weitere Informationen erhalten Sie unter Subnetz-CIDR-Reservierungen im Amazon-VPC-Benutzerhandbuch.

  3. Wenn Sie planen, eine verwaltete Knotengruppe ohne Startvorlage bereitzustellen oder mit einer Startvorlage, in der Sie keine AMI-ID angegeben haben, und Sie eine Version des Amazon VPC CNI plugin for Kubernetes verwenden, die mindestens der in den Voraussetzungen gelisteten Version entspricht, fahren Sie mit dem nächsten Schritt fort. Verwaltete Knotengruppen berechnen automatisch die maximale Anzahl von pods für Sie.

    Wenn Sie eine selbstverwaltete Knotengruppe oder eine verwaltete Knotengruppe mit einer Startvorlage bereitstellen, in der Sie eine AMI-ID angegeben haben, müssen Sie die von Amazon EKS empfohlene Anzahl der maximalen pods für Ihre Knoten ermitteln. Befolgen Sie die Anweisungen in Von Amazon EKS empfohlene maximale pods für jeden Amazon-EC2-Instance-Typ und fügen Sie --cni-prefix-delegation-enabled zu Schritt 3 hinzu. Notieren Sie sich die Ausgabe zur Verwendung in einem späteren Schritt.

    Wichtig

    Verwaltete Knotengruppen erzwingen eine maximale Anzahl für den Wert von maxPods. Für Instances mit weniger als 30 vCPUs beträgt die Höchstzahl 110 und für alle anderen Instances beträgt die Höchstzahl 250. Diese maximale Anzahl wird angewendet, unabhängig davon, ob die Präfixdelegierung aktiviert ist oder nicht.

  4. Wenn Sie einen Cluster 1.21 oder spätere Version verwenden, der für IPv6 konfiguriert ist, fahren Sie mit dem nächsten Schritt fort.

    Geben Sie die Parameter in einer der folgenden Optionen an. Um zu bestimmen, welche Option für Sie die richtige ist und welchen Wert Sie dafür bereitstellen müssen, lesen Sie WARM_PREFIX_TARGET, WARM_IP_TARGET und MINIMUM_IP_TARGET auf GitHub.

    Sie können die example values durch einen Wert größer als Null ersetzen.

    • WARM_PREFIX_TARGET

      kubectl set env ds aws-node -n kube-system WARM_PREFIX_TARGET=1
    • WARM_IP_TARGET oder MINIMUM_IP_TARGET – Wenn einer der Werte festgelegt ist, überschreibt er alle Werte, die für WARM_PREFIX_TARGET festgelegt wurden.

      kubectl set env ds aws-node -n kube-system WARM_IP_TARGET=5
      kubectl set env ds aws-node -n kube-system MINIMUM_IP_TARGET=2
  5. Erstellen Sie einen der folgenden Typen von Knotengruppen mit mindestens einem Amazon EC2 Nitro Amazon-Linux-2-Instance-Typ. Eine Liste der Nitro-Instance-Typen finden Sie unter Auf dem Nitro-System erstellte Instances im Amazon-EC2-Benutzerhandbuch für Linux-Instances. Diese Funktion wird unter Windows nicht unterstützt. Für die Optionen, die 110 enthalten, ersetzen Sie es entweder durch den Wert aus Schritt 3 (empfohlen) oder Ihren eigenen Wert.

    • Selbstverwaltet – Stellen Sie die Knotengruppe mithilfe der Anweisungen in Starten selbstverwalteter Amazon Linux-Knoten bereit. Geben Sie den folgenden Text für den Parameter BootstrapArguments an.

      --use-max-pods false --kubelet-extra-args '--max-pods=110'

      Wenn Sie eksctl zum Erstellen der Knotengruppe verwenden, können Sie den folgenden Befehl verwenden.

      eksctl create nodegroup --cluster my-cluster --managed=false --max-pods-per-node 110
    • Verwaltet – Stellen Sie Ihre Knotengruppe mit einer der folgenden Optionen bereit:

      • Ohne Startvorlage oder mit Startvorlage ohne angegebene AMI-ID – Führen Sie das Verfahren in Erstellen einer verwalteten Knotengruppe aus. Verwaltete Knotengruppen berechnen automatisch den von Amazon EKS empfohlenen max-pods-Wert für Sie.

      • Mit einer Startvorlage mit einer angegebenen AMI-ID – Geben Sie in Ihrer Startvorlage eine Amazon EKS-optimierte AMI-ID oder ein benutzerdefiniertes AMI an, das auf dem Amazon EKS-optimierten AMI basiert, stellen Sie dann die Knotengruppe mithilfe einer Startvorlage bereit und geben Sie die folgenden Benutzerdaten an in der Startvorlage. Diese Benutzerdaten übergeben Argumente an die bootstrap.sh-Datei. Weitere Informationen zur Bootstrap-Datei finden Sie unter bootstrap.sh auf GitHub.

        /etc/eks/bootstrap.sh my-cluster \ --use-max-pods false \ --kubelet-extra-args '--max-pods=110'

        Wenn Sie eksctl zum Erstellen der Knotengruppe verwenden, können Sie den folgenden Befehl verwenden.

        eksctl create nodegroup --cluster my-cluster --max-pods-per-node 110

        Wenn Sie ein benutzerdefiniertes AMI erstellt haben, das nicht auf dem für Amazon EKS optimierten AMI erstellt wurde, müssen Sie die Konfiguration selbst erstellen.

      Anmerkung

      Wenn Sie pods auch IP-Adressen aus einem anderen Subnetz als dem der Instance zuweisen möchten, müssen Sie die Funktion in diesem Schritt aktivieren. Weitere Informationen finden Sie unter Tutorial: Benutzerdefinierte Netzwerke.

  6. Nachdem Ihre Knoten bereitgestellt wurden, zeigen Sie die Knoten in Ihrem Cluster an.

    kubectl get nodes

    Die Beispielausgabe lautet wie folgt.

    NAME STATUS ROLES AGE VERSION ip-192-168-22-103.region-code.compute.internal Ready <none> 19m v1.20.4-eks-6b7464 ip-192-168-97-94.region-code.compute.internal Ready <none> 19m v1.20.4-eks-6b7464
  7. Beschreiben Sie einen der Knoten, um die max-pods für den Knoten zu bestimmen.

    kubectl describe node node-name ip-192-168-22-103.region-code.compute.internal

    Die Beispielausgabe lautet wie folgt.

    ... Allocatable: attachable-volumes-aws-ebs: 25 cpu: 1930m ephemeral-storage: 76224326324 hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 7244720Ki pods: 110 ...

    In der vorherigen Ausgabe ist 110 die maximale Anzahl von pods, die Kubernetes auf dem Knoten bereitstellt.