Comprensión de las muestras de Kubernetes: tipos, configuración y prácticas recomendadas



Fuente



Este artículo trata sobre la configuración de sondas de preparación, estado y arranque para detectar y trabajar con módulos en mal estado según lo traducido por el equipo aaS de Kubernetes .



¿Por qué se necesitan las validaciones de Kubernetes?



Uno de los desafíos con los sistemas distribuidos y la arquitectura de microservicios es la detección automática de aplicaciones defectuosas, la redirección de solicitudes a otros sistemas disponibles y la reparación de componentes dañados. Los controles de estado son una forma de resolver este problema y garantizar la confiabilidad. En Kubernetes, las verificaciones de estado se configuran mediante sondas para determinar el estado de cada pod.



De forma predeterminada, Kubernetes supervisa el ciclo de vida del pod y comienza a enrutar el tráfico al pod cuando los contenedores pasan de Pendiente a Correcto. Kubelet también monitorea los bloqueos de aplicaciones y reinicia el módulo para su recuperación.



Muchos desarrolladores creen que esta configuración básica es suficiente, especialmente cuando la aplicación dentro del módulo se configura utilizando administradores de procesos como PM2 para Node.js.



Sin embargo, debido a que Kubernetes considera que el módulo está en buen estado y listo para las solicitudes, tan pronto como se inicien todos los contenedores, la aplicación puede comenzar a recibir tráfico antes de que esté realmente lista. Esto puede suceder si la aplicación necesita inicializar algún estado, establecer una conexión de base de datos o cargar datos antes de procesar la lógica de la aplicación.



Esta cantidad de tiempo entre la disponibilidad real de la aplicación y el momento en que Kubernetes considera que está lista se convierte en un problema cuando la implementación comienza a escalar y las aplicaciones no preparadas reciben tráfico y devuelven un error 500.



En estas situaciones, las sondas de Kubernetes se utilizan para determinar cuándo el contenedor está listo para aceptar tráfico y cuándo debe reiniciarse. A partir de Kubernetes 1.16, se admiten tres tipos de sondas.



En este artículo, el autor analiza diferentes tipos de sondas, así como las mejores prácticas y herramientas para detectar implementaciones con posibles problemas de configuración.



Sondas de Kubernetes



Kubernetes admite sondeos de estado y preparación para las versiones ≤ 1.15. Las sondas de lanzamiento se agregaron en 1.16 como una función alfa y se movieron a beta en 1.18.



ADVERTENCIA: En la versión 1.16, algunas partes de la API de Kubernetes han quedado obsoletas. Utilice esta guía de migración para comprobar la compatibilidad.



Todas las muestras tienen los siguientes parámetros:



  • initialDelaySeconds



    : ;
  • periodSeconds



    : ;
  • timeoutSeconds



    : - ( );
  • successThreshold



    : , ;
  • failureThreshold



    : . . , .




Las sondas de preparación se utilizan para informar al kubelet cuando la aplicación está lista para aceptar tráfico nuevo. Si su aplicación tarda algún tiempo en inicializarse después de iniciar un proceso, configure una sonda de preparación para que Kubernetes espere antes de enviar nuevo tráfico. El caso de uso principal de las sondas de preparación es dirigir el tráfico a las implementaciones de servicios.





Fuente



Es importante recordar que las sondas de preparación funcionan durante toda la vida de un módulo. Esto significa que se lanzarán no solo al inicio, sino también durante todo el tiempo de funcionamiento del módulo.



Esto es necesario para situaciones en las que la aplicación no está disponible temporalmente, como cargar macrodatos o esperar conexiones externas. En este caso, no queremos matar la aplicación, sino esperar hasta que se restaure. Las sondas de preparación se utilizan para detectar este escenario y no envían tráfico a estos módulos hasta que vuelvan a pasar la verificación de preparación.



Pruebas de rendimiento



Las sondas de estado se utilizan para reiniciar los contenedores en mal estado. El Kubelet invoca periódicamente una prueba de estado, detecta el estado del módulo y lo mata si falla un control de estado.



Una prueba puede ayudar a una aplicación a salir de un punto muerto. Sin verificaciones de estado, Kubernetes considera bloqueado en saludable, ya que el proceso principal continúa ejecutándose desde la perspectiva de Kubernetes. Al configurar una sonda de estado, kubelet puede determinar que la aplicación está en mal estado y reiniciará el pod para restaurar la disponibilidad.





Fuente



Lanzar muestras



Las pruebas de inicio son similares a las pruebas listas, pero se realizan solo al inicio. Están optimizados para el lanzamiento lento de contenedores o aplicaciones con procesos de inicialización impredecibles. Con las sondas de preparación, podemos ajustar initialDelaySeconds



