Kubernetes
Kubernetes es una plataforma de orquestación de contenedores de código abierto que automatiza la implementación, la administración y el escalamiento de aplicaciones en contenedores.
Optimice su entorno de Kubernetes Suscríbase al boletín de IBM
Fondo negro y azul
¿Qué es Kubernetes?

Kubernetes, también conocida como “k8s” o “kube”, es una plataforma de orquestación de contenedores diseñada para programa y automatizar el despliegue, la gestión y el escalado de aplicaciones en contenedores.

Kubernetes fue desarrollado por primera vez por ingenieros de Google antes de ser de código abierto en 2014. Es descendiente de Borg, una plataforma de orquestación de contenedores utilizada internamente en Google. Kubernetes significa timonel o piloto en griego, de ahí el timó en el logotipo de Kubernetes (enlace externo a ibm.com).

En la actualidad, Kubernetes y el ecosistema de contenedores más amplio están madurando hasta convertirse en una plataforma y un ecosistema informáticos de uso general que rivalizan con (e incluso superan a) las máquinas virtuales (VM) como componentes básicos de la infraestructura y las aplicaciones modernas en la nube. Este ecosistema permite a las organizaciones ofrecer una plataforma como servicio (PaaS) de alta productividad que aborde múltiples tareas relacionadas con el desarrollo nativo de la nube para que los equipos de desarrollo puedan centrarse únicamente en la programación y la innovación.     

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

Automatización de la elasticidad del contenedor con base en la aplicación

Para ingenieros de plataformas y DevOps que buscan operacionalizar la velocidad de comercialización y al mismo tiempo garantizar el rendimiento de las aplicaciones.

¿Qué son los contenedores?

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

Los contenedores aprovechan una forma de virtualización del sistema operativo (SO) que permite a varias aplicaciones compartir una única instancia de SO aislando procesos y controlando la cantidad de CPU, memoria y disco a la que pueden acceder esos procesos. Al ser más pequeños, consumir menos recursos y ser más portátiles que las máquinas virtuales (VM), los contenedores se han convertido en las unidades de computación de facto de las modernas aplicaciones nativas de la nube

En un estudio reciente de IBM, los usuarios informaron de varios beneficios técnicos y empresariales específicos derivados de la adopción de contenedores y tecnologías relacionadas. 

Contenedores frente a máquinas virtuales frente a 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 abstracción de la infraestructura de TI.

En la infraestructura tradicional, las aplicaciones se ejecutan en un servidor físico y acaparan todos los recursos que pueden conseguir. Esto le deja la opción de ejecutar varias aplicaciones en un solo servidor y esperar que una no acapare recursos a expensas de las demás o dedicar un servidor por aplicación, lo que desperdicia recursos y no es escalable.

Las máquinas virtuales (VM) son servidores abstraídos del hardware informático real, lo que permite ejecutar varias VM en un servidor físico o una única VM que abarque más de un servidor físico. Cada máquina virtual ejecuta su propia instancia del sistema operativo y puede aislar cada aplicación en su propia máquina virtual, lo que reduce la posibilidad de que las aplicaciones que se ejecutan en el mismo hardware físico subyacente se afecten entre sí. 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 se necesita ejecutar la aplicación, la máquina virtual se elimina.

Para obtener más información sobre VM, consulte "¿Qué son las máquinas virtuales?"

Los contenedores llevan esta abstracción a un nivel superior: además de compartir el hardware virtualizado subyacente, también comparten un núcleo de sistema operativo virtualizado subyacente. Los contenedores ofrecen el mismo aislamiento, escalabilidad y desechabilidad que las máquinas virtuales, pero como 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 el uso de los recursos: permiten ejecutar más aplicaciones en menos máquinas (virtuales y físicas), con menos instancias del sistema operativo. Los contenedores son más fáciles de transportar entre entornos de escritorio, centros de datos y nubes. Además, son una excelente opción para las prácticas de desarrollo de Agile y DevOps.

"¿Qué son los contenedores?" Proporciona una explicación completa de los contenedores y la contenedorización. Por su parte, la publicación del blog "Contenedores frente a máquinas virtuales: ¿cuál es la diferencia?" ofrece un resumen completo de las diferencias entre ambos.

¿Qué es Docker?

Docker es la herramienta más popular para crear y ejecutar contenedores de 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 llevó a las masas con una nueva implementación fácil de usar para desarrolladores y en 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 comerciales para contenedores que se basa en el proyecto de código abierto (y aporta esas mejoras a la comunidad de código abierto).

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

