GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Supervisión de contenedores Docker:ventajas, prácticas recomendadas y herramientas imprescindibles

Hace ocho años los contenedores eran una tecnología conocida, pero con poca adopción pública. Luego, Solomon Hykes creó Docker, una tecnología de contenedores que hace que los contenedores sean mucho más fáciles de usar. Hoy en día, los contenedores gobiernan el mundo de TI. Gartner predice que el 70 % de las organizaciones ejecutarán aplicaciones en contenedores para 2023.

¿Por qué? Las organizaciones se dan cuenta de los beneficios de una configuración más sencilla, una implementación más rápida y la posibilidad de ejecutar más cargas de trabajo en el mismo hardware con aplicaciones en contenedores.

Para hacer el mejor uso posible de los contenedores, es imprescindible monitorear los contenedores Docker. Sin monitoreo de contenedores, viaja en la oscuridad. Literalmente, no puede ver qué tan bien están funcionando sus contenedores, qué están haciendo o qué tan bien están haciendo su trabajo.

Además, sin el monitoreo de contenedores de Docker, no puede saber cómo funcionan los microservicios y las aplicaciones creadas en los contenedores. El monitoreo de contenedores le permite saber qué sucede con los propios contenedores y con sus programas más grandes orientados al usuario.

Supervisión de contenedores Docker:conceptos básicos

Una de las principales razones por las que los contenedores son populares es porque se prestan a la Integración continua/Implementación continua (CI/CD). Esta es una metodología DevOps diseñada para permitir que los programadores integren su código en un repositorio compartido de manera temprana y frecuente. Una vez allí, los programas en contenedores se implementan de manera rápida y eficiente.

Docker también permite a los desarrolladores empaquetar, enviar y ejecutar cualquier aplicación como un contenedor liviano, portátil y autosuficiente, que puede ejecutarse prácticamente en cualquier lugar. Los contenedores le brindan portabilidad instantánea de aplicaciones.

Los contenedores hacen esto al permitir que los desarrolladores aíslen el código en un solo contenedor, lo que hace que sea más eficiente modificar y actualizar el programa. Permite a las empresas dividir grandes proyectos de desarrollo entre varios equipos ágiles más pequeños mediante canalizaciones de CI/CD para automatizar la entrega de código nuevo y actualizado a través de contenedores.

Finalmente, y quizás el punto más importante para las empresas, los contenedores les permiten maximizar los recursos de hardware y nube. Como explicó James Bottomley, ex CTO de virtualización de servidores de Parallels y desarrollador líder del kernel de Linux, “los hipervisores de VM, como Hyper-V, KVM y Xen, se basan en la emulación de hardware virtual. Eso significa que son gordos en términos de requisitos del sistema".

Los contenedores, sin embargo, usan sistemas operativos compartidos, por lo que son mucho más delgados que los hipervisores en términos de recursos del sistema. En lugar de virtualizar el hardware, los contenedores descansan en una sola instancia de Linux. Esto significa que puede "dejar atrás el 99,9 por ciento de la VM basura inútil, dejándolo con una cápsula pequeña y ordenada que contiene su aplicación", como dijo Bottomley. En otras palabras, con un sistema de contenedores bien ajustado, puede tener de cuatro a seis contenedores ejecutándose en un sistema que, en el pasado, solo podía haber ejecutado una única instancia.

Hoy en día, hay muchos tipos de plataformas de contenedores. Si bien Docker es el más conocido, también hay LXC, runC, containerd y podman. Todos realizan funciones similares y se pueden gestionar en gran medida con las mismas herramientas.

¿Qué es Docker?

Entonces, ¿qué es Docker específicamente? Docker está construido sobre LXC. Al igual que con cualquier otro contenedor, en lo que respecta a cualquier programa que se ejecute en Docker, tiene su propio sistema de archivos, almacenamiento, CPU y RAM. La diferencia clave entre los contenedores y las máquinas virtuales es que, mientras que el hipervisor abstrae un dispositivo completo, los contenedores solo abstraen el kernel del sistema operativo. Todos los beneficios de Docker provienen solo de ese mecanismo simple.

¿Por qué tuvo éxito cuando sus predecesores, como FreeBSD Jails, Oracle Solaris Zones y OpenVZ permitieron que los contenedores funcionaran bien y de forma segura, pero tuvieron poco éxito en el mercado? Hasta cierto punto, los contenedores fueron exitosos pero invisibles. Por ejemplo, Google usó su propio programa contenedor de código abierto, lmctfy (Let Me Contain That For You) durante más de una década. Cada vez que usó la funcionalidad de Google, por ejemplo, Búsqueda, Gmail, Google Docs, se estaba ejecutando en un contenedor invisible.

