Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Plano de datos EKS
Para operar aplicaciones resilientes y de alta disponibilidad, necesita un plano de datos resiliente y de alta disponibilidad. Un plano de datos elástico garantiza que Kubernetes pueda escalar y reparar sus aplicaciones automáticamente. Un plano de datos resiliente consta de dos o más nodos de trabajo, puede crecer y reducirse con la carga de trabajo y recuperarse automáticamente de los fallos.
Con EKS, tiene varias opciones para los nodos de trabajo: nodos gestionados en modo automático de EKS, EC2 instancias y Fargate.
El modo automático de EKS ofrece la ruta más sencilla hacia un plano de datos resiliente. El modo automático extiende la administración de los clústeres de Kubernetes en AWS más allá del propio clúster, para permitir que AWS también configure y administre la infraestructura que permite el buen funcionamiento de sus cargas de trabajo. El modo automático escala automáticamente el plano de datos hacia arriba o hacia abajo a medida que Kubernetes escala los pods y garantiza continuamente que los nodos del clúster tengan el tamaño adecuado y rentable para las cargas de trabajo que se estén ejecutando actualmente.
Si eliges EC2 instancias, puedes gestionar los nodos de trabajo tú mismo o utilizar los grupos de nodos gestionados por EKS. Puede tener un clúster con una combinación de nodos de trabajo en modo automático, gestionados y autogestionados y Fargate.
Fargate ejecuta cada pod en un entorno informático aislado. Cada pod que se ejecuta en Fargate tiene su propio nodo de trabajo. Fargate escala automáticamente el plano de datos a medida que Kubernetes escala los pods. Puede escalar tanto el plano de datos como su carga de trabajo mediante el escalador automático de cápsulas horizontales.
La forma preferida de escalar los EC2 nodos de trabajo (si no se utiliza el modo automático de EKS, donde AWS lo realiza automáticamente) es mediante grupos de Karpenter
Recomendaciones
Distribuya los nodos de trabajo y las cargas de trabajo entre varios AZs
Puede proteger sus cargas de trabajo de los errores en una zona de disponibilidad individual ejecutando nodos de trabajo y pods en varios nodos. AZs Puede controlar la zona de disponibilidad en la que se crean los nodos de trabajo mediante las subredes en las que crea los nodos.
El método recomendado para distribuir los pods AZs es utilizar las restricciones de dispersión topológica para
La siguiente implementación distribuye los módulos entre sí, AZs si es posible, y permite que esos módulos se ejecuten de todos modos si no es así:
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
nota
kube-scheduler
solo conoce los dominios de topología a través de los nodos que existen con esas etiquetas. Si la implementación anterior se implementa en un clúster con nodos solo en una zona, todos los módulos se programarán en esos nodos, al kube-scheduler
igual que en las demás zonas. Para que esta distribución de topología funcione según lo previsto con el programador, los nodos deben existir ya en todas las zonas. La minDomains
propiedad de las restricciones de dispersión de una topología se utiliza para informar al planificador del número de dominios aptos, incluso si hay un nodo funcionando allí para evitar este problema.
aviso
Si DoNotSchedule
se establece whenUnsatisfiable
en, los pods no se podrán programar si no se cumple la restricción de dispersión de la topología. Solo debe configurarse si es preferible que los pods no se ejecuten en lugar de infringir la restricción de dispersión de la topología.
En las versiones anteriores de Kubernetes, puedes usar las reglas de antiafinidad de los pods para programar varios pods en varios. AZs En el siguiente manifiesto se indica al programador de Kubernetes que prefiera programar los pods por separado. AZs
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
aviso
No es necesario que los pods se programen de AZs forma distinta; de lo contrario, la cantidad de pods en una implementación nunca superará la cantidad de. AZs
Asegúrese de poder lanzar nodos en cada zona de disponibilidad cuando utilice volúmenes de EBS
Si utilizas Amazon EBS para proporcionar volúmenes persistentes, debes asegurarte de que los pods y el volumen de EBS asociado estén ubicados en la misma zona de disponibilidad. Un pod no puede acceder a los volúmenes persistentes respaldados por EBS ubicados en una zona de disponibilidad diferente. El programador de Kubernetes sabe en qué zona de disponibilidad se encuentra un nodo trabajador
Si utiliza el modo automático EKS o Karpenter, tendrá que asegurarse de seleccionar las subredes en NodeClass cada zona de disponibilidad. Si utiliza grupos de nodos gestionados, debe asegurarse de tener un grupo de nodos en cada zona de disponibilidad.
El modo automático de EKS incluye una capacidad de almacenamiento de EBS, pero si utiliza Karpenter o grupos de nodos gestionados, también será necesario instalar la CSI de EBS.
Utilice el modo automático de EKS para gestionar los nodos de trabajo
El modo automático de EKS agiliza la administración de EKS al proporcionar clústeres listos para la producción con una sobrecarga operativa mínima. El modo automático se encarga de aumentar o reducir el número de nodos en función de los pods que se ejecuten en el clúster. Los nodos se actualizan automáticamente con parches y correcciones de software, y las actualizaciones se realizan de acuerdo con los ajustes de NodePoolinterrupción configurados y los presupuestos de interrupción de los módulos.
Ejecute el agente de supervisión de nodos
El agente de supervisión de nodos supervisa los problemas de estado de los nodos y reacciona ante ellos publicando los eventos de Kubernetes y actualizando el estado de los nodos. El agente de monitoreo de nodos se incluye en los nodos de modo automático de EKS y se puede instalar como un complemento de EKS para los nodos que no se administran mediante el modo automático.
El modo automático de EKS, los grupos de nodos gestionados y Karpenter tienen la capacidad de detectar las condiciones fatales de los nodos notificadas por el agente de supervisión de nodos y reparar esos nodos automáticamente cuando se producen esas condiciones.
Implemente QoS
En el caso de las aplicaciones críticas, considere la posibilidad de definir requests
= limits
para el contenedor del pod. Esto garantizará que el contenedor no se destruya si otro pod solicita recursos.
Se recomienda implementar límites de CPU y memoria para todos los contenedores, ya que así se evita que un contenedor consuma recursos del sistema de forma inadvertida y afecte a la disponibilidad de otros procesos ubicados en el mismo lugar.
Configure y dimensione los recursos para todas las cargas de trabajo Requests/Limits
Se pueden aplicar algunas pautas generales para dimensionar las solicitudes de recursos y los límites de las cargas de trabajo:
-
No especifique los límites de recursos de la CPU. Si no hay límites, la solicitud actúa como un indicador del tiempo relativo de CPU que ocupan los contenedores
. Esto permite que sus cargas de trabajo utilicen toda la CPU sin límites artificiales ni privaciones de recursos. -
Para los recursos que no son de CPU, configuration
requests
=limits
proporciona el comportamiento más predecible. ¡Si!requests
=limits
, también se ha reducido la QOSdel contenedor, de garantizada a explotable, por lo que es más probable que se desaloje en caso de presión en el nodo. -
En el caso de los recursos que no sean de la CPU, no especifique un límite que sea mucho mayor que el solicitado. Cuanto mayor sea
limits
la configuración relativa arequests
, mayor será la probabilidad de que los nodos estén sobrecargados, lo que aumentará las probabilidades de que se interrumpa la carga de trabajo. -
Las solicitudes del tamaño correcto son particularmente importantes cuando se utiliza una solución de autoescalado de nodos como Karpenter
o Cluster. AutoScaler Estas herramientas analizan las solicitudes de carga de trabajo para determinar la cantidad y el tamaño de los nodos que se van a aprovisionar. Si tus solicitudes son demasiado pequeñas y los límites son mayores, es posible que tus cargas de trabajo se desalojen o que la OOM se cancele si se encuentran agrupadas en un nodo.
Determinar las solicitudes de recursos puede resultar difícil, pero herramientas como el escalador automático Vertical Pod
Configure las cuotas de recursos para los espacios de nombres
Los espacios de nombres se utilizan en entornos con muchos usuarios distribuidos en varios equipos o proyectos. Proporcionan un margen para los nombres y son una forma de dividir los recursos del clúster entre varios equipos, proyectos y cargas de trabajo. Puedes limitar el consumo total de recursos en un espacio de nombres. El ResourceQuota
Si la cuota de recursos está habilitada para un espacio de nombres para los recursos informáticos, como la CPU y la memoria, los usuarios deben especificar las solicitudes o los límites para cada contenedor de ese espacio de nombres.
Considere la posibilidad de configurar cuotas para cada espacio de nombres. Considere la posibilidad de LimitRanges
aplicar automáticamente límites preconfigurados a los contenedores dentro de un espacio de nombres.
Limite el uso de los recursos del contenedor dentro de un espacio de nombres
Las cuotas de recursos ayudan a limitar la cantidad de recursos que puede usar un espacio de nombres. El LimitRange
objetoLimitRange
puede establecer una solicitud y límites predeterminados para los contenedores, lo que resulta útil si establecer límites de recursos informáticos no es una práctica estándar en su organización. Como su nombre indica, LimitRange
puede imponer un uso mínimo y máximo de los recursos de cómputo por pod o contenedor en un espacio de nombres. Además, impone una solicitud de almacenamiento mínima y máxima por cada espacio de PersistentVolumeClaim nombres.
Considere la posibilidad LimitRange
de usarlo junto con ResourceQuota
para hacer cumplir los límites tanto a nivel de contenedor como de espacio de nombres. Al establecer estos límites, se garantizará que un contenedor o un espacio de nombres no afecte a los recursos utilizados por otros inquilinos del clúster.
Utilice NodeLocal DNSCache
Puede mejorar el rendimiento del DNS del clúster ejecutando NodeLocalDNSCachekube-dns
el Servicio. Esta función se incluye automáticamente en el modo automático EKS.
Configurar CoredNS con autoescalado
Otro método para mejorar el rendimiento del DNS del clúster consiste en habilitar el autoscalamiento integrado de los pods de CoreDNS.
Esta función monitorea continuamente el estado del clúster, incluida la cantidad de nodos y núcleos de CPU. En función de esa información, el controlador adaptará dinámicamente el número de réplicas de la implementación de CoreDNS en un clúster de Amazon EKS.