Aunque hoy en día existen plataformas de contenedores alternativas (como Open Container Initiative (OCI), CoreOS y Canonical (Ubuntu) LXD), Docker es tan popular que es prácticamente sinónimo de contenedores y a veces se confunde con un competidor de tecnologías complementarias como Kubernetes (consulte el video "Kubernetes frente a Docker: No es o uno o el otro" que aparece 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 programar y automatizar el despliegue, la conexión en red, la escalabilidad y la disponibilidad de los contenedores. Así nació el mercado de la orquestación de contenedores.

Si bien otras opciones de orquestación de contenedores, sobre todo Docker Swarm y Apache Mesos, ganaron algo de tracción desde el principio, Kubernetes se convirtió rápidamente en la más ampliamente 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 escogieron y siguen escogiendo Kubernetes para su gama de funciones, su amplio u creciente ecosistema de herramientas de soporte de código abierto, y su soporte y portabilidad entre los proveedores de la nube. Todos los principales proveedores de la nube pública, incluidos Amazon Web Services (AWS), Google Cloud, IBM Cloud y Microsoft Azure, ofrecen servicios de Kubernetes totalmente gestionados.

¿Qué hace Kubernetes?

Kubernetes programa y automatiza las tareas relacionadas con los contenedores a lo largo del ciclo de vida de la aplicación, que incluyen:

  • Despliegue: despliegue un número especificado de contenedores en un host especificado y manténgalos en ejecución en el estado deseado.

  • Implementaciones: una implementación es un cambio en un despliegue. Kubernetes le permite iniciar, pausar, reanudar o revertir 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.

  • Aprovisionamiento de almacenamiento: configure Kubernetes para instalar almacenamiento persistente local o en la nube para sus contenedores según sea necesario.

  • Equilibrio de carga: basado en el uso de la CPU o en métricas personalizadas, el equilibrio de carga de Kubernetes puede distribuir la carga de trabajo en toda la red para mantener el rendimiento y la estabilidad. 

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

  • Autocorrección para alta disponibilidad: cuando se produce un error en un contenedor, Kubernetes puede reiniciarlo o reemplazarlo automáticamente para evitar el tiempo de inactividad. También puede retirar contenedores que no cumplan con los requisitos de comprobación de estado.

Kubernetes y Docker

Si ha leído hasta aquí, ya entiende que, aunque Kubernetes es una alternativo a Docker Swarm, no es (contrariamente a la persistente idea errónea popular) una alternativa a o competidor de Docker en sí.

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

Para aprender más, vea “Kubernetes frente a Docker: no es o uno o el otro”:

Arquitectura de Kubernetes

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

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 múltiples  nodos trabajadores que despliegan, ejecutan y gestionan aplicaciones en contenedores. El nodo maestro ejecuta un servicio de programación que automatiza cuándo y dónde se despliegan los contenedores en función de los requisitos de despliegue establecidos por el desarrollador y de la capacidad informática disponible. Cada nodo trabajador incluye la herramienta que se utiliza 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 de clúster mediante kubectl, una interfaz de línea de comandos (cli) que se comunica directamente con la API de Kubernetes. 

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

Pods y despliegues (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 de 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 únicamente contenedores que deban compartir recursos.

El despliegue 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 un pod falla, el despliegue creará uno nuevo.

Para obtener más información sobre los despliegues de Kubernetes, vea “Despliegues de Kubernetes: comience rápidamente”:

Malla de servicio Istio

Kubernetes puede desplegar y escalar pods, pero no puede gestionar ni automatizar el enrutamiento entre ellos y no proporciona ninguna herramienta para monitorizar, proteger o depurar estas conexiones. A medida que crece el número de contenedores de un clúster, el número de rutas de conexión posibles entre ellos aumenta exponencialmente (por ejemplo, dos contenedores tienen dos conexiones potenciales, pero 10 pods tienen 90), lo que da lugar a una posible pesadilla de configuración y gestión.

Ingrese Istio, una capa de malla de servicio de código abierto para clústeres de Kubernetes. A cada clúster de Kubernetes, Istio agrega un contenedor de archivo adicional, esencialmente 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 facilita la depuración de las conexiones entre contenedores.

Istio también proporciona un panel que los equipos y administradores de DevOps pueden utilizar para supervisar la latencia, los errores de tiempo en el servicio y otras características de las conexiones entre contenedores. Además, incorpora funciones de seguridad (concretamente, una 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 la seguridad pueden utilizar para supervisar el clúster.

Lea más sobre Istio
Computación nativa y sin servidor

Knative (pronunciado "kay-native") es una plataforma de código abierto que se asienta sobre Kubernetes y proporciona dos clases importantes de ventajas para el desarrollo nativo de la nube:

Knative proporciona una vía de acceso sencilla a la computación sin servidor

La computación sin servidor es una forma relativamente nueva de desplegar código que hace que las aplicaciones nativas de la nube sean más eficientes y rentables. En lugar de desplegar una instancia continua de código que permanece inactiva a la espera de solicitudes, el código sin servidor se despliega cuando es necesario (aumentando o reduciendo su escala según fluctúe la demanda) y luego se retira cuando no se utiliza. La tecnología sin servidor evita el desperdicio de capacidad y potencia de cálculo y reduce los costos, ya que solo se paga por ejecutar el código cuando realmente se está ejecutando.

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 gestiona los detalles en segundo plano y el desarrollador puede centrarse en el código.

Knative simplifica el desarrollo y la orquestación de contenedores

Para los desarrolladores, la contenedorización del código requiere muchos pasos repetitivos, y la orquestación de contenedores requiere mucha configuración y secuencias de comandos (como 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 nativa de la nube. 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 otros desarrolladores puedan utilizarla. 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 contenedores o escalar a ninguna escala (llamada escalar a cero). Además, Serve tiene dos características muy útiles: la de configuración, que guarda versiones de un contenedor (llamadas instantáneas) cada vez que empuja el contenedor a producción y le permite ejecutar esas versiones de forma simultánea y la de enrutamiento de servicios, que le permite dirigir diferentes cantidades de tráfico a estas versiones. Puede utilizar estas funciones conjuntamente para escalonar gradualmente el despliegue de un contenedor o para realizar una prueba canaria de una aplicación en contenedores antes de ponerla en producción global.

Event: Event permite que eventos específicos activen funciones o servicios basados en contenedores. Esto es especialmente importante para las capacidades sin servidor de Knative; algo tiene que decirle al sistema que active una función cuando sea necesario. Event permite a los equipos expresar su interés en los tipos de eventos y, a continuación, se conecta automáticamente con el productor del evento y dirige los eventos al contenedor, eliminando la necesidad de programar estas conexiones.

Más información sobre Knative
Kubernetes GitHub commits y más pruebas de su creciente popularidad

Kubernetes es uno de los proyectos de código abierto de más rápido crecimiento en la historia, y dicho crecimiento se está acelerando. La adopción sigue disparándose entre los desarrolladores y las empresas que los emplean. Algunos datos que vale la pena destacar:

  • En el momento de escribir estas líneas, 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 contribuyentes activos en el proyecto. Según Cloud Native Computing Foundation (CNCF), se han realizado 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í (el enlace externo a ibm.com).

  • Más de 2,000 empresas utilizan Kubernetes en sus pilas de software de producción. Entre ellas se encuentran empresas mundialmente conocidas como AirBnB, Ancestry, Bose, CapitalOne, Intuit, Nordstrom, Philips, Reddit, Slack, Spotify, Tinder y, por supuesto, IBM. Lea estos y otros estudios de caso de adopción (enlace externo a ibm.com)

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

  • Según ZipRecruiter (enlace externo a ibm.com), el sueldo anual medio (en Norteamérica) para un trabajo relacionado con Kubernetes es de 147,732 USD. En este momento, hay más de 57,000 puestos relacionados con Kubernetes en LinkedIn (enlace externo a ibm.com), frente a los 21,000 puestos de hace tan 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 usar contenedores y desplegar cargas de trabajo empresariales en clústeres de Kubernetes.

Conozca Red Hat OpenShift
IBM Cloud Satellite

Despliegue y ejecute aplicaciones de forma coherente en entornos locales, de computación perimetral y de nube pública desde cualquier proveedor de nube, utilizando un conjunto común de servicios en la nube que incluyen cadenas de herramientas, bases de datos e IA.

Explore IBM Cloud Satellite Solutions
IBM Cloud Code Engine

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

Explore Code Engine
Recursos Contenedores en la empresa

Una nueva investigación de IBM documenta el creciente impulso de la adopción de contenedores y Kubernetes.

TI flexible, resiliente y segura para su nube híbrida

Los contenedores forman parte de una estrategia de nube híbrida que permite crear y gestionar cargas de trabajo desde cualquier lugar.

¿Qué es sin servidor?

Sin servidor un modelo de ejecución y desarrollo de aplicaciones en la nube que permite a los desarrolladores crear y ejecutar código sin gestionar servidores ni pagar por una infraestructura en la nube inactiva.

Conceptos básicos de YAML en Kubernetes

Explore un ejemplo de cómo se utiliza un archivo YAML en Kubernetes.

Dé el siguiente paso

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

Explore Red Hat OpenShift en IBM Cloud