Kubernetes, conocido como K8s, es un software de código libre (o abierto) que se ha convertido de facto en el sistema estándar para la automatización del despliegue, escalado y la administración de aplicaciones en contenedores.

Seguro que ya lo conocéis pero, por si acaso, en este post os explicamos qué es, cómo funciona y para qué sirve.

¿Qué es Kubernetes?

Fue originalmente diseñado por Google y anunciado en 2014. Un año después fue donado a la Cloud Native Computing Foundation, formada por Linux Foundation y Google.

Desde sus inicios, Kubernetes ha gozado de gran reconocimiento pero en los últimos tiempos se ha consolidado su influencia por el crecimiento exponencial de la comunidad, con Google y Red Hat pero también IBM, Azure, Meteor, CoreOs, Huawei, Mesosphere, CloudFoundry, Deis o Azure, entre muchos otros.

Aprovechando la experiencia en la ejecución de cargas de trabajo de producción de Google, Kubernetes agrupa los contenedores que conforman una aplicación en unidades lógicas para una fácil administración y descubrimiento. De hecho, su solvencia le ha permitido dejar de ser percibido como un juguete con el que experimentar a ser empleado en producción.

Como es un proyecto de código abierto, puede ser usado para ejecutar aplicaciones en contenedores en cualquier entorno sin la necesidad de tener que cambiar las herramientas operativas. Una importante comunidad de voluntarios se encarga además de mantener y mejorar el software y, al mismo tiempo, otros proveedores y proyectos de código abierto crean y conservan software compatible.

¿Cómo funciona?

Kubernetes se apoya en productos ya existentes y los combina con desarrollos propios.

Administra un clúster de instancias de informática de EC2 y programa contenedores para que se ejecuten en función de los recursos informáticos disponibles y de los requisitos de recursos de cada contenedor. Un clúster está conformado por el plano de control (las instancias que controlan cómo, cuándo y dónde se ejecutan los contenedores) y el plano de datos (las instancias en las que se ejecutan los contenedores).

Instalar y configurar un clúster de Kubernetes on-premises no es fácil y por eso los servicios que ofrece “manejados” (proporcionados por un proveedor de cloud y gestionados por éste como AKS, EKS o GKE) son más populares, ya que permiten disponer de un clúster Kubernetes correctamente instalado y levantado en cuestión de minutos.

Un clúster se compone de varios nodos (máquinas virtuales) que pueden jugar dos tipos de rol: master o de trabajo.

  • Los nodos master hospedan al servidor de API de Kubernetes y son los encargados de coordinar el clúster. Por lo general no ejecutan contenedores sino que son quiénes deciden en qué nodo de trabajo se ejecuta cada contenedor, de mantener el estado del clúster y asegurar que en todo momento hay el número deseado de contenedores en ejecución. También de actualizar las aplicaciones de forma coordinada cuando se despliegan nuevas versiones. Ejecuta los procesos etcd, kube-apiserver, kube-scheduler o kube-controlled-manager, entre otros.
  • Los nodos de trabajo son las instancias de informática que ejecutan los contenedores desplegados en el clúster y donde se procesan los datos. Los componen tres elementos básicos que son el motor de contenedores, el kube-proxy y el kubelet, que es el más importante ya que su función es monitorizar que todos los contenedores se ejecutan.

Kubernetes puede funcionar con un solo nodo pero un clúster tendrá como mínimo cinco (tres master y dos de trabajo).

Al margen de los nodos hay un conjunto de addons que se ejecutan en el clúster. Son como contenedores, pueden ejecutarse en el espacio de nombres kube-system y pueden estar presentes o no, ofreciendo servicios transversales como una inferfaz web gráfica para monitorizar y gestionar el clúster o sistemas de logging centralizado, por ejemplo. El DNS interno es un addon especial porque a pesar de ser opcional por definición, es de facto obligatorio.

Los contenedores se ejecutan en agrupaciones lógicas llamadas pods. El software de plano de control de Kubernetes determina cuándo y dónde se ejecutarán los pods, administra el direccionamiento del tráfico y ajusta la escala de los pods en función del uso.

¿Para qué sirve?

Kubernetes es la plataforma preferida para desarrollar mejores aplicaciones y desplegarlas en producción en menor tiempo por muchas razones. Está catalogado como orquestador de contenedores, lo que lo sitúa en la misma línea de productos como Swarm, Marathon o EC2.

Un orquestador, en su faceta como encargado de gestionar el ciclo de vida de los contenedores de una aplicación, ofrece los siguientes servicios, entre otros:

Escalado y autoescalado

En función del uso de CPU permite el escalado vertical de las aplicaciones de manera automática o manual mediante un comando o a través de la interfaz.

Descubrimiento de servicios y balanceo de carga

Asigna a los contenedores sus propias direcciones IP y un nombre DNS único para un conjunto de contenedores por lo que no es necesario utilizar un mecanismo externo para el descubrimiento de servicios. Además, puede balancear la carga sobre ellos.

Auto-reparación

En caso de fallo de un contenedor, puede reiniciarlo automáticamente, reemplazar o replanificar contenedores cuando un nodo muere y si hay contenedores que no responden a los chequeos definidos por el usuario puede pararlos.

Despliegues y roll-backs automáticos

Cuando hay que actualizar una aplicación o cambiar su configuración, despliega los cambios progresivamente al mismo tiempo que chequea su salud para asegurar que no mata a todas las instancias al mismo tiempo. En caso de fallo, ejecuta un roll-back automático.

Planificación

Decide por sí mismo en qué nodo se ejecutará cada contenedor de acuerdo a los recursos que requiera y a otras restricciones. Mezcla cargas de trabajo críticas y best-effort para potenciar la utilización y el ahorro de recursos.

Gestión de configuración y secrets La información sensible, como las passwords o las claves ssh, se almacena en Kubernetes oculta en secrets. Tanto la configuración de la aplicación como los secrets se despliegan y se actualizan sin tener que reconstruir la imagen ni exponer información confidencial.

Orquestación del almacenamiento

Puede montar automáticamente el sistema de almacenamiento necesario, ya sea almacenamiento local, almacenamiento en un proveedor de cloud pública (como GCP o AWS), o incluso un sistema de almacenamiento de red como NFS, SCSI, Gluster, Ceph, Cinder, o Flocker.

Ejecución Batch

Además de los servicios, Kubernetes puede gestionar cargas de trabajo batch y CI, reemplazando los contenedores que fallen.

Curiosidades

El nombre en clave original para Kubernetes dentro de Google era ‘Project Seven’ en referencia a un personaje de Star Trek que es un Borj más “amigable”. De hecho, los siete radios en la rueda del logotipo de Kubernetes son precisamente una referencia al nombre en clave.