menu icon

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. Descubra cómo Kubernetes permite un desarrollo rentable y nativo de la nube.

¿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, la gestión y el escalamiento de aplicaciones contenedorizadas.

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 significa timonel o capitán en griego, de ahí el timón que aparece en el logotipo de Kubernetes (enlace externo a IBM).

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

En el siguiente video, Sai Vennam da una explicación de los fundamentos de Kubernetes (10:59):

¿Qué son los contenedores?

Vamos a empezar con una definición: Un contenedor es una unidad ejecutable de software en el que el código de aplicación se empaqueta, junto con bibliotecas y dependencias, de forma común para que pueda ejecutarse en cualquier lugar del desktop, la TI tradicional o la nube.

Los contenedores aprovechan una forma de virtualización del sistema operativo que permite a varias aplicaciones compartir el sistema operativo aislando procesos y controlando la cantidad de CPU, memoria y disco a los que pueden acceder dichos procesos.

Contenedores frente a máquinas virtuales frente a infraestructura tradicional

Puede ser más fácil o útil entender 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 deja 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 dedique un servidor por aplicación, lo que desperdicia recursos y no permite escalar.

Las máquinas virtuales (VM) son servidores abstraídos del hardware del sistema real, lo que le permite ejecutar varias máquinas virtuales en un servidor físico o una única máquina virtual que se extiende 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, consulte "Máquinas virtuales: una guía esencial".

Los contenedores llevan esta abstracción a un nivel superior: específicamente, además de compartir el hardware virtualizado subyacente, también comparten un núcleo 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. Sus recursos son más eficientes: permiten ejecutar más aplicaciones en menos máquinas (virtuales y físicas), con menos instancias de SO. Los contenedores son más fácilmente portables 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.

"Contenedores: una guía esencial" ofrece una explicación completa de los contenedores y la contenedorización. La publicación de blog “Containers vs. VMs: What's the difference? (Contenedores frente a máquinas virtuales: ¿cuál es la diferencia?)” contiene 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 llevó a las masas 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 contribuye a las mejoras en la comunidad de código abierto).

Docker se construyó 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 funciones para facilitar a los desarrolladores la creación, la implementación, la gestión y la seguridad de los desarrolladores.

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 confunde como competidor de tecnologías gratuitas como Kubernetes (vea el video "Kubernetes frente a Docker: No se trata de elegir uno o ambos” a continuación).

Orquestación de contenedores con Kubernetes

La proliferación actual de los contenedores (una organización puede tener cientos o miles de ellos), intensifica la necesidad de los equipos de operaciones de planificar y automatizar la implementación de contenedores, las redes, la escalabilidad y la disponibilidad. Y así, el mercado de orquestación de contenedores nació.

Mientras que otras opciones de orquestación de contenedores, sobre todo Docker Swarm y Apache Mesos, adquirieron fuerza pronto, Kubernetes rápidamente se convirtió en la tecnología más adoptada (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 siguen eligiendo) Kubernetes por su amplitud de funcionalidades, su vasto y creciente ecosistema de herramientas de soporte de código abierto, así como su soporte y portabilidad a través de los principales proveedores en la nube (algunos de los cuales ahora ofrecen servicios de Kubernetes totalmente gestionados).

Para obtener más información acerca de la orquestación de contenedores, consulte el video “Orquestación de contenedores explicada” (08:59):

¿Qué hace Kubernetes?

Kubernetes planifica y automatiza estas y otras tareas relacionadas con contenedores:

  • Implementación: implemente un número especificado de contenedores en un host especificado y manténgalos en ejecución en un estado deseado.
  • Lanzamientos: un lanzamiento es un cambio en una implementación. Kubernetes le permite iniciar, poner en pausa, reanudar o revertir los lanzamientos.
  • Descubrimiento de servicios: Kubernetes puede exponer automáticamente un contenedor a Internet o a otros contenedores utilizando un Nombre DNS o dirección IP.
  • Suministro de almacenamiento: configure Kubernetes para montar un almacenamiento persistente local o en la nube para sus contenedores según sea necesario.
  • Equilibrio de carga y escalamiento: cuando el tráfico hacia un contenedor alcanza el límite de utilización, Kubernetes puede emplear el equilibrio de carga y escalar para distribuirlo a lo largo de la red para mantener la estabilidad.
  • Autoreparación para obtener alta disponibilidad: cuando un contenedor falla, Kubernetes puede reiniciarlo o reemplazarlo automáticamente; también puede retirar contenedores que no cumplan con sus requisitos de comprobación de estado.

Kubernetes frente a Docker

Si leyó hasta aquí, ya entiende que, mientras que Kubernetes es una alternativa a Docker Swarm, no es (contrario a la idea errónea popular persistente) una alternativa o competidor para el propio Docker.

De hecho, si ha adoptado con entusiasmo a Docker 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 conocer más, vea "Kubernetes frente a Docker: No se trata de elegir” (08:03):

Arquitectura de Kubernetes

Los componentes principales de la arquitectura de Kubernetes incluyen los siguientes:

Clústeres y nodos (computación)

Clústeres son los bloques de construcción de la arquitectura de Kubernetes. Los clústeres se componen de nodos, cada uno de los cuales representa un único host de computación (máquina virtual o física).

Cada clúster consta de varios nodos de trabajo que implementan, ejecutan y gestionan aplicaciones contenedorizadas y un nodo maestro que controla y supervisa los nodos de trabajo.

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 trabajo 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.

Para una inmersión más profunda en los clústeres de Kubernetes, eche un vistazo a esta publicación de blog: “Kubernetes Clusters: arquitectura para la entrega rápida y controlada de aplicaciones en la nube".

Pods e implementaciones (software)

Pods son grupos de contenedores que comparten los mismos recursos de computación y la misma red. También son la unidad de escalabilidad en Kubernetes: si un contenedor en un pod está recibiendo más tráfico de lo que puede manejar, Kubernetes replicará el pod a 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 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 sobre las implementaciones de Kubernetes, vea "Kubernetes Deployments: Get Started Fast” (03:54):

Para tener una comprensión más detallada de los elementos de la arquitectura de Kubernetes, pruebe este curso de autoaprendizaje en línea: “Kubernetes 101”.

También puede obtener un análisis detallado en esta publicación de blog "Kubernetes Architecture: Four Approaches to Container Solutions (Arquitectura de Kubernetes: cuatro enfoques de soluciones de contenedor)".

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, dos contenedores tienen dos conexiones potenciales, pero 10 pods tienen 90), lo cual podría representar una configuración y gestión problemáticas.

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

