Mise à l’échelle des pods CoreDNS pour un trafic DNS élevé - Amazon EKS

Aidez à améliorer cette page

Pour contribuer à ce guide de l’utilisateur, cliquez sur le lien Modifier cette page sur GitHub qui se trouve dans le volet droit de chaque page.

Mise à l’échelle des pods CoreDNS pour un trafic DNS élevé

Lorsque vous lancez un cluster Amazon EKS avec au moins un nœud, un déploiement de deux réplicas de l’image CoreDNS est créé par défaut, quel que soit le nombre total de nœuds déployés dans votre cluster. Les pods CoreDNS fournissent une résolution de noms pour tous les pods du cluster. Les applications utilisent la résolution de noms pour se connecter aux pods et services du cluster, ainsi qu’aux services externes situés hors du cluster. À mesure que le nombre de requêtes de résolution de noms (requêtes) émises par les pods augmente, les pods CoreDNS peuvent être surchargés, ce qui provoque un ralentissement et peut entraîner le rejet de certaines requêtes que les pods ne peuvent pas traiter.

Pour gérer cette augmentation de charge sur les pods CoreDNS, il est recommandé de mettre en place un système d’autoscaling pour CoreDNS. Amazon EKS peut gérer automatiquement la mise à l’échelle du déploiement CoreDNS dans le cadre de la version du module complémentaire EKS pour CoreDNS. Cet autoscaler CoreDNS surveille en continu l’état du cluster, y compris le nombre de nœuds et le nombre de cœurs de processeur. En fonction de ces informations, le contrôleur ajuste dynamiquement le nombre de réplicas du déploiement CoreDNS dans le cluster EKS. Cette fonctionnalité est disponible pour CoreDNS en version v1.9 et ultérieure. Pour plus d’informations sur les versions compatibles avec la mise à l’échelle automatique de CoreDNS, consultez la section suivante.

Le système gère automatiquement les réplicas CoreDNS à l’aide d’une formule dynamique basée à la fois sur le nombre de nœuds et sur le nombre de cœurs CPU dans le cluster, calculée comme le maximum entre (numberOfNodes divisé par 16) et (numberOfCPUCores divisé par 256). Il évalue la demande sur des périodes de pointe de 10 minutes : il augmente verticalement et immédiatement le nombre de réplicas si nécessaire pour répondre à une charge de requête DNS plus élevée, tout en reduissant verticalement et progressivement le nombre de réplicas de 33 % toutes les trois minutes afin de maintenir la stabilité du système et d’éviter toute interruption.

Il est recommandé d’utiliser cette fonctionnalité conjointement avec les bonnes pratiques de mise à l’échelle automatique des clusters EKS, afin d’améliorer la disponibilité globale des applications et la capacité de mise à l’échelle du cluster.

Prérequis

Pour qu’Amazon EKS puisse mettre à l’échelle votre déploiement CoreDNS, trois prérequis doivent être remplis :

  • Vous devez utiliser la version de module complémentaire EKS requise pour CoreDNS.

  • Votre cluster doit exécuter au minimum les versions de cluster et de plateforme requises.

  • Votre cluster doit exécuter au minimum la version requise du module complémentaire EKS pour CoreDNS.

Version minimale du cluster

La mise à l’échelle automatique de CoreDNS est effectuée par un nouveau composant intégré au plan de contrôle du cluster, géré directement par Amazon EKS. Pour cette raison, vous devez mettre à niveau votre cluster vers une version d’EKS qui prend en charge la version de plateforme minimale intégrant ce nouveau composant.

Un nouveau cluster Amazon EKS. Pour en déployer un, consultez Mise en route avec Amazon EKS. Le cluster doit exécuter l’une des versions de Kubernetes et de plateforme indiquées dans le tableau suivant, ou une version ultérieure. Toute version de Kubernetes et de la plateforme ultérieure à celles indiquées est également prise en charge. Vous pouvez vérifier la version actuelle de Kubernetes en remplaçant my-cluster par le nom de votre cluster dans la commande suivante, puis en exécutant la commande modifiée :

aws eks describe-cluster --name my-cluster --query cluster.version --output text
Version de Kubernetes Version de la plateforme

Non répertoriée

Toutes les versions de plateforme

1.29.3

eks.7

1.28.8

eks.13

1.27.12

eks.17

1.26.15

eks.18

Note

Toutes les versions de plateforme des versions ultérieures de Kubernetes sont également prises en charge, par exemple Kubernetes en version 1.30 à partir de eks.1 et ultérieure est compatible.

Version minimale du module complémentaire EKS

Version de Kubernetes 1.29 1.28

v1.11.1-eksbuild.9

