Kubernetes
Kubernetes es una plataforma de orquestación de contenedores de código abierto que automatiza la implementación, la gestión y el escalamiento de aplicaciones en múltiples contenedores.
fondo negro y azul
¿Qué es Kubernetes?

Kubernetes, también conocido como "k8s" o "kube", es una plataforma de orquestación de contenedores para planificar y automatizar la implementación, gestión y escalamiento de aplicaciones en múltiples contenedores.

Kubernetes fue desarrollado por primera vez por ingenieros en Google antes de pasarse a código abierto en 2014. Es un descendiente de "Borg", una plataforma de orquestación de contenedores utilizada internamente en Google. Kubernetes proviene de la palabra griega para timonel o piloto, de ahí el timón en el logotipo de Kubernetes (enlace externo a ibm.com).

Hoy, Kubernetes y el ecosistema de contenedores más amplio están evolucionando hacia una plataforma de computación de uso general y un ecosistema que compite, si es que no supera, con las máquinas virtuales (VM) como los componentes básicos de la infraestructura y las aplicaciones en la nube modernas. Este ecosistema permite a las organizaciones ofrecer una plataforma como servicio (PaaS) de alta productividad que aborde múltiples tareas y problemas relacionados con la infraestructura y las operaciones relacionados con el desarrollo nativo de la nube para que los equipos de desarrollo puedan centrarse únicamente en la codificación y la innovación.

El siguiente video proporciona una excelente introducción a los conceptos básicos de Kubernetes:

¿Qué son los contenedores?

Los contenedores son componentes de aplicaciones ejecutables y ligeros que combinan el código fuente de la aplicación con todas las bibliotecas y dependencias del sistema operativo (SO) necesarias para ejecutar el código en cualquier entorno.

Los contenedores aprovechan una forma de virtualización de sistema operativo (SO) que permite que varias aplicaciones compartan una única instancia de un sistema operativo al aislar procesos y controlar la cantidad de CPU, memoria y disco a los que pueden acceder dichos procesos. Debido a que son más pequeños, más eficientes en términos de recursos y más portátiles que las máquinas virtuales (VM), los contenedores se han convertido en las unidades informáticas de facto de las aplicaciones modernas nativas de la nube.

En un estudio reciente de IBM (PDF, 1.4 MB), los usuarios informaron varios beneficios técnicos y comerciales específicos que resultan de la adopción de contenedores y tecnologías relacionadas.

Contenedores vs. máquinas virtuales vs. infraestructura tradicional

Puede ser más fácil o útil considerar a los contenedores como el último punto en la escala continua de automatización y abstracción de la infraestructura de TI.

En la infraestructura tradicional, las aplicaciones se ejecutan en un servidor físico y consumen todos los recursos que pueden obtener. Esto le da la opción de ejecutar varias aplicaciones en un solo servidor y esperar que uno no consuma recursos a expensas de los demás o la opción de dedicar un servidor por aplicación, lo que desperdicia recursos y no permite escalar.

Las máquinas virtuales (VM) son servidores separados del hardware del sistema real, lo que le permite ejecutar varias máquinas virtuales en un solo servidor físico o una única máquina virtual en más de un servidor físico. Cada VM ejecuta su propia instancia del sistema operativo, y usted puede aislar cada aplicación en su propia VM, reduciendo la posibilidad de que las aplicaciones que se ejecuten en el mismo hardware físico subyacente afecten unas a otras. Las máquinas virtuales hacen un mejor uso de los recursos y son mucho más fáciles y rentables de escalar que la infraestructura tradicional. Además, son desechables. Cuando ya no necesite ejecutar la aplicación, puede retirar la máquina virtual.

Para obtener más información acerca de las máquinas virtuales, vea "¿Qué son las máquinas virtuales?".