Con Istio, se 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 seguridad (específicamente, la gestión de identidades que impide que usuarios no autorizados suplanten una llamada de servicio entre contenedores) y funcionalidades de autenticación, autorización y auditoría (AAA) que los profesionales de seguridad pueden utilizar para supervisar el clúster.

Vea el artículo “What is Istio?“ para más detalles, incluyendo un video y algunos ejemplos de Istio en uso.

Computación Knative y sin servidor

Knative (pronunciado "kay-native") 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 inactiva mientras espera solicitudes sin servidor, devuelve el código según sea necesario, escalándolo de manera horizontal o vertical a medida que la demanda fluctúa, y luego retira 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 centrarse en el código.

Knative simplifica el desarrollo y la orquestación del contenedor

Para los desarrolladores, el código contenedorizado 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 en 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 construcción.
  • Serve: el componente Serve ejecuta contenedores como servicios escalables; puede escalar hasta miles de instancias de contenedor o reducir la escala a ninguna (acción denominada escalamiento a cero). Además, el servicio tiene dos funciones muy útiles:
    • Configuración, que guarda las versiones de un contenedor (denominado instantáneas) cada vez que usted lleva al contenedor a producción y le permite ejecutar estas versiones simultáneamente.
    • Direccionamiento de servicio, que le permite dirigir diferentes cantidades de tráfico a estas versiones. Puede utilizar estas funciones de forma conjunta para lanzar gradualmente una implementación de contenedor o para realizar una prueba canaria de una aplicación en 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 a los equipos expresar interés en tipos de eventos y, a continuación, se conecta automáticamente al productor de eventos y los ejecuta en el contenedor, eliminando la necesidad de programar estas conexiones.

Puede conocer más sobre Knative leyendo "Knative: An Essential Guide (Knative: una guía esencial)".

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. La adopción sigue aumentando entre los desarrolladores y las empresas que la emplean. Algunos puntos de datos que vale la pena señalar:

  • En este momento, se han realizado más de 86,200 confirmaciones en el repositorio de Kubernetes en GitHub (enlace externo a IBM), incluyendo casi 6,000 confirmaciones en los últimos cuatro meses, y hay más de 2,300 colaboradores activos en el proyecto. Según Cloud Native Computing Foundation (enlace externo a IBM), ha habido más de 148,000 confirmaciones en todos los repositorios relacionados con Kubernetes (incluidos Kubernetes Dashboard y Kubernetes MiniKube).
  • Más de 1.500 empresas utilizan Kubernetes en sus conjuntos de software de producción. Estas incluyen empresas conocidas mundialmente como AirBnB, Bose, CapitalOne, Intuit, Nordstrom, Philips, Reddit, Slack, Spotify, Tinder y, por supuesto, IBM. Lea estos y otros casos de éxito de la adopción (enlace externo a IBM)
  • Una encuesta de julio de 2019 citada en Container Journal (enlace externo a IBM) indicó un aumento del 51 % en la adopción de Kubernetes durante los seis meses anteriores.
  • Más de 12,000 personas asistieron a la conferencia KubeCon + CloudNativeCon North America 2019 (enlace externo a IBM): 3000 más en comparación con el número récord de asistencia del año anterior.
  • 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 144,628. En este momento, hay más de 21,000 vacantes relacionadas con Kubernetes en LinkedIn (enlace externo a IBM).

Guías de aprendizaje de Kubernetes

Si está preparado para empezar a trabajar con Kubernetes o quiere desarrollar sus habilidades con Kubernetes y las herramientas del ecosistema de Kubernetes, pruebe uno de estos tutoriales:

Kubernetes e IBM Cloud

IBM Cloud® Kubernetes Service, una solución de orquestación de contenedores gestionada, automatiza la implementación, el funcionamiento, el escalamiento y la supervisión de aplicaciones en contenedores en un clúster de hosts de computación, además de añadir funcionalidades específicas de IBM. Permite la entrega rápida de aplicaciones y puede enlazarse a servicios avanzados como blockchain e IBM Watson®.

Para obtener una visión general de cómo un servicio de Kubernetes gestionado puede ayudarle en su ruta a la nube, vea nuestro video “Ventajas de los Kubernetes gestionados” (03:14):

Red Hat® OpenShift® on IBM Cloud es un servicio completo que ofrece clústeres de OpenShift totalmente gestionados en la plataforma IBM Cloud. (OpenShift es una plataforma empresarial de Kubernetes que se ejecuta en Red Hat Enterprise Linux.)

Lea más acerca de OpenShift en el nuevo informe de Forrester Wave: Plataformas de desarrollo de contenedores multinube (PDF, 415 KB).

Para empezar, regístrese para obtener un IBMid y cree su cuenta de IBM Cloud.