banner
Centro de Noticias
Entrega inmediata

¿Se puede usar Kubernetes sin Docker?

Jun 25, 2023

Getty Images/iStockphoto

La aparición de los contenedores generó interesantes posibilidades para el desarrollo de software y las operaciones de carga de trabajo en toda la empresa moderna. Pero el espectacular crecimiento de la popularidad de los contenedores plantea problemas para la gestión de contenedores que los motores como Docker no pueden manejar.

Las plataformas como Kubernetes abordan estos complejos desafíos de gestión de contenedores a través de la automatización y la orquestación. Kubernetes es una plataforma gratuita y eficaz que se adapta a numerosos tiempos de ejecución de contenedores, incluido Docker Engine.

Debido a que tanto Docker como Kubernetes aparecieron temprano en la era de los contenedores, los dos han estado estrechamente entrelazados durante años, hasta el punto en que a veces se los menciona indistintamente. Pero aunque Docker y Kubernetes son complementarios, son diferentes tipos de herramientas que tienen distintos propósitos en los entornos de TI.

Un contenedor es un tipo especializado de máquina virtual. Al igual que cualquier VM, un contenedor empaqueta y administra software, abstrayéndolo del entorno informático subyacente de servidores, almacenamiento y redes. Esta abstracción facilita que los contenedores y las máquinas virtuales se muevan entre entornos informáticos.

A diferencia de las máquinas virtuales, que incluyen un sistema operativo, los contenedores incluyen solo el código y las dependencias necesarias para ejecutar la carga de trabajo del contenedor, como los tiempos de ejecución, las herramientas del sistema, las bibliotecas del sistema y la configuración correspondiente. El resultado es un paquete ágil y eficiente en recursos que puede ejecutarse con pocos requisitos, si es que tiene alguno, independientemente del entorno informático.

Los dos componentes que no están empaquetados dentro de un contenedor son el sistema operativo y el motor del contenedor. El sistema operativo admite el código que se ejecuta dentro del contenedor, y el motor del contenedor maneja la mecánica de carga y ejecución del propio contenedor.

Un contenedor se crea y almacena como una imagen de contenedor. La invocación de un contenedor carga el archivo de imagen en el motor del contenedor, cambiando efectivamente la imagen a un contenedor en ejecución. Este empaquetado y abstracción garantiza que un contenedor funcione de la misma manera en casi cualquier infraestructura.

Un motor de contenedores es una plataforma o capa de software necesaria para cargar, ejecutar y administrar contenedores. Los motores de contenedores a menudo se denominan hipervisor o sistema operativo para contenedores porque ocupan la misma capa que el hipervisor en una máquina virtual.

Docker es uno de varios motores de contenedores populares. Una vez que Docker u otro motor de contenedores está disponible en una computadora, el sistema puede cargar y ejecutar contenedores sobre la capa del motor de contenedores.

Docker ofrece las siguientes funcionalidades clave:

El corazón de cualquier motor de contenedor, incluido Docker, es el tiempo de ejecución del contenedor. Un tiempo de ejecución de contenedor hace el trabajo pesado de cargar y ejecutar contenedores, además de implementar espacios de nombres y cgroups o construcciones de SO lógico para contenedores.

Hay numerosos tiempos de ejecución de contenedores disponibles, incluidos containerd, CRI-O, runC y Mirantis Container Runtime. Algunos tiempos de ejecución incorporan funciones de nivel superior, como el desempaquetado de contenedores, la administración y el uso compartido de imágenes. Algunos también proporcionan una API para permitir que los desarrolladores creen software que interactúa directamente con el tiempo de ejecución.

Los contenedores se han vuelto enormemente populares debido a su facilidad de uso y su huella informática relativamente pequeña. Los servidores empresariales pueden albergar docenas o incluso miles de contenedores que componen aplicaciones y servicios para la empresa.

Pero el gran número de contenedores y su breve ciclo de vida plantean un serio desafío para los administradores de TI que deben implementar y administrar manualmente flotas de contenedores grandes y dinámicas. Orquestar la implementación de contenedores y realizar la gestión en tiempo real requiere herramientas altamente automatizadas.

Esta es la función de la plataforma Kubernetes, a veces abreviada como K8. Originalmente desarrollado por Google, Kubernetes es una herramienta de orquestación y automatización de código abierto que maneja la implementación, el escalado y la administración de aplicaciones en contenedores. Con Kubernetes, los administradores de TI pueden organizar, programar y automatizar la mayoría de las tareas necesarias para las arquitecturas basadas en contenedores.

Kubernetes ciertamente no es la única plataforma de orquestación y automatización de contenedores disponible. Por ejemplo, Docker tiene su propia herramienta llamada Docker Swarm. Los proveedores de la nube también ofrecen servicios administrados de Kubernetes, como Azure Kubernetes Service y Amazon Elastic Kubernetes Service. Otras alternativas de terceros incluyen SUSE Rancher y HashiCorp Nomad.

Las amplias funciones de Kubernetes, la falta de una etiqueta de precio, el amplio soporte de tiempo de ejecución de contenedores y la extensibilidad consolidaron su lugar como una plataforma líder de automatización y orquestación. Las principales características de Kubernetes incluyen lo siguiente:

De todas las funciones de Kubernetes, la compatibilidad con contenedores y la extensibilidad son las más potentes. Estas características permiten que Kubernetes interopere con una variedad de tiempos de ejecución de contenedores, incluidos containerd, CRI-O y cualquier otra implementación de la interfaz de tiempo de ejecución de contenedores (CRI) de Kubernetes.

Además, Kubernetes proporciona una API que ha generado todo un ecosistema de herramientas de código abierto para Kubernetes. Estos incluyen la red de servicios Istio y la plataforma informática sin servidor Knative.

Aunque Docker y Kubernetes están relacionados, los dos son herramientas de infraestructura distintas que se implementan y administran por separado dentro de los entornos de TI. Específicamente, Docker es un motor de contenedores: la capa o plataforma de software en la que se cargan y ejecutan los contenedores virtualizados. Por el contrario, Kubernetes es una plataforma de automatización y orquestación: la herramienta de software que organiza y gestiona las relaciones entre contenedores.

Al principio del desarrollo de Kubernetes, Docker era, con mucho, el motor de contenedores dominante, y el soporte para su tiempo de ejecución de contenedores estaba codificado en Kubernetes en forma de un componente de Kubernetes llamado dockershim. Una corrección se refiere a cualquier modificación de software que intercepta y altera el flujo de datos para proporcionar características o funciones adicionales.

El componente dockershim permitió a Kubernetes interactuar con Docker como si Docker estuviera usando un tiempo de ejecución compatible con CRI. A medida que Kubernetes evolucionó, adoptó tiempos de ejecución de contenedores adicionales, y el CRI se inventó para que cualquier tiempo de ejecución de contenedores pudiera interoperar con Kubernetes de manera estandarizada. Eventualmente, las dependencias planteadas por dockershim se convirtieron en un problema heredado que impidió un mayor desarrollo de Kubernetes.

Con el lanzamiento de Kubernetes 1.24 a principios de 2022, la Cloud Native Computing Foundation, ahora los custodios y desarrolladores de Kubernetes, decidió desaprobar el componente dockershim. Al eliminar dockershim, los desarrolladores de Kubernetes intentaron optimizar y simplificar el código del proyecto eliminando el soporte heredado a favor de un tiempo de ejecución estandarizado.

Aunque el proyecto Kubernetes ha dejado de usar dockershim, los contenedores de Docker aún funcionan con Kubernetes, y las imágenes producidas con el comando docker build aún funcionan con todas las implementaciones de CRI. Sin embargo, la eliminación de dockershim plantea algunos problemas potenciales para los usuarios de Docker.

Es posible que las herramientas y las IU de Docker que dependían de dockershim ya no funcionen. Del mismo modo, los contenedores que se programan con el tiempo de ejecución del contenedor ya no serán visibles para Docker, y la recopilación de información mediante los comandos docker ps o docker inspect no funcionará.

Debido a que los contenedores ya no aparecen en la lista, los administradores no pueden obtener registros, detener contenedores o ejecutar algo dentro de un contenedor mediante docker exec. Y aunque los administradores aún pueden extraer o crear imágenes mediante la compilación de docker, esas imágenes no serán visibles para el tiempo de ejecución del contenedor y Kubernetes.

Ante estos problemas, los usuarios de Docker tienen dos opciones principales.

La primera es seguir usando Docker como siempre. Los contenedores existentes funcionarán: tanto Mirantis como Docker se comprometieron a mantener dockershim después de que Kubernetes lo dejara obsoleto, por lo que los usuarios tendrán acceso a un componente de dockershim adecuado en el futuro previsible.

La segunda es migrar a un motor de contenedor diferente que use un tiempo de ejecución de contenedor compatible con CRI, como containerd o CRI-O. Una amplia variedad de proyectos y herramientas de contenedores utilizan tiempos de ejecución, y los motores de contenedores y las versiones de Kubernetes que admiten los proveedores de la nube cumplen con CRI. Una empresa que ejecuta una infraestructura de contenedores y una versión de Kubernetes compatible con el proveedor en la nube no debería verse directamente afectada por la desaprobación de dockershim.

Hoy en día, otros motores de contenedores y herramientas de automatización y orquestación están ganando participación en los entornos en contenedores. Las ofertas van desde tiempos de ejecución simples y de bajo nivel hasta plataformas nativas de la nube con todas las funciones:

De manera similar, los líderes de TI pueden seleccionar de una lista creciente de plataformas de automatización y orquestación para organizar y administrar grandes flotas de contenedores. Las alternativas de Kubernetes, a menudo basadas en el código fuente abierto de Kubernetes, incluyen opciones basadas en la nube y de terceros:

La elección de un motor de contenedor o una plataforma de automatización y orquestación depende de factores como el costo, la complejidad, el rendimiento, la estabilidad, el conjunto de características, la seguridad y la interoperabilidad. Al igual que con cualquier elección de infraestructura crítica, pruebe y evalúe combinaciones de herramientas para garantizar que cumplan con los requisitos técnicos y comerciales.

¿Necesita un reemplazo? Prueba estas 5 alternativas de Docker