Skalierung von CoreDNS-Pods für hohen DNS-Datenverkehr - Amazon EKS

Unterstützung für die Verbesserung dieser Seite beitragen

Um zu diesem Benutzerhandbuch beizutragen, klicken Sie auf den Link Diese Seite auf GitHub bearbeiten, der sich im rechten Bereich jeder Seite befindet.

Skalierung von CoreDNS-Pods für hohen DNS-Datenverkehr

Wenn Sie einen Amazon-EKS-Cluster mit mindestens einem Knoten starten, wird standardmäßig eine Bereitstellung von zwei Replikaten des CoreDNS-Images bereitgestellt, unabhängig von der Anzahl der in Ihrem Cluster bereitgestellten Knoten. Die CoreDNS-Pods bieten eine Namensauflösung für alle Pods im Cluster. Anwendungen verwenden die Namensauflösung, um eine Verbindung zu Pods und Services im Cluster sowie zu Services außerhalb des Clusters herzustellen. Wenn die Anzahl der Anfragen zur Namensauflösung (Abfragen) von Pods zunimmt, können die CoreDNS-Pods überlastet werden. Dadurch verlangsamt sich ihre Leistung und sie lehnen Anfragen ab, die sie nicht verarbeiten können.

Um die erhöhte Auslastung der CoreDNS-Pods zu bewältigen, empfehlen wir die Implementierung eines Autoscaling-Systems für CoreDNS. Amazon EKS kann das Autoscaling der CoreDNS-Bereitstellung in der EKS-Add-On-Version von CoreDNS verwalten. Dieser CoreDNS-Autoscaler überwacht kontinuierlich den Status des Clusters, einschließlich der Anzahl der Knoten und CPU-Kerne. Anhand dieser Informationen passt der Controller die Anzahl der Replikate der CoreDNS-Bereitstellung in einem EKS-Cluster dynamisch an. Dieses Feature ist für CoreDNS v1.9 und höher verfügbar. Weitere Informationen darüber, welche Versionen mit CoreDNS Autoscaling kompatibel sind, finden Sie im folgenden Abschnitt

Das System verwaltet CoreDNS-Replikate automatisch anhand einer dynamischen Formel, die sowohl auf der Anzahl der Knoten als auch auf der Anzahl der CPU-Kerne im Cluster basiert und als Maximum von (Anzahl der Knoten geteilt durch 16) und (Anzahl der CPU-Kerne geteilt durch 256) berechnet wird. Es bewertet die Nachfrage über 10-minütige Spitzenzeiten aus und skaliert bei Bedarf sofort hoch, um eine erhöhte DNS-Abfragelast zu bewältigen. Gleichzeitig skaliert es schrittweise herunter, indem es die Replikate alle 3 Minuten um 33 % reduziert, um die Systemstabilität aufrechtzuerhalten und Störungen zu vermeiden.

Wir empfehlen, dieses Feature in Verbindung mit anderen bewährten Methoden für die automatische Skalierung von EKS-Clustern zu verwenden, um die allgemeine Anwendungsverfügbarkeit und die Skalierbarkeit des Clusters zu verbessern.

Voraussetzungen

Damit Amazon EKS Ihre CoreDNS-Bereitstellung skalieren kann, müssen drei Voraussetzungen erfüllt sein:

  • Sie müssen die EKS-Add-On-Version von CoreDNS verwenden.

  • Ihr Cluster muss mindestens die Mindest-Cluster- und Plattformversionen ausführen.

  • Ihr Cluster muss mindestens die Mindestversion des EKS-Add-Ons von CoreDNS ausführen.

Minimale Cluster-Version

Die automatische Skalierung von CoreDNS erfolgt durch eine neue Komponente in der Cluster-Steuerebene, die von Amazon EKS verwaltet wird. Aus diesem Grund müssen Sie Ihren Cluster auf eine EKS-Version aktualisieren, welche die Mindestplattformversion mit der neuen Komponente unterstützt.

Ein neuer Amazon-EKS-Cluster. Informationen zum Bereitstellen finden Sie unter Erste Schritte mit Amazon EKS. Der Cluster muss eine der in der folgenden Tabelle aufgeführten Kubernetes-Versionen und Plattformversionen oder eine neuere Version ausführen. Beachten Sie, dass alle Kubernetes- und Plattformversionen, die über die aufgeführten hinausgehen, ebenfalls unterstützt werden. Sie können Ihre aktuelle Kubernetes-Version überprüfen, indem Sie my-cluster im folgenden Befehl durch den Namen Ihres Clusters ersetzen und dann den geänderten Befehl ausführen:

