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.
Servicios de clúster
Los servicios de clúster se ejecutan dentro de un clúster de EKS, pero no son cargas de trabajo de usuarios. Si tiene un servidor Linux, con frecuencia necesitará ejecutar servicios como NTP, syslog y un entorno de ejecución de contenedor para soportar sus cargas de trabajo. Los servicios de clúster son similares y admiten servicios que le ayudan a automatizar y operar su clúster. En Kubernetes, normalmente se ejecutan en el espacio de nombres del sistema kube y algunos se ejecutan como. DaemonSets
Se espera que los servicios de clúster tengan un tiempo de actividad elevado y, a menudo, son fundamentales durante las interrupciones y para la solución de problemas. Si un servicio de clúster básico no está disponible, es posible que pierda el acceso a los datos que pueden ayudar a recuperar o evitar una interrupción (por ejemplo, un uso elevado del disco). Deben ejecutarse en instancias informáticas dedicadas, como un grupo de nodos independiente o AWS Fargate. Esto garantizará que los servicios del clúster no se vean afectados en las instancias compartidas por cargas de trabajo que puedan ampliarse o consumir más recursos.
Escale CoreDNS
El escalado de CoreDNS tiene dos mecanismos principales. Reducir la cantidad de llamadas al servicio CoreDNS y aumentar la cantidad de réplicas.
Reduzca las consultas externas al reducir los puntos
La configuración ndots especifica cuántos puntos (también conocidos como «puntos») en un nombre de dominio se consideran suficientes para evitar consultar el DNS. Si tu aplicación tiene un valor de 5 puntos (predeterminado) y solicitas recursos de un dominio externo, como api.example.com (2 puntos), se consultará CoreDNS para cada dominio de búsqueda definido en/.conf para un dominio más específico. etc/resolv De forma predeterminada, se buscarán los siguientes dominios antes de realizar una solicitud externa.
api.example.<namespace>.svc.cluster.local api.example.svc.cluster.local api.example.cluster.local api.example.<region>.compute.internal
regionLos valores namespace y se sustituirán por el espacio de nombres de tu carga de trabajo y tu región de procesamiento. Es posible que tengas dominios de búsqueda adicionales en función de la configuración de tu clúster.
Puedes reducir la cantidad de solicitudes a CoreDNS reduciendo la opción ndots api.example.com. Si su carga de trabajo se conecta a servicios externos a través de DNS, le recomendamos establecer ndots en 2 para que las cargas de trabajo no hagan innecesarias las consultas de DNS en clúster. Puedes configurar un servidor DNS y un dominio de búsqueda diferentes si la carga de trabajo no requiere acceso a los servicios del clúster.
spec:
dnsPolicy: "None"
dnsConfig:
options:
- name: ndots
value: "2"
- name: edns0
Si reduces los ndots a un valor demasiado bajo o los dominios a los que te estás conectando no incluyen suficiente especificidad (incluido el final), es posible que las búsquedas de DNS fallen. Asegúrese de comprobar cómo afectará esta configuración a sus cargas de trabajo.
Escale CoreDNS horizontalmente
Las instancias de CoreDNS se pueden escalar añadiendo réplicas adicionales a la implementación. Se recomienda usar el NodeLocal DNS
NodeLocal El DNS requerirá ejecutar una instancia por nodo (como tal), DaemonSet lo que requiere más recursos informáticos en el clúster, pero evitará errores en las solicitudes de DNS y reducirá el tiempo de respuesta de las consultas de DNS en el clúster. El escalador automático proporcional del clúster escalará el CoreDNS en función del número de nodos o núcleos del clúster. No se trata de una correlación directa con las consultas de solicitud, pero puede resultar útil en función de las cargas de trabajo y del tamaño del clúster. La escala proporcional predeterminada consiste en agregar una réplica adicional por cada 256 núcleos o 16 nodos del clúster, lo que ocurra primero.
Si usas el complemento CoreDNS EKS, considera la posibilidad de habilitar la opción de escalado automático. https://docs.aws.amazon.com/eks/latest/userguide/coredns-autoscaling.html El escalador automático de CoreDNS ajusta de forma dinámica el número de réplicas de CoreDNS monitorizando el recuento de nodos y los núcleos de la CPU. Para ello, utiliza una fórmula que toma el máximo de (nodos ÷ 16) o (núcleos de CPU ÷ 256), se amplía inmediatamente cuando es necesario y se reduce gradualmente para mantener la estabilidad.
Escale verticalmente el servidor Kubernetes Metrics
El servidor Kubernetes Metrics admite el escalado horizontal y vertical. Al escalar horizontalmente el servidor de métricas, tendrá una alta disponibilidad, pero no se escalará horizontalmente para gestionar más métricas del clúster. Tendrás que escalar verticalmente el servidor de métricas en función de sus recomendaciones a
El Metrics Server guarda en la memoria los datos que recopila, agrega y sirve. A medida que crece un clúster, aumenta la cantidad de datos que almacena Metrics Server. En clústeres grandes, el Metrics Server necesitará más recursos informáticos que la reserva de memoria y CPU especificada en la instalación predeterminada. Puedes usar el escalador automático (VPA) de
CoreDNS tiene una duración mínima
Los pods usan el kube-dns Servicio para la resolución de nombres. Kubernetes usa la NAT de destino (DNAT) para redirigir el kube-dns tráfico de los nodos a los pods de backend de CoreDNS. A medida que escalas la implementación de CoreDNS, kube-proxy actualiza las reglas de iptables y las cadenas en los nodos para redirigir el tráfico de DNS a los pods de CoreDNS. Propagar nuevos puntos de enlace al escalar hacia arriba y eliminar reglas cuando se reduce la escala de CoreDNS puede tardar entre 1 y 10 segundos, según el tamaño del clúster.
Este retraso de propagación puede provocar errores en la búsqueda de DNS cuando se cierra un pod de CoreDNS pero las reglas de iptables del nodo no se han actualizado. En este escenario, el nodo puede seguir enviando consultas de DNS a un pod de CoreDNS terminado.
Para reducir los errores de búsqueda de DNS, establece una duración mínima en
Recomendamos establecer la duración del lameduck de CoreDNS en 30 segundos.
Sonda de preparación de CoreDNS
Recomendamos utilizarla /ready en lugar de /health para la sonda de preparación de CoreDNS.
De acuerdo con la recomendación anterior de establecer la duración del lameduck en 30 segundos, lo que proporciona tiempo suficiente para que las reglas de iptables del nodo se actualicen antes de que finalice el pod, /ready en lugar de utilizar la sonda de preparación de CoreDNS garantiza que el pod de CoreDNS esté completamente preparado al inicio /health para responder rápidamente a las solicitudes de DNS.
readinessProbe: httpGet: path: /ready port: 8181 scheme: HTTP
Para obtener más información sobre el complemento CoreDNS Ready, consulte https://coredns.io/plugins/ready/
Agentes de registro y supervisión
Los agentes de registro y supervisión pueden añadir una carga considerable al plano de control del clúster, ya que consultan el servidor de API para enriquecer los registros y las métricas con metadatos de la carga de trabajo. El agente de un nodo solo tiene acceso a los recursos del nodo local para ver cosas como el nombre del contenedor y del proceso. Al consultar el servidor de API, puede agregar más detalles, como el nombre y las etiquetas de la implementación de Kubernetes. Esto puede resultar extremadamente útil para la resolución de problemas, pero es perjudicial para la escalabilidad.
Como hay tantas opciones diferentes para el registro y la supervisión, no podemos mostrar ejemplos para todos los proveedores. Con fluentbit, Kube_Meta_Cache_TTL un número que reduzca las llamadas repetidas cuando los datos se puedan almacenar en caché (por ejemplo, 60).
La escalabilidad, el monitoreo y el registro tienen dos opciones generales:
-
Desactivar las integraciones
-
Muestreo y filtrado
La desactivación de las integraciones no suele ser una opción porque se pierden los metadatos del registro. Esto elimina el problema de escalado de la API, pero introducirá otros problemas al no disponer de los metadatos necesarios cuando sean necesarios.
El muestreo y el filtrado reducen la cantidad de métricas y registros que se recopilan. Esto reducirá la cantidad de solicitudes a la API de Kubernetes y reducirá la cantidad de almacenamiento necesaria para las métricas y los registros que se recopilan. La reducción de los costos de almacenamiento reducirá el costo del sistema en general.
La capacidad de configurar el muestreo depende del software del agente y se puede implementar en diferentes puntos de ingestión. Es importante añadir el muestreo lo más cerca posible del agente, ya que es probablemente allí donde se producen las llamadas al servidor de API. Póngase en contacto con su proveedor para obtener más información sobre la compatibilidad con el muestreo.
Si utiliza CloudWatch And CloudWatch Logs, puede añadir el filtrado de agentes utilizando los patrones descritos en la documentación.
Para evitar perder los registros y las métricas, debe enviar los datos a un sistema que pueda almacenar los datos en búfer en caso de que se produzca una interrupción en el terminal receptor. Con fluentbit, puede usar Amazon Kinesis Data Firehose