Los contenedores llevan esta abstracción a un nivel superior: específicamente, además de compartir el hardware virtualizado subyacente, también comparten un kernel de SO virtualizado subyacente. Los contenedores ofrecen el mismo aislamiento, escalabilidad y capacidad de disposición que las máquinas virtuales, pero debido a que no llevan la carga útil de su propia instancia del sistema operativo, son más ligeros (es decir, ocupan menos espacio) que las máquinas virtuales. Son más eficientes en términos de recursos, ya que permiten ejecutar más aplicaciones en menos máquinas (virtuales y físicas) con menos instancias de SO. Los contenedores son más fáciles de transportar en entornos de desktop, centro de datos y nube. Y son una excelente opción para las prácticas de desarrollo de Agile y DevOps.

"¿Qué son los contenedores?" explica detalladamente los contenedores y contenerización. Y la publicación del blog "Contenedores vs. máquinas virtuales: ¿cuál es la diferencia?" ofrece un resumen completo de las diferencias.

¿Qué es Docker?

Docker es la herramienta más popular para crear y ejecutar contenedores Linux®. Mientras que las primeras formas de contenedores se introdujeron hace décadas (con tecnologías como FreeBSD Jails y AIX Workload Partitions), los contenedores se democratizaron en 2013 cuando Docker los puso a disposición del público con una nueva implementación apta para desarrolladores y la nube.

Docker comenzó como un proyecto de código abierto, pero hoy también se refiere a Docker Inc., la empresa que produce Docker, un kit de herramientas de contenedores comerciales que se basa en el proyecto de código abierto (y aporta esas mejoras a la comunidad de código abierto).

Docker se basa en la tecnología tradicional de contenedor Linux (LXC), pero permite una virtualización más granular de los procesos de kernel de Linux y añade recursos para facilitar a los desarrolladores la creación, la implementación, la gestión y la seguridad.

Si bien actualmente existen otras plataformas de contenedores alternativas (como Open Container Initiative [OCI], CoreOS y Canonical [Ubuntu] LXD), el uso de Docker es tan predominante que es prácticamente sinónimo de contenedores y a veces se considera erróneamente como competidor de tecnologías gratuitas como Kubernetes (vea el video "Kubernetes vs. Docker: no es una pregunta de uno u otro" más abajo).

Orquestación de contenedores con Kubernetes

A medida que proliferaban los contenedores (hoy en día, una organización puede tener cientos o miles de ellos), los equipos de operaciones necesitaban planificar y automatizar la implementación, las redes, la escalabilidad y la disponibilidad de los contenedores. Y así nació el mercado de orquestación de contenedores.

Mientras que otras opciones de orquestación de contenedores, sobre todo Docker Swarm y Apache Mesos, ya habían comenzado a afianzarse, Kubernetes rápidamente se convirtió en el más ampliamente adoptado (de hecho, en un momento fue el proyecto de más rápido crecimiento en la historia del software de código abierto).

Los desarrolladores eligieron y continúan eligiendo Kubernetes por su amplitud de funcionalidad, su vasto y creciente ecosistema de herramientas de apoyo de código abierto, y su soporte y portabilidad en varios servicios de almacenamiento en la nube. Todos los principales proveedores de nube pública, incluidos Amazon Web Services (AWS), Google Cloud, IBM Cloud y Microsoft Azure, ofrecen servicios de Kubernetes completamente gestionados.

¿Qué hace Kubernetes?

