Siguiendo la línea de los últimos posts, vamos a hablar de otra herramienta muy importante y de la que cada vez se oye más en las charlas y eventos tecnológicos: Kubernetes.

Kubernetes

Como hemos explicado en los posts anteriores, el auge de la virtualización ligera, con Docker como su principal valedor, ha revolucionado el mundo del desarrollo de software y las operaciones. En el post de Migración Legacy a Microservicios explicamos las ventajas de los microservicios. Ante esto cabe destacar que el desarrollo de microservicios se ha visto impulsado por tecnologías como Docker, puesto que antes ya se podía realizar pero implicaba mucho más esfuerzo. Por otro lado, en el post de Docker explicamos las ventajas y facilidades que nos da la virtualización ligera con Docker en el desarrollo y despliegue de aplicaciones.

Ahora bien, si unimos ambos conceptos, Microservicios y Docker, nos damos cuenta de que durante el desarrollo de software podemos encontrarnos con muchas más piezas que en el desarrollo de una aplicación monolítica tradicional; por tanto, es fácil darse cuenta de que el esfuerzo de gestionar muchas piezas va a suponer bastante más esfuerzo. En este punto nacen los llamados orquestadores de contenedores, como Swarm, Mesos y Kubernetes, con el principal objetivo de poner orden a las múltiples versiones de aplicaciones dockerizadas y agilizar tanto sus despliegues como el escalado; en otras palabras, para orquestar y gestionar los contenedores.

¿Qué es Kubernetes?

Kubernetes ó k8s (abreviatura que se obtiene al juntar la primera k, un 8 que representan las 8 letras del medio, y la s por la letra final) es un orquestador creado por ingenieros de Google en 2014 y donado a la comunidad en 2015. En ese mismo año Google se asoció con la Linux Foundation para formar la Cloud Native Computing Foundation, en la que Kubernetes sería una tecnología semilla.

De forma resumida, se trata de un sistema para la automatización de despliegues, el escalado y gestión de aplicaciones de contenedores, gestión de servicios y balanceo de carga automático.

Una aplicación real está compuesta por varios contenedores interconectados entre sí para ofrecer un servicio. Además, necesita ser desplegada en varios hosts de servidores para tener alta disponibilidad o soportar las cargas de trabajo previstas. Si esto lo llevamos a un entorno de producción con múltiples aplicaciones es fácil darse cuenta de que la gestión de los contenedores se complica de forma notable.

Para solucionar varios de los problemas de la propagación y crecimiento de contenedores, Kubernetes permite ordenar y agrupar contenedores en un único nodo denominado Pod; es decir, añade una capa de abstracción a los contenedores agrupados proporcionando las conexiones de red y almacenamiento entre ellos. De esta manera K8s es capaz de mover y escalar los contenedores por el clúster con mucha facilidad lo que conlleva poder programar las cargas de trabajo para dar soporte según la demanda requerida.

Características de Kubernetes

