Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Plan de données EKS
Pour exploiter des applications hautement disponibles et résilientes, vous avez besoin d'un plan de données hautement disponible et résilient. Un plan de données élastique permet à Kubernetes de faire évoluer et de réparer automatiquement vos applications. Un plan de données résilient se compose de deux nœuds de travail ou plus, peut augmenter et diminuer en fonction de la charge de travail et se rétablir automatiquement en cas de panne.
Vous avez plusieurs choix pour les nœuds de travail avec EKS : nœuds gérés en mode automatique EKS, instances EC2 et https://docs.aws.amazon.com/eks/latest/userguide/fargate.html Fargate.
Le mode EKS Auto constitue le moyen le plus simple d'accéder à un plan de données résilient. Le mode automatique étend la gestion des clusters Kubernetes par AWS au-delà du cluster lui-même, afin de permettre à AWS de configurer et de gérer l'infrastructure qui permet le bon fonctionnement de vos charges de travail. Le mode automatique redimensionne automatiquement le plan de données vers le haut ou vers le bas au fur et à mesure que Kubernetes fait évoluer les Pods et veille en permanence à ce que les nœuds de votre cluster soient dimensionnés de manière appropriée et rentable pour les charges de travail en cours d'exécution.
Si vous choisissez des instances EC2, vous pouvez gérer vous-même les nœuds de travail ou utiliser des groupes de nœuds gérés par EKS. Vous pouvez avoir un cluster avec une combinaison de mode automatique, de nœuds de travail gérés et autogérés et de Fargate.
Fargate exécute chaque Pod dans un environnement informatique isolé. Chaque Pod exécuté sur Fargate possède son propre nœud de travail. Fargate redimensionne automatiquement le plan de données au fur et à mesure que Kubernetes redimensionne les pods. Vous pouvez redimensionner à la fois le plan de données et votre charge de travail à l'aide du scaler automatique à pod horizontal.
La méthode préférée pour dimensionner les nœuds de travail EC2 (si vous n'utilisez pas le mode EKS Auto où cela est effectué automatiquement par AWS) est d'utiliser Karpenter
Recommandations
Répartissez les nœuds de travail et les charges de travail sur plusieurs zones de travail
Vous pouvez protéger vos charges de travail contre les défaillances dans une zone de disponibilité individuelle en exécutant des nœuds de travail et des pods dans plusieurs zones de disponibilité. Vous pouvez contrôler l'AZ dans laquelle les nœuds de travail sont créés à l'aide des sous-réseaux dans lesquels vous créez les nœuds.
La méthode recommandée pour répartir les pods entre les zones de zone de zone de zone consiste à utiliser les contraintes de répartition de la topologie pour les pods
Le déploiement ci-dessous répartit les pods entre les zones de disponibilité si possible, en laissant ces pods fonctionner quand même :
apiVersion: apps/v1 kind: Deployment metadata: name: web-server spec: replicas: 3 selector: matchLabels: app: web-server template: metadata: labels: app: web-server spec: topologySpreadConstraints: - maxSkew: 1 whenUnsatisfiable: ScheduleAnyway topologyKey: topology.kubernetes.io/zone labelSelector: matchLabels: app: web-server containers: - name: web-app image: nginx resources: requests: cpu: 1
Note
kube-schedulerne connaît les domaines de topologie que via les nœuds qui existent avec ces étiquettes. Si le déploiement ci-dessus est déployé sur un cluster dont les nœuds ne se trouvent que dans une seule zone, tous les pods seront planifiés sur ces nœuds car ils kube-scheduler ne connaissent pas les autres zones. Pour que cette topologie étendue fonctionne comme prévu avec le planificateur, des nœuds doivent déjà exister dans toutes les zones. La minDomains propriété des contraintes d'étalement de la topologie est utilisée pour informer le planificateur du nombre de domaines éligibles, même si un nœud y est exécuté pour éviter ce problème.
Avertissement
Si whenUnsatisfiable la valeur est DoNotSchedule définie sur, les pods ne seront pas planifiés si la contrainte d'étalement de la topologie ne peut pas être respectée. Il ne doit être défini que s'il est préférable que les pods ne s'exécutent pas au lieu de violer la contrainte de propagation de la topologie.
Sur les anciennes versions de Kubernetes, vous pouvez utiliser les règles d'anti-affinité des pods pour planifier des pods sur plusieurs zones de disponibilité. Le manifeste ci-dessous indique au planificateur Kubernetes de préférer la planification des pods dans des zones de disponibilité distinctes.
apiVersion: apps/v1 kind: Deployment metadata: name: web-server labels: app: web-server spec: replicas: 4 selector: matchLabels: app: web-server template: metadata: labels: app: web-server spec: affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - podAffinityTerm: labelSelector: matchExpressions: - key: app operator: In values: - web-server topologyKey: failure-domain.beta.kubernetes.io/zone weight: 100 containers: - name: web-app image: nginx
Avertissement
N'exigez pas que les pods soient planifiés sur des zones de zone de disponibilité distinctes, sinon le nombre de modules d'un déploiement ne dépassera jamais le nombre de zones de zone de disponibilité.
Garantir la possibilité de lancer des nœuds dans chaque zone de disponibilité lors de l'utilisation de volumes EBS
Si vous utilisez Amazon EBS pour fournir des volumes persistants, vous devez vous assurer que les pods et le volume EBS associé se trouvent dans la même zone de disponibilité. Un Pod ne peut pas accéder à des volumes EBS-backed persistants situés dans une zone de disponibilité différente. Le planificateur Kubernetes sait dans quelle zone de zone de travail se
Si vous utilisez le mode automatique EKS ou Karpenter, vous devez vous assurer que vous NodeClass sélectionnez des sous-réseaux dans chaque zone de zone de zone de zone de zone. Si vous utilisez des groupes de nœuds gérés, vous devez vous assurer de disposer d'un groupe de nœuds dans chaque zone de disponibilité.
Une capacité de stockage EBS est intégrée au mode EKS Auto, mais si vous utilisez Karpenter ou Managed Node Groups, EBS CSI devra également être installé.
Utiliser le mode automatique EKS pour gérer les nœuds de travail
Le mode automatique EKS rationalise la gestion d'EKS en fournissant des clusters prêts pour la production avec un minimum de frais opérationnels. Le mode automatique est responsable de l'augmentation ou de la diminution du nombre de nœuds en fonction des pods qui s'exécutent dans le cluster. Les nœuds sont automatiquement tenus à jour grâce aux correctifs et correctifs logiciels, les mises à jour étant effectuées conformément aux paramètres d'NodePoolinterruption configurés et aux budgets d'interruption des modules.
Exécutez l'agent de surveillance des nœuds
L'agent de surveillance des nœuds surveille les problèmes de santé des nœuds et y réagit en publiant les événements Kubernetes et en mettant à jour l'état des nœuds. L'agent de surveillance des nœuds est inclus dans les nœuds en mode automatique EKS et peut être installé en tant qu'extension EKS pour les nœuds qui ne sont pas gérés par le mode automatique.
Le mode automatique EKS, les groupes de nœuds gérés et Karpenter sont tous capables de détecter les conditions fatales des nœuds signalées par l'agent de surveillance des nœuds et de réparer ces nœuds automatiquement lorsque ces conditions se produisent.
Mettre en œuvre la QoS
Pour les applications critiques, pensez à définir requests = limits pour le conteneur du Pod. Cela garantira que le conteneur ne sera pas détruit si un autre pod demande des ressources.
Il est recommandé d'implémenter des limites de processeur et de mémoire pour tous les conteneurs, car cela empêche un conteneur de consommer par inadvertance des ressources système, ce qui a un impact sur la disponibilité d'autres processus colocalisés.
Configurer et dimensionner les ressources Requests/Limits pour toutes les charges de travail
Certaines directives générales peuvent être appliquées au dimensionnement des demandes de ressources et aux limites des charges de travail :
-
Ne spécifiez pas de limites de ressources sur le processeur. En l'absence de limites, la requête agit comme un poids sur le temps CPU relatif obtenu par les conteneurs
. Cela permet à vos charges de travail d'utiliser la totalité du processeur sans limite artificielle ni interruption de service. -
Pour les ressources autres que le processeur, la configuration
requests=limitsfournit le comportement le plus prévisible. Sirequests! =limits, le conteneur voit également sa QOSréduite de Guaranteed à Burstable, ce qui le rend plus susceptible d'être expulsé en cas de pression sur les nœuds. -
Pour les ressources autres que le processeur, ne spécifiez pas de limite beaucoup plus grande que la demande. Plus le nombre de nœuds
limitsconfigurés est élevérequests, plus il est probable que les nœuds soient surchargés, ce qui augmente les risques d'interruption de la charge de travail. -
Les requêtes correctement dimensionnées sont particulièrement importantes lors de l'utilisation d'une solution de dimensionnement automatique des nœuds telle que Karpenter
ou Cluster. AutoScaler Ces outils examinent vos demandes de charge de travail afin de déterminer le nombre et la taille des nœuds à provisionner. Si vos demandes sont trop petites et que les limites sont plus élevées, vous risquez de voir vos charges de travail expulsées ou l'OOM supprimé si elles étaient concentrées sur un nœud.
Il peut être difficile de déterminer les demandes de ressources, mais des outils tels que le Vertical Pod Autoscaler
Configurer des quotas de ressources pour les espaces de noms
Les espaces de noms sont destinés à être utilisés dans des environnements avec de nombreux utilisateurs répartis sur plusieurs équipes ou projets. Ils fournissent une portée pour les noms et permettent de répartir les ressources du cluster entre plusieurs équipes, projets et charges de travail. Vous pouvez limiter la consommation globale de ressources dans un espace de noms. L'ResourceQuota
Si le quota de ressources est activé pour un espace de noms pour les ressources de calcul telles que le processeur et la mémoire, les utilisateurs doivent spécifier des demandes ou des limites pour chaque conteneur de cet espace de noms.
Pensez à configurer des quotas pour chaque espace de noms. Pensez LimitRanges à l'utiliser pour appliquer automatiquement des limites préconfigurées aux conteneurs au sein d'un espace de noms.
Limiter l'utilisation des ressources du conteneur dans un espace de noms
Les quotas de ressources permettent de limiter la quantité de ressources qu'un espace de noms peut utiliser. L'LimitRangeobjet LimitRangeVous pouvez définir une demande par défaut et des limites pour les conteneurs, ce qui est utile si la définition de limites de ressources de calcul n'est pas une pratique courante dans votre organisation. Comme son nom l'indique, LimitRange peut imposer une utilisation minimale et maximale des ressources de calcul par pod ou conteneur dans un espace de noms. En outre, appliquez une demande de stockage minimale et maximale par espace PersistentVolumeClaim de noms.
Envisagez LimitRange de l'utiliser conjointement avec ResourceQuota pour appliquer des limites au niveau d'un conteneur ainsi qu'au niveau de l'espace de noms. La définition de ces limites garantit qu'un conteneur ou un espace de noms n'empiète pas sur les ressources utilisées par les autres locataires du cluster.
Utiliser NodeLocal DNSCache
Vous pouvez améliorer les performances DNS du cluster en exécutant NodeLocal DNSCachekube-dns Service. Cette fonction est automatiquement incluse dans le mode automatique EKS.
Configurer CoreDNS avec mise à l'échelle automatique
Une autre méthode pour améliorer les performances du Cluster DNS consiste à activer la mise à l'échelle automatique intégrée des pods CoreDNS.
Cette fonctionnalité surveille en permanence l'état du cluster, y compris le nombre de nœuds et 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.