Kubernetes

menu icon

Kubernetes

Kubernetes es una plataforma de orquestación de contenedores de código abierto que automatiza el despliegue, la gestión y el escalado de aplicaciones. Descubra cómo Kubernetes habilita un desarrollo nativo en cloud rentable.

¿Qué es Kubernetes?

Kubernetes, también conocido como "k8s" o "kube", es una plataforma de orquestación de contenedores para planificar y automatizar el despliegue, la gestión y el escalado de aplicaciones en contenedores.

Kubernetes fue desarrollado primero por ingenieros de Google, antes de pasar 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).

Actualmente, 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 componentes básicos de las infraestructuras y aplicaciones cloud modernas. Este ecosistema permite a las organizaciones ofrecer una plataforma como servicio (PaaS) de alta productividad para dirigir múltiples tareas relacionadas con la infraestructura y las operaciones y abordar problemas que pueden surgir en torno al desarrollo nativo en cloud, para que los equipos de desarrollo puedan centrarse únicamente en la codificación y la innovación.     

En el siguiente vídeo, Sai Vennam explica los aspectos básicos de Kubernetes (10:59):

¿Qué son los contenedores?

Empecemos con una definición: Un contenedor es una unidad ejecutable de software en la cual el código de aplicación se empaqueta, junto con bibliotecas y dependencias, de forma común para que se pueda ejecutar en cualquier lugar del escritorio, la TI tradicional o el cloud.

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

Contenedores frente a máquinas virtuales frente a la infraestructura tradicional

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

En la infraestructura tradicional, las aplicaciones se ejecutan en un servidor físico y recogen todos los recursos que pueden obtener. De este modo, tiene la opción de ejecutar múltiples aplicaciones en un solo servidor y esperar que una no consuma recursos a expensas de las demás, o dedicar un servidor a cada aplicación, lo que supone un desperdicio de recursos y no es escalable.

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 máquina virtual ejecuta su propia instancia de sistema operativo, y puede aislar cada aplicación en su propia máquina virtual, reduciendo la posibilidad de que las aplicaciones que se ejecutan en el mismo hardware físico subyacente se afecten entre sí. Las máquinas virtuales aprovechan mejor los recursos y ofrecen una escalabilidad mucho más fácil y rentable 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 sobre las máquinas virtuales, consulte "Máquinas virtuales: Guía básica".

Los contenedores llevan esta abstracción a un nivel superior: específicamente, además de compartir el hardware virtualizado subyacente, comparten un kernel de SO virtualizado también subyacente. Los contenedores ofrecen el mismo aislamiento y escalabilidad que las máquinas virtuales, y también son desechables, pero como no llevan la carga útil de su propia instancia de 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 sistema operativo. Los contenedores son más fácilmente portables entre entornos de escritorio, centro de datos y cloud. Y son una gran opción para las prácticas de desarrollo de Agile y DevOps.

"Contenedores: Guía básica" ofrece una explicación completa de los contenedores y la contenerización. Y la publicación de blog "Containers vs. VMs: What's the difference?" proporciona un resumen completo de las diferencias.

¿Qué es Docker?

Docker es la herramienta más popular para crear y ejecutar contenedores Linux®. Aunque 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 popularizó con una nueva implementación para desarrolladores compatible con cloud.

Docker empezó como un proyecto de código abierto, pero hoy también engloba 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 con sus mejoras en la comunidad de código abierto).

Docker se basa en la tecnología de contenedores Linux (LXC) tradicional, pero permite una virtualización más granular de los procesos kernel de Linux y añade características para facilitar a los desarrolladores la creación, el despliegue, la gestión y la protección.

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 vídeo "Kubernetes frente a Docker: no es una decisión excluyente" 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), agudiza la necesidad de los equipos de operaciones de planificar y automatizar el despliegue de contenedores, las redes, la escalabilidad y la disponibilidad. Y así fue como nació el mercado de orquestación de contenedores.