Varias son las características de Kubernetes que han hecho que se convierta en el estándar de orquestación de contenedores por delante de otras soluciones. Las principales son:

  1. Service Discovery y load balancing. Provee un sistema de autodescubrimiento entre contenedores y enrutamiento mediante la asignación de direcciones IP y un nombre único a los servicios mediante el cual balancea la carga de tráfico.
  2. Orquestación del almacenamiento. K8s puede montar automáticamente el sistema de almacenamiento necesario. Por ejemplo: almacenamiento local, de un proveedor de cloud o almacenamiento de red como NFS, iSCSI, Gluster, Ceph, Cinder o Flocker.
  3. Despliegues y rollbacks automáticos. Para la actualización de aplicaciones se pueden definir políticas de despliegue para no tener parada de servicio. Kubernetes es capaz de no eliminar todos los Pods de la versión anterior de una aplicación hasta levantar los Pods de la nueva versión, además, en caso de fallo revertirá el cambio automáticamente.
  4. Ejecución Batch. Además de los servicios, K8s puede gestionar cargas de trabajo batch y CI, reemplazando los contenedores que fallan.
  5. Planificación. Coloca automáticamente los contenedores en los mejores nodos según sus requisitos y otras restricciones, sin sacrificar la disponibilidad. K8s aumenta la utilización y mejora el ahorro de recursos combinando cargas de trabajo críticas con best-effort.
  6. Autorreparación. Reinicia los contenedores que fallan, reemplaza y reprograma los contenedores cuando los nodos mueren, elimina los contenedores que no responden a los health-checks definidos por el usuario y no los presenta a los usuarios hasta que estén listos.
  7. Gestión de la configuración y secrets. En Kubernetes se puede almacenar los datos sensibles como tokens, claves a una API, claves ssh, contraseñas, etc, en los objetos llamados secrets que se guardan en un sitio seguro y no dentro de una imagen o el almacenamiento. Esto permite desplegar y actualizar la configuración sin reconstruir las imágenes.
  8. Escalado y auto-escalado. Permite escalar aplicaciones manualmente o definir reglas para escalar horizontalmente aplicaciones en función del uso del CPU. Esta característica mejora el uso del hardware optimizando los recursos empleados.

Uso de Kubernetes

Otro de los motivos por los que muchas soluciones lo están integrando en sus arquitecturas es porque las opciones de instalación de K8s casi no tienen restricciones. Podemos instalar Kubernetes en:

  1. Bare Metal. Sobre máquinas físicas utilizando múltiples sistemas operativos como Fedora, CentOS, RHEL, Ubuntu, etc.
  2. Virtualización On-Premise. Sobre máquinas virtuales empleando Vmware, OpenStack, CoreOS, oVirt, CloudStack, Vagrant, Fedora, etc.
  3. Soluciones Cloud. Opción muy recomendable si queremos toda la potencia de K8s pero sin gestionar toda su arquitectura. Existen muchas opciones cloud que ofrecen servicios gestionados de Kubernetes:
    1. Google Container Engine. Servicio gestionado y ofrecido por Google. Aporta también monitorización, logging, mantenimiento y actualización de K8s.
    2. OpenShift. Plataforma como servicio que integra Kubernetes.
    3. CoreOS Tectonic: Producto de CoreOS que proporciona Kubernetes. Incluye Prometheus para la monitorización y gestión de alertas.
    4. Azure. Ofrece un servicio de orquestación de contenedores de Kubernetes totalmente administrado en su producto AKS (Azure Kubernetes Service).
    5. IBM Cloud Container Service. Servicio basado en Kubernetes y Docker que gestiona los nodos master dejando la personalización de nodos worker en tus manos. Por otro lado, dispone de un producto de nube privada basado en Kubernetes llamado IBM Cloud Private.

Conclusiones acerca de Kubernetes

Tal es el impacto que está teniendo Kubernetes en la orquestación y gestión de entornos basados en contenedores, que se ha convertido en la herramienta más utilizada por varias soluciones, e incluso Mesosphere lo ha implementado sustituyendo a su orquestador original Marathon.

Actualmente se encuentra en un momento de gran crecimiento gracias a la comunidad apoyada por Google, Red Hat, Mesosphere, CoreOS, AWS, etc. por lo que las mejoras son continuas.

Los contenedores han supuesto una revolución en la forma de desarrollar y desplegar aplicaciones, pero esto no sería posible sin herramientas como Kubernetes. Por lo tanto, esperamos que se termine de consolidar en el mercado y no pare de crecer ya que tiene un gran recorrido por delante.

Recursos sobre Kubernetes

https://kubernetes.io/

https://www.redhat.com/

https://www.paradigmadigital.com/techbiz/por-que-todos-apuestan-por-kubernetes/

 

ebook los 4 actores del cloud
ebook razones

Contenidos relacionados


Te pueden interesar...