Herramientas de usuario

Herramientas del sitio


informatica:sistemas_operativos:cursos:healthcheck

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Próxima revisión
Revisión previa
informatica:sistemas_operativos:cursos:healthcheck [2023/10/18 19:47] – creado tempwininformatica:sistemas_operativos:cursos:healthcheck [2023/11/16 13:27] (actual) – [Healthcheck en imágenes] tempwin
Línea 6: Línea 6:
  
 Docker permite lanzar una comprobación, pero esta comprobación depende de nosotros. No es lo mismo comprobar que responda al puerto 80, que hacer comprobaciones más complejas. Docker permite lanzar una comprobación, pero esta comprobación depende de nosotros. No es lo mismo comprobar que responda al puerto 80, que hacer comprobaciones más complejas.
 +
 +Podemos hacer healthchecks en 3 partes:
 +
 +  * Al construir la imagen
 +  * Al lanzar un contenedor (docker run)
 +  * En Compose
 +  * Usando otros contenedores
 +
 +===== Healthcheck en imágenes =====
 +
 +En un Dockerfile:
 +
 +<code>
 +
 +RUN echo "#!/bin/bash\n\nservice nginx status || exit 1" > /opt/healthcheck.sh
 +# con curl:
 +# RUN echo "#!/bin/bash\n\n curl -f http://localhost/ || exit 1" > /opt/healthcheck.sh
 +RUN chmod +x /opt/healthcheck.sh
 +
 +FROM nginx
 +
 +HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 CMD ["/opt/healthcheck.sh"]
 +# HEALTHCHECK --interval=10s --timeout=10s --start-period=5s --retries=3 CMD curl -f http://localhost:80 || exit 1
 +</code>
 +
 +  * ''interval'': cada cuanto tiempo se ejecuta la comprobación.
 +  * ''timeout'': tiempo máximo para que la comprobación finalice exitosamente.
 +  * ''start-period'': tiempo de espera desde que se lanza el contenedor hasta que ejecutamos la primera comprobación.
 +  * ''retries'': número de veces consecutivas que puede fallar la comprobación antes de considerar que el contenedor está en estado //unhealthy//
 +  * ''CMD'' es lo que ejecutaremos como test / comprobación del estado de salud  del contenedor.
 +
 +Otra opción:
 +
 +<code>
 +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
 +    CMD [ $(curl -I -s http://127.0.0.1:8000 | head -n 1 | cut -d' ' -f2 | head -n 1) -eq 200 ] || exit 1
 +</code>
 +
 +Al ver el estado del contenedor:
 +
 +<code>
 +docker ps
 +
 +
 +</code>
 +
 +===== Docker Compose =====
 +
 +<code yaml>
 +services:
 +  web:
 +    image: nginx
 +    
 +    healthcheck:
 +      interval: 5s
 +      timeout: 5s
 +      start_period: 10s
 +      retries: 3
 +      test: curl -f http://localhost || exit 1
 +</code>
 +
 +===== A través de otro contenedor específico =====
 +
 +Hay contenedores que permiten monitorizar el estado de contenedores y reiniciar aquellos //unhealthy//. Por ejemplo: [[https://hub.docker.com/r/willfarrell/autoheal|Docker Autoheal]]
 +
 +<code>
 +docker run -d \
 +    --name autoheal \
 +    --restart=always \
 +    -e AUTOHEAL_CONTAINER_LABEL=all \
 +    -v /var/run/docker.sock:/var/run/docker.sock \
 +    willfarrell/autoheal
 +</code>
 +
 +Podemos incluirlo en un Compose:
 +
 +<code yaml>
 +services:
 +  web:
 +    image: nginx
 +
 +    # marcamos que queremos que actúe el Auto heal
 +    labels:
 +      - autoheal=true
 +    healthcheck:
 +      interval: 5s
 +      timeout: 5s
 +      start_period: 10s
 +      retries: 3
 +      test: curl -f http://localhost || exit 1
 +
 +  autoheal:
 +    image: willfarrell/autoheal
 +    restart: always
 +    environment:
 +      - AUTOHEAL_CONTAINER_LABEL=all
 +    volumes:
 +      - /var/run/docker.sock:/var/run/docker.sock
 +</code>
informatica/sistemas_operativos/cursos/healthcheck.1697651273.txt.gz · Última modificación: por tempwin