Kubernetes planifica y automatiza tareas relacionadas con contenedores en todo el ciclo de vida de la aplicación, lo que incluye:

  • Implementación: implementación de un número especificado de contenedores en un host especificado y su ejecución continua en un estado deseado.

  • Despliegues: un despliegue es el cambio a una implementación. Kubernetes le permite iniciar, poner en pausa, reanudar o revertir los despliegues.

  • Descubrimiento de servicios: Kubernetes puede exponer automáticamente un contenedor a Internet o a otros contenedores mediante un nombre DNS o una dirección IP.

  • Suministro de almacenamiento: configuración de Kubernetes para montar almacenamiento local o en la nube constante para sus contenedores según sea necesario.

  • Equilibrio de carga: según la utilización de CPU o las métricas personalizadas, el equilibrio de carga de Kubernetes puede distribuir la carga de trabajo en la red para mantener el rendimiento y la estabilidad. 

  • Escalamiento automático: cuando el tráfico aumenta, el escalamiento automático de Kubernetes puede activar nuevos clústeres según sea necesario para gestionar la carga de trabajo adicional.

  • Autorreparación para alta disponibilidad: cuando un contenedor falla, Kubernetes puede reiniciarlo o reemplazarlo automáticamente para evitar tiempo de inactividad. También puede eliminar contenedores que no cumplan con los requisitos al revisar su condición.

Kubernetes vs. Docker

Si ha leído hasta aquí, ya comprende que, si bien Kubernetes es una alternativa a Docker Swarm, no es (contrariamente a la idea errónea popular persistente) una alternativa o un competidor del propio Docker.

De hecho, si ha adoptado Docker con entusiasmo y está creando implementaciones de contenedores basados en Docker a gran escala, la orquestación de Kubernetes es un paso lógico para gestionar estas cargas de trabajo.

Para obtener más información, vea "Kubernetes vs. Docker: no es una pregunta de uno u otro":

Arquitectura de Kubernetes

Los componentes principales de la arquitectura de Kubernetes incluyen:

Clústeres y nodos (computación)

Los clústeres son los componentes básicos de la arquitectura de Kubernetes. Los clústeres se componen de nodos, cada uno de los cuales representa un único host informático (máquina virtual o física).

Cada clúster consta de un nodo maestro que sirve como plan de control para el clúster y varios nodos de trabajador que implementan, ejecutan y gestionan aplicaciones en múltiples contenedores. El nodo maestro ejecuta un servicio de planificador que automatiza cuándo y dónde se implementan los contenedores basándose en los requisitos de implementación del conjunto de desarrolladores y en la capacidad de computación disponible. Cada nodo de trabajador incluye la herramienta que se está utilizando para gestionar los contenedores, como Docker, y un agente de software llamado Kubelet que recibe y ejecuta órdenes del nodo maestro.

Los desarrolladores gestionan las operaciones del clúster mediante kubectl, una interfaz de línea de comandos (cli) que se comunica directamente con la API de Kubernetes. 

Para obtener información más detallada acerca de los clústeres de Kubernetes, lea: "Clústeres de Kubernetes: arquitectura para una entrega rápida y controlada de aplicaciones en la nube".

Pods e implementaciones (software)

Los pods son grupos de contenedores que comparten los mismos recursos informáticos y la misma red. También son la unidad de escalabilidad en Kubernetes: si un contenedor en un pod recibe más tráfico del que puede manejar, Kubernetes replicará el pod en otros nodos del clúster. Por esta razón, es una buena práctica mantener los pods compactos para que contengan solo contenedores que deben compartir recursos.

La implementación controla la creación y el estado de la aplicación en múltiples contenedores y la mantiene en ejecución. Especifica cuántas réplicas de un pod deben ejecutarse en el clúster. Si falla un pod, la implementación creará uno nuevo.

Para obtener más información acerca de las implementaciones de Kubernetes, vea "Implementaciones de Kubernetes: comience a usar rápidamente":

Malla de servicio Istio

Kubernetes puede implementar y escalar pods, pero no puede gestionar ni automatizar el enrutamiento entre ellos y no proporciona ninguna herramienta para supervisar, proteger o depurar estas conexiones. A medida que crece el número de contenedores en un clúster, el número de posibles vías de acceso de conexión entre ellos aumenta exponencialmente (por ejemplo, 2 contenedores tienen 2 conexiones potenciales, pero 10 pods tienen 90), lo cual podría dificultar la configuración y la gestión.