para determinar cuánto tiempo esperar antes de verificar la preparación.



Ahora considere una aplicación que a veces necesita cargar grandes cantidades de datos o realizar una operación intensiva en recursos al comienzo del proceso. Dado que initialDelaySeconds



es un número estático, nos vemos obligados a tomar siempre el peor de los casos (o aumentar el valor failureThreshold



, lo que puede afectar el comportamiento adicional) y esperar mucho tiempo, incluso si esta aplicación no necesita realizar una inicialización prolongada.



En cambio, usando sondas de inicio, podemos configurarfailureThreshold



y periodSeconds



manejar mejor esta incertidumbre. Por ejemplo, una configuración failureThreshold



de 15 y periodSeconds



5 significa que la aplicación tendrá 15 x 5 = 75 segundos para iniciarse antes de que se diagnostique una falla.



Configuración de muestra



Ahora que comprendemos los diferentes tipos de muestras, podemos explorar tres formas diferentes de configurar cada muestra.



HTTP



Kubelet envía una solicitud HTTP GET a la URL especificada y busca una respuesta 2xx o 3xx. Puede utilizar un punto final HTTP existente o configurar un servidor HTTP ligero para realizar pruebas (por ejemplo, un servidor Express con un punto final /healthz



).



Las sondas HTTP toman parámetros adicionales:



  • host



    : nombre de host para la conexión (por defecto, esta es la dirección IP del módulo);
  • scheme



    : HTTP o HTTPS predeterminado;
  • path



    : ruta en el servidor HTTP / S;
  • httpHeaders



    : encabezados personalizados si necesita valores de encabezado para la autenticación, configuración de CORS, etc.
  • port



    : nombre o número de puerto para acceder al servidor.


livenessProbe:
  httpGet:
    path: /healthz
    port: 8080

      
      





TCP



Si solo necesita comprobar si se puede establecer una conexión TCP, utilice una sonda TCP. Un módulo se marca como saludable si puede establecer una conexión TCP. El uso de sondas TCP puede ser útil para gRPC o servidor FTP donde las llamadas HTTP no son apropiadas.



readinessProbe:
  tcpSocket:
    port: 21

      
      





Mando



También puede configurar la sonda para ejecutar un comando de shell. La verificación pasa si el comando regresa con el código de salida 0. De lo contrario, el módulo se marca como defectuoso.



Este tipo de verificación puede ser útil si no desea abrir un servidor / puerto HTTP, o si es más fácil verificar los pasos de inicialización con comandos. Por ejemplo, verifique si se creó un archivo de configuración o ejecute un comando CLI.



readinessProbe:
  exec:
    command: ["/bin/sh", "-ec", "vault status -tls-skip-verify"]

      
      





Mejores prácticas para probar Kubernetes



Los parámetros de muestra exactos dependen de su aplicación, pero aquí hay algunas pautas generales para comenzar:



  1. Para clústeres de Kubernetes más antiguos (≤ 1,15), use una sonda preparada para el retraso inicial para manejar la fase de inicio del contenedor. Para hacer esto, use el 99% de tiempo percentil. Pero facilite esta verificación, ya que la prueba de preparación se ejecutará durante toda la vida útil del módulo. No queremos que se agote el tiempo de espera de la sonda porque la verificación de disponibilidad lleva mucho tiempo.
  2. (≥ 1.16) Kubernetes . (, /healthz



    ), . failureThreshold



    , , . .
  3. , . , , , . .
  4. , . , , , . , .


En resumen, las sondas bien definidas generalmente aumentan la estabilidad y la disponibilidad. Asegúrese de realizar un seguimiento de los tiempos de inicio y el comportamiento del sistema para ajustar la configuración de muestra a medida que cambian las aplicaciones.



Herramientas



Dada la importancia de las sondas de Kubernetes, puede utilizar las herramientas de análisis de recursos de Kubernetes para encontrar las sondas que faltan. Estas herramientas se pueden ejecutar en clústeres existentes o integradas en un proceso de CI / CD para fallar automáticamente al implementar cargas de trabajo sin los recursos configurados correctamente:



  • polaris es una utilidad de análisis de recursos con una hermosa barra de herramientas que también se puede utilizar como un webhook de validación o una herramienta de línea de comandos.
  • kube-score es una herramienta de análisis de código estático que funciona con archivos Helm, Kustomize y YAML estándar.
  • popeye es una herramienta de utilidad de solo lectura que escanea los clústeres de Kubernetes e informa posibles problemas de configuración.


En estos dos canales de Telegram, encontrará noticias de nuestro aaS de Kubernetes y anuncios de eventos de encuentro de @Kubernetes .



Qué más leer:






All Articles