Lo que Docker trae a la mesa es que hace que los contenedores sean más seguros y eficientes para implementar y usar que los enfoques anteriores. Además, debido a que la asociación de Docker con otras potencias de contenedores, incluidos Canonical, Google, Red Hat y Parallels, en su componente clave de código abierto libcontainer, brinda una estandarización muy necesaria a los contenedores.

Docker dona el formato de contenedor libcontainers y su tiempo de ejecución, así como las especificaciones asociadas, al Open Container Project de The Linux Foundation. Específicamente, esto incluye todo el contenido del proyecto libcontainer, incluido nsinit, y todas las modificaciones necesarias para que se ejecute independientemente de Docker.

Docker continúa trabajando en otros esfuerzos de estandarización de contenedores. Por ejemplo, Docker donó containerd, su tiempo de ejecución de contenedor de código abierto, a Cloud Native Computing Foundation (CNCF). La estandarización juega un papel muy importante en el éxito de Docker.

A diferencia de otras tecnologías de contenedores, Docker también admite redes definidas por software (SDN). Esto permite que los equipos de DevOps definan redes para contenedores, sin preocuparse por los conmutadores de hardware. En su lugar, configuran topologías de red complejas y definen redes a través de archivos de configuración.

Simultáneamente, SDN y Docker hacen posible la explotación de microservicios. Juntos, hacen que sea más eficiente crear aplicaciones a partir de servicios poco acoplados que funcionan entre sí a través de protocolos conocidos como HTTP y TCP.

Finalmente, el éxito de Docker se debe en gran medida a que simplemente es la tecnología abierta adecuada en el momento adecuado para ayudar a los usuarios a aprovechar la revolución de la computación en la nube.

¿Qué es el Monitoreo de Contenedores?

Un escenario común para las empresas es que usan Docker y tienen cientos o cientos de miles de contenedores que ejecutan aplicaciones que son vitales para su empresa. Para orquestarlos, es probable que estén usando Kubernetes. Como dice el CTO de CNCF, Chris Aniszczyk, existe un vacío cada vez mayor en la comprensión de que Kubernetes y los contenedores son esencialmente un paquete. Hay otros programas de orquestación de contenedores, pero Kubernetes es el líder abrumador del mercado. De ellos, Datadog informa que casi el 90 % de los usuarios de Kubernetes aprovechan los servicios gestionados en la nube, frente a casi el 70 % en 2020.

Eso es genial en lo que respecta. Pero Kubernetes controla, implementa y escala contenedores. No los monitorea.

El seguimiento es complicado. Los contenedores son efímeros. Giran hacia arriba y hacia abajo en cuestión de minutos. El contenedor promedio de Kubernetes dura un solo día. Las herramientas que utiliza para monitorear las aplicaciones tradicionales que se ejecutan en servidores virtuales o servidores bare metal no están a la altura. Para cuando su programa de monitoreo solicite un informe, es posible que el contenedor haya desaparecido de la vista, llevándose consigo todos los registros que contiene.

Los beneficios de la supervisión de contenedores

Aunque es complejo, el monitoreo de contenedores es vital. Como dice el administrador de sistemas Gary Williams:"No se puede tener demasiada supervisión". Gary tiene razón.

Los beneficios del monitoreo de contenedores incluyen:

  • Identificar problemas de forma proactiva para evitar interrupciones del sistema.
  • Supervisión de datos de series temporales para ayudar a que las aplicaciones funcionen mejor.
  • Optimizar la asignación de recursos.
  • Detectar los problemas lo antes posible para resolverlos rápidamente.

El monitoreo de contenedores también es vital, ya que las aplicaciones basadas en contenedores están bajo constante ataque de ataques de ransomware y criptomonedas. En resumen, tanto por seguridad como por rendimiento, el monitoreo de sus contenedores es imprescindible. Estas son las mismas razones por las que supervisa todos sus sistemas, y los contenedores no son diferentes.

Los programas de monitoreo enfrentan otros desafíos para recopilar datos de observabilidad de los contenedores. Hay varios métodos de recopilación de datos. Incluyen:

  • Implementación de un agente de supervisión dedicado como contenedor o aplicación host.
  • Implementación de un enrutador de registros para recopilar automáticamente los registros generados por los contenedores.
  • Uso del controlador de registro de Docker para almacenar registros de contenedores en el host.
  • Recopilación de métricas a través de las estadísticas de Docker, la canalización de métricas de Kubernetes o una API similar.

El monitoreo de contenedores cubre métricas básicas como la utilización de la memoria, el uso de la CPU, el límite de la CPU y el límite de la memoria. Sus programas de monitoreo también deben ofrecer registros de transmisión en tiempo real, rastreo y observabilidad.