Aquí aparece Istio, una capa de malla de servicio de código abierto para clústeres de Kubernetes. Istio añade un contenedor sidecar en cada clúster de Kubernetes, básicamente invisible para el programador y el administrador, que configura, supervisa y gestiona las interacciones entre los otros contenedores.

Con Istio, usted establece una única política que configura las conexiones entre contenedores para que no tenga que configurar cada conexión individualmente. Esto hace que las conexiones entre contenedores sean más fáciles de depurar.

Istio también proporciona un panel de control que los equipos y administradores de DevOps pueden utilizar para supervisar la latencia, los errores de tiempo en servicio y otras características de las conexiones entre contenedores. Además, integra funciones de seguridad (específicamente, la gestión de identidades que impide que usuarios no autorizados suplanten una llamada de servicio entre contenedores) y de autenticación, autorización y auditoría (AAA) que los profesionales de seguridad pueden utilizar para supervisar el clúster.

Lea más acerca de Istio
Computación Knative y sin servidor

Knative es una plataforma de código abierto que reside sobre Kubernetes y proporciona dos tipos de ventajas importantes para el desarrollo nativo de la nube:

Knative proporciona una plataforma para el cambio hacia la computación sin servidor

La computación sin servidor es una forma relativamente nueva de implementar código que hace que las aplicaciones nativas de la nube sean más eficientes y rentables. En lugar de implementar una instancia de código en curso que se encuentra inactivo mientras espera solicitudes, la computación sin servidor ocupa el código "cuando se necesita", escalándolo a medida que la demanda fluctúa, y luego remueve el código cuando no está en uso. La computación sin servidor evita la pérdida de capacidad de computación y potencia y reduce los costos, porque usted solo paga para ejecutar el código cuando se ejecuta realmente.

Knative permite a los desarrolladores crear un contenedor una vez y ejecutarlo como un servicio de software o como una función sin servidor. Todo es transparente para el desarrollador: Knative maneja los detalles en segundo plano y el desarrollador puede concentrarse en el código.

Knative simplifica el desarrollo y la orquestación del contenedor

Para los desarrolladores, el código contenerizado requiere demasiados pasos repetitivos, y la orquestación de contenedores requiere mucha configuración y scripts (como generar archivos de configuración, instalar dependencias, gestionar el registro y el rastreo, y escribir scripts de integración continua/implementación continua [CI/CD]).

Knative facilita estas tareas automatizándolas por medio de tres componentes:

Build: el componente Build de Knative transforma automáticamente el código fuente en un contenedor o función nativo de la nube. Específicamente, extrae el código del repositorio, instala las dependencias necesarias, crea la imagen del contenedor y la coloca en un registro de contenedor para que lo utilicen otros desarrolladores. Los desarrolladores necesitan especificar la ubicación de estos componentes para que Knative pueda encontrarlos, pero una vez hecho esto, Knative automatiza la creación.

Serve: el componente Serve ejecuta contenedores como servicios escalables, puede aumentar hasta miles de instancias de contenedor o reducir a ninguna (lo que se denomina reducir a cero). Además, Serve tiene dos funciones muy útiles: configuración, que guarda versiones de un contenedor (llamadas instantáneas) cada vez que lleva el contenedor a producción y le permite ejecutar esas versiones simultáneamente, y enrutamiento de servicios, que le permite dirigir diferentes cantidades de tráfico a estas versiones. Puede usar estas características juntas para implementar gradualmente un contenedor o realizar una prueba canaria de una aplicación en múltiples contenedores antes de ponerla en producción global.

Event: Event habilita los eventos especificados para desencadenar funciones o servicios basados en contenedor. Esto es especialmente integral para las capacidades sin servidor de Knative. Algo necesita decirle al sistema que ponga en marcha una función cuando sea necesario. Event permite que los equipos expresen interés en los tipos de eventos y luego se conecta automáticamente al productor de eventos y envía los eventos al contenedor, eliminando la necesidad de programar estas conexiones.