v1.10.1-eksbuild.11

  1. Assurez-vous que votre cluster exécute au moins la version minimale requise.

    Amazon EKS met automatiquement à niveau les clusters entre les versions de plateforme d’une même version de Kubernetes, et vous ne pouvez pas lancer cette mise à jour manuellement. En revanche, vous pouvez mettre à niveau votre cluster vers la version suivante de Kubernetes. Le cluster sera alors mis à niveau vers cette version K8s ainsi que vers la dernière version de plateforme disponible.

    Les nouvelles versions de Kubernetes introduisent parfois des modifications importantes. Il est donc recommandé de tester le comportement de vos applications dans un cluster distinct exécutant la nouvelle version de Kubernetes, avant de mettre à jour vos clusters de production.

    Pour mettre à niveau un cluster vers une nouvelle version de Kubernetes, suivez la procédure décrite dans Mise à jour un cluster existant vers une nouvelle version de Kubernetes.

  2. Assurez-vous que vous utilisez le module complémentaire EKS pour CoreDNS, et non un déploiement CoreDNS autogéré.

    Selon l'outil avec lequel vous avez créé votre cluster, le type de module complémentaire Amazon EKS peut ne pas être actuellement installé sur votre cluster. Pour vérifier quel type de module complémentaire est installé sur votre cluster, exécutez la commande suivante. Remplacez my-cluster par le nom de votre cluster.

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

    Si un numéro de version est renvoyé, cela signifie que vous avez installé sur votre cluster le module complémentaire de type Amazon EKS, et vous pouvez passer à l’étape suivante. Si une erreur est renvoyée, cela signifie que le type de module complémentaire Amazon EKS n’est pas installé sur votre cluster. Suivez les étapes restantes de la procédure Création du module complémentaire CoreDNS Amazon EKS afin de remplacer la version autogérée par le module complémentaire Amazon EKS.

  3. Assurez-vous que votre module complémentaire EKS pour CoreDNS est d’une version égale ou supérieure à la version minimale requise.

    Déterminez la version du module complémentaire actuellement installée sur votre cluster. Vous pouvez le vérifier dans la AWS Management Console ou en exécutant la commande suivante :

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

    L'exemple qui suit illustre un résultat.

    v1.10.1-eksbuild.13

    Comparez cette version avec la version minimale du module complémentaire EKS indiquée dans la section précédente. Si nécessaire, mettez à niveau le module complémentaire EKS vers une version supérieure en suivant la procédure Mise à jour du module complémentaire CoreDNS Amazon EKS.

  4. Dans la section Paramètres de configuration facultatifs du module complémentaire EKS, ajoutez la configuration de mise à l’échelle automatique.

    1. Ouvrez la console Amazon EKS.

    2. Dans le panneau de navigation de gauche, sélectionnez Clusters, puis sélectionnez le nom du cluster pour lequel vous souhaitez configurer le module complémentaire.

    3. Choisissez l'onglet Modules complémentaires.

    4. Cochez la case située dans le coin supérieur droit du bloc CoreDNS, puis sélectionnez Modifier.

    5. Sur la page Configurer CoreDNS :

      1. Sélectionnez la version que vous souhaitez utiliser. Il est recommandé de conserver la même version que celle de l’étape précédente et d’effectuer la mise à jour de la version et de la configuration séparément.

      2. Sélectionnez Paramètres de configuration facultatifs.

      3. Dans le champ Valeurs de configuration, saisissez la clé JSON "autoscaling": et la valeur d’un objet JSON imbriqué comportant une clé "enabled": et une valeur true. Le texte obtenu doit être un objet JSON valide. Si cette clé et cette valeur sont les seules données de la zone de texte, entourez-les d'accolades { }. L’exemple suivant montre la mise à l’échelle automatique activée :

        { "autoScaling": { "enabled": true } }
      4. (Facultatif) Vous pouvez spécifier les valeurs minimales et maximales auxquelles l’autoscaling peut mettre à l’échelle le nombre de pods CoreDNS.

        L’exemple suivant montre la mise à l’échelle automatique activée ainsi que toutes les clés facultatives ayant des valeurs définies. Il est recommandé que le nombre minimal de pods CoreDNS soit toujours supérieur à 2, afin d’assurer la résilience du service DNS dans le cluster.

        { "autoScaling": { "enabled": true, "minReplicas": 2, "maxReplicas": 10 } }
    6. Pour appliquer la nouvelle configuration en remplaçant les pods CoreDNS, sélectionnez Enregistrer les modifications.

      Amazon EKS applique les modifications au module complémentaire EKS à l’aide d’un déploiement Kubernetes progressif pour CoreDNS. Vous pouvez suivre l’état du déploiement dans l’Historique des mises à jour du module complémentaire, dans AWS Management Console, ainsi qu’à l’aide de kubectl rollout status deployment/coredns --namespace kube-system.

      L’outil kubectl rollout propose les commandes suivantes :

      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

      Si le déploiement prend trop de temps, Amazon EKS annule automatiquement le déploiement, et un message indiquant un type de Mise à jour du module complémentaire avec un état Échec est ajouté à l’Historique des mises à jour du module complémentaire. Pour analyser les problèmes, commencez par consulter l’historique du déploiement, puis exécutez la commande kubectl logs sur un pod CoreDNS afin d’afficher les journaux CoreDNS.

  5. Si la nouvelle entrée de l’Historique des mises à jour affiche un état Réussi, cela signifie que le déploiement est terminé et que le module complémentaire utilise la nouvelle configuration sur l’ensemble des pods CoreDNS. Lorsque le nombre de nœuds et de cœurs du processeur du cluster varie, Amazon EKS ajuste dynamiquement le nombre de réplicas du déploiement CoreDNS en conséquence.

  1. Assurez-vous que votre cluster exécute au moins la version minimale requise.

    Amazon EKS met automatiquement à niveau les clusters entre les versions de plateforme d’une même version de Kubernetes, et vous ne pouvez pas lancer cette mise à jour manuellement. En revanche, vous pouvez mettre à niveau votre cluster vers la version suivante de Kubernetes. Le cluster sera alors mis à niveau vers cette version K8s ainsi que vers la dernière version de plateforme disponible.

    Les nouvelles versions de Kubernetes introduisent parfois des modifications importantes. Il est donc recommandé de tester le comportement de vos applications dans un cluster distinct exécutant la nouvelle version de Kubernetes, avant de mettre à jour vos clusters de production.

    Pour mettre à niveau un cluster vers une nouvelle version de Kubernetes, suivez la procédure décrite dans Mise à jour un cluster existant vers une nouvelle version de Kubernetes.

  2. Assurez-vous que vous utilisez le module complémentaire EKS pour CoreDNS, et non un déploiement CoreDNS autogéré.

    Selon l'outil avec lequel vous avez créé votre cluster, le type de module complémentaire Amazon EKS peut ne pas être actuellement installé sur votre cluster. Pour vérifier quel type de module complémentaire est installé sur votre cluster, exécutez la commande suivante. Remplacez my-cluster par le nom de votre cluster.

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

    Si un numéro de version est renvoyé, le type de module complémentaire Amazon EKS est installé sur votre cluster. Si une erreur est renvoyée, cela signifie que le type de module complémentaire Amazon EKS n’est pas installé sur votre cluster. Suivez les étapes restantes de la procédure Création du module complémentaire CoreDNS Amazon EKS afin de remplacer la version autogérée par le module complémentaire Amazon EKS.

  3. Assurez-vous que votre module complémentaire EKS pour CoreDNS est d’une version égale ou supérieure à la version minimale requise.

    Déterminez la version du module complémentaire actuellement installée sur votre cluster. Vous pouvez le vérifier dans la AWS Management Console ou en exécutant la commande suivante :

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

    L'exemple qui suit illustre un résultat.

    v1.10.1-eksbuild.13

    Comparez cette version avec la version minimale du module complémentaire EKS indiquée dans la section précédente. Si nécessaire, mettez à niveau le module complémentaire EKS vers une version supérieure en suivant la procédure Mise à jour du module complémentaire CoreDNS Amazon EKS.

  4. Dans la section Paramètres de configuration facultatifs du module complémentaire EKS, ajoutez la configuration de mise à l’échelle automatique.

    Exécutez la commande AWS CLI suivante. Remplacez my-cluster par le nom de votre cluster et l'ARN du rôle IAM par le rôle que vous utilisez.

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

    Amazon EKS applique les modifications au module complémentaire EKS à l’aide d’un déploiement Kubernetes progressif pour CoreDNS. Vous pouvez suivre l’état du déploiement dans l’Historique des mises à jour du module complémentaire, dans AWS Management Console, ainsi qu’à l’aide de kubectl rollout status deployment/coredns --namespace kube-system.

    L’outil kubectl rollout propose les commandes suivantes :

    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

    Si le déploiement prend trop de temps, Amazon EKS annule automatiquement le déploiement, et un message indiquant un type de Mise à jour du module complémentaire avec un état Échec est ajouté à l’Historique des mises à jour du module complémentaire. Pour analyser les problèmes, commencez par consulter l’historique du déploiement, puis exécutez la commande kubectl logs sur un pod CoreDNS afin d’afficher les journaux CoreDNS.

  5. (Facultatif) Vous pouvez spécifier les valeurs minimales et maximales auxquelles l’autoscaling peut mettre à l’échelle le nombre de pods CoreDNS.

    L’exemple suivant montre la mise à l’échelle automatique activée ainsi que toutes les clés facultatives ayant des valeurs définies. Il est recommandé que le nombre minimal de pods CoreDNS soit toujours supérieur à 2, afin d’assurer la résilience du service DNS dans le cluster.

    aws eks update-addon --cluster-name my-cluster --addon-name coredns \ --resolve-conflicts PRESERVE --configuration-values '{"autoScaling":{"enabled":true,"minReplicas":2,"maxReplicas":10}}'
  6. Pour vérifier l’état de la mise à jour du module complémentaire, exécutez la commande suivante :

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

    Si vous voyez cette ligne :"status": "ACTIVE", cela signifie que le déploiement est terminé et que le module complémentaire utilise la nouvelle configuration dans tous les pods CoreDNS. Lorsque le nombre de nœuds et de cœurs du processeur du cluster varie, Amazon EKS ajuste dynamiquement le nombre de réplicas du déploiement CoreDNS en conséquence.