aws eks describe-cluster --name my-cluster --query cluster.version --output text
Kubernetes-Version Plattformversion

Nicht aufgelistet

Alle Plattformversionen

1.29.3

eks.7

1.28.8

eks.13

1.27.12

eks.17

1.26.15

eks.18

Anmerkung

Alle Plattformversionen der neueren Kubernetes-Versionen werden ebenfalls unterstützt, beispielsweise Kubernetes-Versionen 1.30 ab eks.1.

Mindestversion des EKS-Add-Ons

Kubernetes-Version 1.29 1.28

v1.11.1-eksbuild.9

v1.10.1-eksbuild.11

  1. Stellen Sie sicher, dass Ihr Cluster die Mindest-Cluster-Version aufweist oder höher ist.

    Amazon EKS aktualisiert Cluster zwischen Plattformversionen derselben Kubernetes-Version automatisch, und Sie können diesen Vorgang nicht selbst starten. Stattdessen können Sie Ihren Cluster auf die nächste Kubernetes-Version aktualisieren, woraufhin der Cluster auf diese K8s-Version und die neueste Plattformversion aktualisiert wird.

    Neue Kubernetes-Versionen führen oft bedeutende Änderungen ein. Wir empfehlen Ihnen daher, das Verhalten Ihrer Anwendungen mit einem separaten Cluster der neuen Kubernetes-Version zu testen, bevor Sie Ihre Produktions-Cluster aktualisieren

    Um einen Cluster auf eine neue Kubernetes-Version zu aktualisieren, befolgen Sie die Schritte unter Vorhandenen Cluster auf neue Kubernetes-Version aktualisieren.

  2. Stellen Sie sicher, dass Sie das EKS-Add-On für CoreDNS verwenden und nicht über die selbstverwaltete CoreDNS-Bereitstellung.

    Je nachdem, mit welchem Tool Sie Ihr Cluster erstellt haben, ist der Add-on vom Typ Amazon EKS möglicherweise derzeit nicht auf Ihrem Cluster installiert. Um zu überprüfen, welche Art von Add-On auf Ihrem Cluster installiert ist, können Sie den folgenden Befehl ausführen. Ersetzen Sie my-cluster mit dem Namen Ihres Clusters.

    aws eks describe-addon --cluster-name my-cluster --addon-name coredns --query addon.addonVersion --output text

    Wenn eine Versionsnummer zurückgegeben wird, ist das Add-On vom Typ Amazon EKS auf Ihrem Cluster installiert und Sie können mit dem nächsten Schritt fortfahren. Wenn ein Fehler zurückgegeben wird, ist der Amazon-EKS-Typ des Add-Ons nicht auf Ihrem Cluster installiert. Führen Sie die restlichen Schritte des Verfahrens CoreDNS-Amazon-EKS-Add-On erstellen, um die selbstverwaltete Version durch das Amazon-EKS-Add-On zu ersetzen.

  3. Stellen Sie sicher, dass Ihr EKS-Add-On für CoreDNS mindestens die Mindestversion des EKS-Add-Ons aufweist.

    Sehen Sie, welche Version des Container-Images derzeit auf Ihrem Cluster installiert ist. Sie können dies in AWS-Managementkonsole überprüfen oder den folgenden Befehl ausführen:

    kubectl describe deployment coredns --namespace kube-system | grep coredns: | cut -d : -f 3

    Eine Beispielausgabe sieht wie folgt aus.

    v1.10.1-eksbuild.13

    Vergleichen Sie diese Version mit der Mindestversion des EKS-Add-Ons im vorherigen Abschnitt. Aktualisieren Sie das EKS-Add-On bei Bedarf auf eine höhere Version, indem Sie das Verfahren CoreDNS-Amazon-EKS-Add-On aktualisieren befolgen.

  4. Fügen Sie die Autoscaling-Konfiguration zu den Optionalen Konfigurationseinstellungen des EKS-Add-Ons hinzu.

    1. Öffnen Sie die Amazon-EKS-Konsole.

    2. Wählen Sie im linken Navigationsbereich Clusters (Cluster) aus. Wählen Sie anschließend den Namen des Clusters aus, für den Sie das Add-On konfigurieren möchten.

    3. Wählen Sie die Registerkarte Add-ons.

    4. Aktivieren Sie das Kontrollkästchen oben rechts im Feld „CoreDNS-Add-On“ und wählen Sie dann Bearbeiten aus.

    5. Gehen Sie auf der Seite CoreDNS konfigurieren wie folgt vor:

      1. Wählen Sie die Version aus, die Sie verwenden möchten. Wir empfehlen Ihnen, die gleiche Version wie im vorherigen Schritt beizubehalten und die Version und Konfiguration in separaten Schritten zu aktualisieren.

      2. Erweitern Sie Optionale Konfigurationseinstellungen.

      3. Geben Sie den JSON-Schlüssel "autoscaling": und den Wert eines verschachtelten JSON-Objekts mit einem Schlüssel "enabled": und einem Wert true in den Konfigurationswerten ein. Der resultierende Text muss ein gültiges JSON-Objekt sein. Wenn dieser Schlüssel und dieser Wert die einzigen Daten im Textfeld sind, setzen Sie den Schlüssel und den Wert in geschweifte Klammern { }. Das folgende Beispiel zeigt, dass die automatische Skalierung aktiviert ist:

        { "autoScaling": { "enabled": true } }
      4. (Optional) Sie können Mindest- und Höchstwerte angeben, auf welche die automatische Skalierung die Anzahl der CoreDNS-Pods skalieren kann.

        Das folgende Beispiel zeigt, dass die automatische Skalierung aktiviert ist und alle optionalen Schlüssel über Werte verfügen. Wir empfehlen, die Mindestanzahl der CoreDNS-Pods immer größer als 2 zu halten, um die Ausfallsicherheit des DNS-Services im Cluster zu gewährleisten.

        { "autoScaling": { "enabled": true, "minReplicas": 2, "maxReplicas": 10 } }
    6. Um die neue Konfiguration durch Ersetzen der CoreDNS-Pods anzuwenden, wählen Sie Änderungen speichern aus.

      Amazon EKS wendet Änderungen an den EKS-Add-Ons an, indem es eine Einführung der Kubernetes-Bereitstellung für CoreDNS durchführt. Sie können den Status der Einführung im Aktualisierungsverlauf des Add-Ons in AWS-Managementkonsole und mit kubectl rollout status deployment/coredns --namespace kube-system verfolgen.

      kubectl rollout verfügt über die folgenden Befehle:

      kubectl rollout history -- View rollout history pause -- Mark the provided resource as paused restart -- Restart a resource resume -- Resume a paused resource status -- Show the status of the rollout undo -- Undo a previous rollout

      Wenn die Einführung zu lange dauert, macht Amazon EKS die Einführung rückgängig und eine Nachricht mit dem Typ der Add-On-Aktualisierung und dem Status Fehlgeschlagen dem Aktualisierungsverlauf des Add-Ons hinzugefügt. Um etwaige Probleme zu untersuchen, beginnen Sie mit dem Verlauf der Einführung und führen Sie kubectl logs in einem CoreDNS-Pod aus, um die Protokolle von CoreDNS anzuzeigen.

  5. Wenn der neue Eintrag im Aktualisierungsverlauf den Status Erfolgreich aufweist, ist die Einführung abgeschlossen und das Add-On verwendet die neue Konfiguration in allen CoreDNS-Pods. Wenn Sie die Anzahl der Knoten und CPU-Kerne der Knoten im Cluster ändern, skaliert Amazon EKS die Anzahl der Replikate der CoreDNS-Bereitstellung.

  1. Stellen Sie sicher, dass Ihr Cluster die Mindest-Cluster-Version aufweist oder höher ist.

    Amazon EKS aktualisiert Cluster zwischen Plattformversionen derselben Kubernetes-Version automatisch, und Sie können diesen Vorgang nicht selbst starten. Stattdessen können Sie Ihren Cluster auf die nächste Kubernetes-Version aktualisieren, woraufhin der Cluster auf diese K8s-Version und die neueste Plattformversion aktualisiert wird.

    Neue Kubernetes-Versionen führen oft bedeutende Änderungen ein. Wir empfehlen Ihnen daher, das Verhalten Ihrer Anwendungen mit einem separaten Cluster der neuen Kubernetes-Version zu testen, bevor Sie Ihre Produktions-Cluster aktualisieren

    Um einen Cluster auf eine neue Kubernetes-Version zu aktualisieren, befolgen Sie die Schritte unter Vorhandenen Cluster auf neue Kubernetes-Version aktualisieren.

  2. Stellen Sie sicher, dass Sie das EKS-Add-On für CoreDNS verwenden und nicht über die selbstverwaltete CoreDNS-Bereitstellung.

    Je nachdem, mit welchem Tool Sie Ihr Cluster erstellt haben, ist der Add-on vom Typ Amazon EKS möglicherweise derzeit nicht auf Ihrem Cluster installiert. Um zu überprüfen, welche Art von Add-On auf Ihrem Cluster installiert ist, können Sie den folgenden Befehl ausführen. Ersetzen Sie my-cluster mit dem Namen Ihres Clusters.

    aws eks describe-addon --cluster-name my-cluster --addon-name coredns --query addon.addonVersion --output text

    Wenn Sie eine Versionsnummer zurückgeben, wird der Amazon-EKS-Typ des Add-Ons auf Ihrem Cluster installiert. Wenn ein Fehler zurückgegeben wird, ist der Amazon-EKS-Typ des Add-Ons nicht auf Ihrem Cluster installiert. Führen Sie die restlichen Schritte des Verfahrens CoreDNS-Amazon-EKS-Add-On erstellen, um die selbstverwaltete Version durch das Amazon-EKS-Add-On zu ersetzen.

  3. Stellen Sie sicher, dass Ihr EKS-Add-On für CoreDNS mindestens die Mindestversion des EKS-Add-Ons aufweist.

    Sehen Sie, welche Version des Container-Images derzeit auf Ihrem Cluster installiert ist. Sie können dies in AWS-Managementkonsole überprüfen oder den folgenden Befehl ausführen:

    kubectl describe deployment coredns --namespace kube-system | grep coredns: | cut -d : -f 3

    Eine Beispielausgabe sieht wie folgt aus.

    v1.10.1-eksbuild.13

    Vergleichen Sie diese Version mit der Mindestversion des EKS-Add-Ons im vorherigen Abschnitt. Aktualisieren Sie das EKS-Add-On bei Bedarf auf eine höhere Version, indem Sie das Verfahren CoreDNS-Amazon-EKS-Add-On aktualisieren befolgen.

  4. Fügen Sie die Autoscaling-Konfiguration zu den Optionalen Konfigurationseinstellungen des EKS-Add-Ons hinzu.

    Führen Sie den folgenden AWS-CLI-Befehl aus. Ersetzen Sie my-cluster durch den Namen Ihres Clusters und den IAM-Rollen-ARN durch die Rolle, die Sie verwenden.

    aws eks update-addon --cluster-name my-cluster --addon-name coredns \ --resolve-conflicts PRESERVE --configuration-values '{"autoScaling":{"enabled":true}}'

    Amazon EKS wendet Änderungen an den EKS-Add-Ons an, indem es eine Einführung der Kubernetes-Bereitstellung für CoreDNS durchführt. Sie können den Status der Einführung im Aktualisierungsverlauf des Add-Ons in AWS-Managementkonsole und mit kubectl rollout status deployment/coredns --namespace kube-system verfolgen.

    kubectl rollout verfügt über die folgenden Befehle:

    kubectl rollout history -- View rollout history pause -- Mark the provided resource as paused restart -- Restart a resource resume -- Resume a paused resource status -- Show the status of the rollout undo -- Undo a previous rollout

    Wenn die Einführung zu lange dauert, macht Amazon EKS die Einführung rückgängig und eine Nachricht mit dem Typ der Add-On-Aktualisierung und dem Status Fehlgeschlagen dem Aktualisierungsverlauf des Add-Ons hinzugefügt. Um etwaige Probleme zu untersuchen, beginnen Sie mit dem Verlauf der Einführung und führen Sie kubectl logs in einem CoreDNS-Pod aus, um die Protokolle von CoreDNS anzuzeigen.

  5. (Optional) Sie können Mindest- und Höchstwerte angeben, auf welche die automatische Skalierung die Anzahl der CoreDNS-Pods skalieren kann.

    Das folgende Beispiel zeigt, dass die automatische Skalierung aktiviert ist und alle optionalen Schlüssel über Werte verfügen. Wir empfehlen, die Mindestanzahl der CoreDNS-Pods immer größer als 2 zu halten, um die Ausfallsicherheit des DNS-Services im Cluster zu gewährleisten.

    aws eks update-addon --cluster-name my-cluster --addon-name coredns \ --resolve-conflicts PRESERVE --configuration-values '{"autoScaling":{"enabled":true,"minReplicas":2,"maxReplicas":10}}'
  6. Überprüfen Sie den Status der Aktualisierung des Add-Ons, indem Sie den folgenden Befehl ausführen:

    aws eks describe-addon --cluster-name my-cluster --addon-name coredns

    Wenn Sie die folgende Zeile sehen: "status": "ACTIVE", ist die Einführung abgeschlossen und das Add-On verwendet die neue Konfiguration in allen CoreDNS-Pods. Wenn Sie die Anzahl der Knoten und CPU-Kerne der Knoten im Cluster ändern, skaliert Amazon EKS die Anzahl der Replikate der CoreDNS-Bereitstellung.