Lea más acerca de Knative
Confirmaciones de Kubernetes GitHub y más pruebas de su creciente popularidad

Kubernetes es uno de los proyectos de código abierto de mayor crecimiento en la historia, y su crecimiento se está acelerando. Los desarrolladores y las empresas que los contratan siguen adoptándolo. Algunos puntos de datos que vale la pena señalar:

  • Al momento de escribir este artículo, se han realizado más de 120,190 confirmaciones en el repositorio de Kubernetes en GitHub (enlace externo a ibm.com), un aumento de casi 34,000 confirmaciones en los últimos 18 meses, y hay más de 3,100 colaboradores activos en el proyecto. Según la Cloud Native Computing Foundation (CNCF), ha habido más de 148,000 confirmaciones en todos los repositorios relacionados con Kubernetes (incluidos Kubernetes Dashboard y Kubernetes MiniKube). Puede leer todas las estadísticas aquí (enlace externo a ibm.com).

  • Más de 2,000 empresas utilizan Kubernetes en sus soluciones de software de producción. Estas incluyen empresas conocidas mundialmente como AirBnB, Ancestry, Bose, CapitalOne, Intuit, Nordstrom, Philips, Reddit, Slack, Spotify, Tinder y, por supuesto, IBM. Lea estos y otros casos de estudio de adopción (enlace externo a ibm.com)

  • Una encuesta de 2021 citada en Container Journal (enlace externo a ibm.com) descubrió que el 68 % de los profesionales de TI aumentó el uso de Kubernetes durante la pandemia de COVID-19.

  • Según ZipRecruiter (enlace externo a IBM), el salario medio anual (en América del Norte) para un trabajo relacionado con Kubernetes es de USD 147,732. Al momento de escribir este artículo, hay más de 57,000 puestos de trabajo relacionados con Kubernetes listados en LinkedIn (enlace externo a ibm.com), en comparación con los 21,000 listados hace solo 18 meses.
Soluciones relacionadas
Red Hat OpenShift on IBM Cloud

Con Red Hat OpenShift on IBM Cloud, los desarrolladores de OpenShift tienen una forma rápida y segura de contener e implementar cargas de trabajo empresariales en clústeres de Kubernetes.

Explore Red Hat OpenShift
IBM Cloud Satellite

Implemente y ejecute aplicaciones de manera consistente en entornos locales, de edge computing y de nube pública de cualquier proveedor de nube usando un conjunto común de servicios en la nube que incluye cadenas de herramientas, bases de datos e IA.

Explore las soluciones de IBM Cloud Satellite
IBM Cloud Code Engine

IBM Cloud Code Engine es una plataforma sin servidor completamente gestionada que le permite ejecutar su contenedor, código de aplicación o trabajo por lotes en un tiempo de ejecución de contenedor completamente gestionado.

Explore Code Engine
Recursos Contenedores en la empresa
Una nueva investigación de IBM documenta el impulso creciente de la adopción de contenedores y Kubernetes.
TI flexible, resistente y segura para su nube híbrida
Los contenedores son parte de una estrategia de nube híbrida que le permite crear y gestionar cargas de trabajo desde cualquier lugar.
¿Qué es sin servidor?
Sin servidor es un modelo de desarrollo y ejecución de aplicaciones en la nube que permite a los desarrolladores crear y ejecutar código sin gestionar servidores ni pagar por una infraestructura de nube inactiva.
Dé el siguiente paso

Red Hat OpenShift on IBM Cloud brinda a los desarrolladores de OpenShift una forma rápida y segura de contener e implementar cargas de trabajo empresariales en clústeres de Kubernetes. Implemente clústeres de Kubernetes completamente gestionados y de alta disponibilidad para sus aplicaciones en múltiples contenedores con un solo clic. Debido a que IBM gestiona OpenShift Container Platform (OCP), tendrá más tiempo para concentrarse en sus tareas principales.

Explore Red Hat OpenShift on IBM Cloud