Aunque otras opciones de orquestación de contenedores, sobre todo Docker Swarm y Apache Mesos, ganaron terreno al comienzo, Kubernetes se afianzó rápidamente como la más adoptada (de hecho, en un momento dado, 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 amplia funcionalidad, su extenso y creciente ecosistema de herramientas de soporte de código abierto, y su soporte y portabilidad entre los principales proveedores de cloud (algunos de los cuales ahora ofrecen servicios de Kubernetes totalmente gestionados).

Para obtener más información sobre la orquestación de contenedores, consulte el vídeo "Container Orchestration Explained" (8:59):

¿Qué hace Kubernetes?

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

  • Despliegue: despliegue un número especificado de contenedores en un host determinado y mantenga su ejecución en un estado deseado.
  • Implementaciones: una implementación es un cambio en un despliegue. Kubernetes le permite iniciar, pausar, reanudar o retrotraer las implementaciones.
  • Descubrimiento de servicios: Kubernetes puede exponer automáticamente un contenedor a Internet o a otros contenedores utilizando un nombre DNS o una dirección IP.
  • Suministro de almacenamiento: establezca Kubernetes para montar almacenamiento persistente en local o en cloud para los contenedores según sea necesario.
  • Equilibrio de carga y escalado: cuando el tráfico a un contenedor se dispara, Kubernetes puede aplicar el equilibrio carga y escalar para distribuirlo a través de la red a fin de mantener la estabilidad.
  • Recuperación automática para garantizar una alta disponibilidad: cuando un contenedor falla, Kubernetes puede reiniciarlo o reemplazarlo automáticamente; también puede eliminar los contenedores que no cumplan con sus requisitos de comprobación de estado.

Kubernetes frente a Docker

Si ha leído hasta aquí, ya entiende que Kubernetes es una alternativa a Docker Swarm pero, en contra de la idea errónea popularmente extendida, no es una alternativa o competidor para el propio Docker.

De hecho, si ha adoptado Docker y está creando despliegues de contenedores basados en Docker a gran escala, la orquestación de Kubernetes es un paso lógico para gestionar estas cargas de trabajo a continuación. Para obtener más información, vea el vídeo sobre "Kubernetes frente a Docker: no es una decisión excluyente" (08:03):

Arquitectura de Kubernetes

Los componentes principales de la arquitectura de Kubernetes incluyen:

Clústeres y nodos (cálculo)

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 de cálculo (máquina virtual o física).

Cada clúster consta de varios nodos de trabajador que despliegan, ejecutan y gestionan aplicaciones contenerizadas y un nodo maestro, que controla y supervisa los nodos de trabajador.

El nodo maestro ejecuta un servicio de planificador que automatiza cuándo y dónde se despliegan los contenedores, basándose en los requisitos de despliegue establecidos por el desarrollador y en la capacidad informática 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.

Para un análisis detallado sobre los clústeres de Kubernetes, consulte esta publicación de blog: "Kubernetes Clusters: Architecture for Rapid, Controlled Cloud App Delivery".

Pods y despliegues (software)

Los pods son grupos de contenedores que comparten los mismos recursos de cálculo 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 ello, se recomienda mantener los pods compactos para que solo contengan los contenedores que deben compartir recursos.

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

Para obtener más información sobre los despliegues de Kubernetes, vea el vídeo sobre "Despliegues de Kubernetes: Get Started Fast” (03:54):

Para obtener una explicación más detallada de los elementos de la arquitectura de Kubernetes, pruebe este curso online de autoaprendizaje: "Kubernetes 101".

También puede obtener un análisis detallado en esta publicación de blog "Arquitectura Architecture: Four Approaches to Container Solutions".

Malla de servicio de Istio

Kubernetes puede desplegar y escalar pods, pero no puede gestionar ni automatizar el direccionamiento entre ellos ni 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 conexión entre ellos aumenta exponencialmente (por ejemplo, dos contenedores tienen dos conexiones potenciales, pero 10 pods tienen 90), lo que puede complicar muchísimo la configuración y la gestión.

Familiarízese 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, establecerá una única política que configura las conexiones entre los contenedores para que no tenga que configurar cada conexión individualmente. Esto facilita la depuración de las conexiones entre contenedores.

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.

Consulte el artículo "What is Istio?" para obtener información más detallada, incluyendo un vídeo y algunos ejemplos de uso de Istio.

Informática sin servidor y Knative

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 en cloud:

Knative proporciona una vía fácil hacia la informática sin servidor

La informática sin servidor es una forma relativamente nueva de desplegar código que hace que las aplicaciones nativas en cloud sean más eficientes y rentables. En lugar de desplegar una instancia de código en curso que está desocupada mientras espera solicitudes, la informática sin servidor recupera el código según sea necesario, escalándolo en función de las fluctuaciones de la demanda, y luego retira el código cuando no está en uso. La informática sin servidor evita la pérdida de potencia y capacidad informática y reduce costes porque solo paga por 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 así el desarrollador puede centrarse en el código.

Knative simplifica el desarrollo y la orquestación de contenedores

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

Knative facilita estas tareas automatizándolas a través de tres componentes:

  • Build: el componente Build de Knative transforma automáticamente el código fuente en un contenedor o función nativo en cloud. En concreto, extrae el código del repositorio, instala las dependencias necesarias, crea la imagen del contenedor y la coloca en un registro de contenedores para que lo puedan utilizar otros desarrolladores. Los desarrolladores deben especificar la ubicación de estos componentes para que Knative pueda encontrarlos, pero una vez hecho esto, Knative automatiza la compilación.
  • Serve: el componente Serve ejecuta contenedores como servicios escalables; puede escalar hasta miles de instancias de contenedor o reducir a ninguna (acción denominada escalado a cero). Además, Serve incluye dos características muy útiles:
    • Configuración, que guarda las versiones de un contenedor (denominadas instantáneas) cada vez que envíe el 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 características de forma conjunta para escalonar gradualmente un despliegue de contenedor o para realizar una prueba canary de una aplicación contenerizada antes de enviarla a producción global.
  • Event: Event permite que sucesos específicos desencadenen funciones o servicios basados en contenedores. Esta acción se integra especialmente en las funcionalidades sin servidor de Knative; algo necesita decirle al sistema que active una función cuando sea necesario. Event permite a los equipos expresar interés en tipos de sucesos, y luego se conecta automáticamente al productor de sucesos y los dirige al contenedor, eliminando la necesidad de programar estas conexiones.

Puede obtener más información sobre Knative leyendo "Knative: Guía básica".

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 el crecimiento se está acelerando. La adopción sigue creciendo entre los desarrolladores y las empresas que los emplean. Algunos datos que vale la pena señalar:

  • En el momento de redactar este documento, se han realizado más de 86 200 confirmaciones en el repositorio de Kubernetes en GitHub (enlace externo a IBM), incluidas casi 6000 confirmaciones en los últimos cuatro meses, y hay más de 2300 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 1500 empresas utilizan Kubernetes en sus pilas 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 realizada en julio de 2019 citada en Container Journal (enlace externo a IBM) concluyó que la adopción de Kubernetes se había incrementado un 51 % durante los seis meses anteriores.
  • Más de 12 000 personas asistieron a la conferencia KubeCon + CloudNative Con North America 2019 (enlace externo a IBM), 3000 más que el número récord de asistencia del año anterior.
  • Según ZipRecruiter (enlace externo a IBM), el salario promedio anual (en Norteamérica) por un trabajo relacionado con Kubernetes es de 144 628 USD.Actualmente, hay más 21 000 puestos relacionados con Kubernetes listados en LinkedIn (enlace externo a IBM).

Tutoriales 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 el despliegue, el funcionamiento, el escalado y la supervisión de aplicaciones en contenedores en un clúster de hosts de cálculo, además de añadir funcionalidades específicas de IBM. Permite la entrega rápida de aplicaciones y puede vincularse a servicios avanzados como blockchain e IBM Watson®.

Para obtener una visión general sobre cómo un servicio de Kubernetes gestionado puede ayudarle en su migración al cloud, vea nuestro vídeo sobre las ventajas de Kubernetes gestionado (3:14):

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

Obtenga más información sobre OpenShift en el nuevo informe de Forrester Wave: Plataformas de desarrollo de contenedores multicloud (PDF, 415 KB).

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