En un nivel superior, además de recopilar y centralizar los datos de monitoreo de los contenedores y sus hosts, debe recopilar y analizar los datos de toda la aplicación, en lugar de los contenedores individuales.

Como lo expresó Minh Dao de LogDNA, “imagine que tiene una aplicación web de tres niveles, con cada nivel ejecutándose como un contenedor separado. Ahora imagine que su nivel de back-end de repente comienza a generar errores y, como resultado, los contenedores se bloquean. Extraer registros y métricas de contenedores individuales ayudará con el análisis de la causa raíz, pero eso no lo ayudará a ver el error en el contexto de toda la aplicación. El problema puede ser específico del contenedor o puede ser indicativo de un problema más amplio de toda la aplicación”.

Póngalo todo junto y no hay duda al respecto. Debe monitorear sus contenedores.

Las cinco mejores herramientas de monitoreo de contenedores

Muchos de los mejores programas de monitoreo de contenedores son programas de código abierto. Linode proporciona los conceptos básicos para comenzar con la pila de Elasticsearch, Logstash y Kibana (ELK) usando Filebeat y Metricbeat con Kibana y análisis de series de tiempo con Graphite y Grafana Dashboard. Con algo de esfuerzo, puede construir su propio sistema de monitoreo de contenedores.

Los programas en la lista a continuación están en orden alfabético, no en orden de mejor a peor. Eso es porque no puedes clasificarlos de manera justa. Todos tienen sus propias fortalezas y debilidades y, a menudo, miden diferentes métricas. Por lo tanto, si realmente quiere vigilar de cerca sus contenedores, lo más probable es que necesite usar varios de estos programas.

Contenedor Advisor (cAdvisor)

Container Advisor de Google (cAdvisor) es un programa de monitoreo de código abierto. Se ejecuta como un demonio que recopila, agrega y exporta datos de rendimiento y uso de recursos de contenedores específicos. Realiza un seguimiento de los parámetros de aislamiento de recursos de cada contenedor, el uso histórico de recursos, los histogramas del uso histórico completo de recursos y las estadísticas de red. Estos datos se exportan por contenedor y en toda la máquina.

El programa viene con soporte nativo para contenedores Docker y está diseñado para soportar prácticamente todos los demás tipos de contenedores listos para usar. También expone las métricas de Prometheus. En otras palabras, cAdvisor recopila los datos, mientras que Prometheus los extrae. La abstracción de contenedores de CAdvisor se basa en la de lmctfy, por lo que los contenedores están inherentemente anidados jerárquicamente.

Puede instalar compilaciones de cAdvisor como imágenes en sus hosts de Docker. El programa también proporciona una interfaz de usuario web (UI) y una interfaz de programación de aplicaciones (API) REST. Con esto, puede monitorear sus contenedores Docker directamente e integrar métricas a una aplicación externa a través de puntos finales de servicios web.

Perro de datos

Docker recomienda Datadog por una buena razón. Proporciona numerosas herramientas de monitoreo que rastrean las métricas relacionadas con el contenedor, la infraestructura y las aplicaciones.

Su interfaz de usuario y tablero también son muy útiles. Con sus datos en tiempo real, puede configurar varias visualizaciones, incluidas series de tiempo, valor de consulta, lista principal, tabla, mapa de calor, mapa de árbol, gráfico circular, mapa de host, flujo de registro, lista, valor de alerta, mapa de servicio y más. . Correlaciona automáticamente los datos y visualiza el comportamiento inusual.

El corazón de Datadog es propietario, pero el agente de Datadog y todos los demás programas que se ejecutan en sus máquinas y nubes son de código abierto.

El monitoreo está disponible a través de solicitudes de seguimiento, que alimentan sus visualizaciones gráficas y alertas. El programa recopila datos sobre servicios, aplicaciones y plataformas a través de datos de registro detallados.

El programa es un ecosistema de monitoreo. Además de sus contenedores, monitorea prácticamente cualquier cosa. Lo hace parcialmente al admitir la mayoría de los programas y protocolos de telemetría, como StatsD, OpenMetrics y OpenTelemetry.

Si bien se vende principalmente como un software como servicio (SaaS), también se puede implementar en las instalaciones.

Elasticsearch y Kibana

Elasticsearch es un motor de búsqueda de código abierto basado en Java derivado de la biblioteca Apache Lucene. Proporciona un motor de búsqueda de texto completo distribuido, con capacidad para múltiples inquilinos, con una interfaz web HTTP y documentos JSON sin esquema. Es el corazón de la pila ELK.

Su programa de socios, Kibana, es una interfaz de usuario abierta y gratuita para visualizar sus datos de Elasticsearch y navegar por ELK Stack. Puede realizar un seguimiento de las cargas de consultas para ver cómo fluyen las solicitudes a través de sus aplicaciones. Kibana viene con los clásicos habituales del tablero de la interfaz de usuario:histogramas, gráficos de líneas, gráficos circulares, rayos de sol y más. Y, por supuesto, puede buscar en todos sus documentos.

Para propósitos de monitoreo de contenedores, use Filebeat y Metricbeat para capturar automáticamente los datos del contenedor. Filebeat encuentra contenedores automáticamente y almacena sus registros en Elasticsearch. Despliegas Metricbeat automáticamente en tus contenedores. Una vez allí, recopila estadísticas de uso de CPU, memoria, sistema de archivos, E/S de disco y E/S de red a nivel del sistema. Sus módulos, escritos en Go, también pueden vigilar programas dentro de los contenedores como Apache, NGINX, MongoDB, MySQL, PostgreSQL y Prometheus. Se puede acceder a todos estos datos usando Kibana.

Es muy flexible. Debe dedicar un tiempo considerable a aprender a configurarlo y usarlo, pero vale la pena.

Prometeo y Grafana

Al igual que Elasticsearch y Kibana, Prometheus y Grafana son programas de código abierto que puede usar para crear sus propios sistemas de monitoreo. Es complejo, pero el trabajo vale la pena.

Prometheus almacena datos como series de tiempo. En series temporales, los datos se mantienen como flujos de valores con marca de tiempo para la misma métrica y el mismo conjunto de dimensiones etiquetadas.

Prometheus, un proyecto de CNCF, extrae métricas directamente de los contenedores o mediante una puerta de enlace push. Las muestras extraídas se almacenan localmente y se aplican reglas a sus datos para agregar y generar nuevas series temporales o generar alertas definidas por el usuario.

El enfoque principal de Prometheus es la confiabilidad en lugar de la precisión. El programa hace esto al hacer que cada servidor Prometheus sea independiente con un almacenamiento de base de datos de series temporales locales para evitar la dependencia de cualquier servicio remoto. Este diseño convierte a Prometheus en una herramienta ideal para identificar rápidamente problemas y obtener comentarios en tiempo real. Por lo tanto, generalmente se usa en sistemas altamente dinámicos, como microservicios basados ​​en contenedores que se ejecutan en una nube.

Prometheus tiene su propio tablero web, o puede extraer datos de él usando su API. Grafana se utiliza como interfaz predeterminada.

Sysdig

Sysdig es una plataforma comercial de monitoreo en la nube que funciona mano a mano con Prometheus. Esto le permite obtener acceso a datos de series temporales sin necesidad de crear su propio sistema de monitoreo Prometheus.

Sysdig rastrea los datos de Docker directamente desde los metadatos del contenedor para habilitar la seguridad y el monitoreo. Docker recomienda Sysdig como una solución de monitoreo para aplicaciones en contenedores.

Sysdig también integra programas de monitoreo de Linux en una interfaz única y consistente. El programa hace esto a nivel del sistema operativo al integrarse con el kernel de Linux. Captura llamadas al sistema y otros eventos del sistema operativo.

Su combinación única de Prometheus y el conocimiento del sistema operativo de bajo nivel lo convierte en una poderosa herramienta de monitoreo.

Conclusión

El monitoreo de contenedores es imprescindible, no una sutileza. Sin monitoreo, operar contenedores es como conducir en una carretera sinuosa y oscura sin faros.

El programa de monitoreo que elija depende de su caso de uso, presupuesto y los recursos de TI disponibles en su organización. Puede crear sus propios sistemas de monitoreo de contenedores utilizando los muchos programas de código abierto disponibles o elegir un paquete comercial. Independientemente del programa de supervisión que decida utilizar, es un componente esencial para el estado y la estabilidad de sus aplicaciones web en contenedores.


Docker
  1. Cómo exportar e importar contenedores Docker

  2. diferencia entre podman y docker.

  3. Cómo funcionan los contenedores en la nube y sus beneficios

  4. Cómo instalar, ejecutar y eliminar aplicaciones dentro de contenedores Docker:parte 2

  5. Las 25 mejores herramientas de depuración y supervisión del rendimiento de Linux

Cómo usar Docker Cp para copiar archivos entre el host y los contenedores

Cómo implementar y administrar un contenedor Docker MongoDB

Cómo ejecutar contenedores Docker

Cómo nombrar o renombrar contenedores Docker

ctop:interfaz superior para monitorear contenedores Docker

Desarrollo en Docker con las nuevas y mejoradas Visual Studio Container Tools (y WSL2)