Series DevOps 101 – Herramientas de DevOps – Kubernetes 101 – Parte 1

En la serie de hoy hablaremos sobre Kubernetes, la plataforma de código abierto para administrar cargas de trabajo y servicios.


¿Qué es Kubernetes?¿Para qué nos puede ser útil?


Kubernetes es una plataforma portable y extensible de código abierto para administrar cargas de trabajo y servicios. Kubernetes facilita la automatización y la configuración declarativa. Tiene un ecosistema grande y en rápido crecimiento. El soporte, las herramientas y los servicios para Kubernetes están ampliamente disponibles.


Google liberó el proyecto Kubernetes en el año 2014. Kubernetes se basa en la experiencia de Google corriendo aplicaciones en producción a gran escala por década y media, junto a las mejores ideas y prácticas de la comunidad


¿Por qué necesito Kubernetes y qué puede hacer por mi?


Kubernetes tiene varias características. Puedes pensar en Kubernetes como:


  • Una plataforma de contenedores.
  • Una plataforma de microservicios.
  • Una plataforma portable de nube.

…¡y mucho más!


Kubernetes ofrece un entorno de administración centrado en contenedores. Orquesta la infraestructura de cómputo, redes y almacenamiento para que las cargas de trabajo de los usuarios no tengan que hacerlo.


Esto ofrece la simplicidad de las Plataformas como Servicio (PaaS) con la flexibilidad de la Infraestructura como Servicio (IaaS) y permite la portabilidad entre proveedores de infraestructura


Pero, ¿qué es Orquestar?

Los contenedores son tan ligeros y flexibles que han dado lugar a nuevas arquitecturas de aplicaciones.


Este nuevo enfoque consiste en empaquetar los diferentes servicios que constituyen una aplicación, en contendedores separados; y luego desplegar esos contenedores a través de un clúster de máquinas físicas o virtuales.


Aplicaciones extremadamente amplias como Netflix, pueden llegar a estar compuestas por miles de contenedores. Veamos, por ejemplo, algunos gráficos de la compleja arquitectura basada en microservicios que compone Netflix:


Fuente: Amazon Reinvent

¿Desplegarías, gestionarías, crearías y eliminarías cada contenedor de manera manual?


No tiene mucho sentido, en términos de practicidad, en un marco DevOps.


Fuente : Google

Resumiendo, ¿qué podemos decir de Kubernetes?


Kubernetes, K8S (k, 8 caracteres, s), o «Kube» es una plataforma open source que automatiza las operaciones de los contenedores de Linux. Elimina muchos de los procesos manuales involucrados en la implementación y escalabilidad de las aplicaciones en contenedores. En otras palabras, puede crear un clúster de grupos de hosts que ejecutan contenedores de Linux, y Kubernetes lo ayuda a administrar con facilidad y eficacia esos clústeres.


Estos clústeres pueden abarcar hosts en nubes públicasprivadas o híbridas. Por este motivo, Kubernetes es la plataforma ideal para alojar aplicaciones nativas de la nube que requieren una expansión rápida, como la transmisión de datos en tiempo real a través de Apache Kafka.


Originalmente, ingenieros de Google desarrollaron y diseñaron Kubernetes. Google fue uno de los primeros colaboradores de la tecnología de contenedores de Linux, y ha contado públicamente que todo en Google se ejecuta en contenedores. (Esta es la tecnología detrás de los servicios de nube de Google).

Google genera más de 2 000 millones de implementaciones en contenedores por semana, todo con una plataforma interna: Borg. Fue la precursora de Kubernetes, y las lecciones aprendidas del desarrollo de Borg a lo largo de los años se convirtieron en la principal influencia de gran parte de la tecnología de Kubernetes.

Google

Kubernetes, ¿tiene una curva de aprendizaje?


. Las aplicaciones de producción real abarcan varios contenedores. Esos contenedores deben implementarse en varios hosts de servidores. La seguridad de los contenedores tiene varias capas y puede ser complicada. Aquí es donde Kubernetes puede ayudarlo.


Kubernetes te ofrece la capacidad de organización y gestión necesaria para implementar contenedores a escala para estas cargas de trabajo. El sistema de organización de Kubernetes le permite diseñar servicios de aplicaciones que abarcan varios contenedores, programar esos contenedores en un clúster, ampliarlos y gestionar su estado a lo largo del tiempo. Con Kubernetes, puede adoptar medidas concretas para lograr una mejor seguridad de TI.


Kubernetes también debe integrarse a las conexiones en red , el almacenamiento, la seguridad, la telemetría y otros servicios para proporcionar una infraestructura de contenedores integral.



¿Cómo funciona y para qué sirve Kubernetes?


La principal ventaja de usar Kubernetes en tu entorno, especialmente si se encuentra optimizando el desarrollo de las aplicaciones para la nube, es qué le ofrece la plataforma para programar y ejecutar contenedores en clústeres de máquinas virtuales o físicas.


A grandes rasgos, le permite implementar una infraestructura basada en contenedores en los entornos de producción, y depender completamente de ella. Y, dado que Kubernetes abarca todo lo referido a la automatización de tareas operativas, puedes hacer muchas de las cosas que también otras plataformas de aplicaciones o sistemas de gestión te permiten hacer, pero para tus contenedores.


Con Kubernetes podemos….


  • Orquestar contenedores en múltiples hosts.
  • Hacer un mejor uso del hardware para maximizar los recursos necesarios para ejecutar sus aplicaciones empresariales.
  • Controlar y automatizar las implementaciones y actualizaciones de las aplicaciones.
  • Montar y añadir almacenamiento para ejecutar aplicaciones con estado.
  • Escalar las aplicaciones en contenedores y sus recursos sobre la marcha.
  • Administrar servicios de forma declarativa, que garanticen que las aplicaciones implementadas siempre se ejecuten del modo que las implementó.
  • Comprobaciones de estado y autorregeneración de sus aplicaciones con ubicación, reinicio, replicación y escalamiento automáticos.

Sin embargo, Kubernetes depende de otros proyectos para proporcionar todos estos servicios orquestados.


Con el agregado de otros proyectos de open source, puede desplegar al máximo la potencia de Kubernetes. Estas piezas necesarias incluyen las siguientes, entre otras:


  • Registro, a través de proyectos como Atomic Registry o Docker Registry.
  • Conexiones en red, a través de proyectos como OpenvSwitch y enrutamiento inteligente de perímetros.
  • Telemetría, a través de proyectos como heapster, kibana, hawkular y elastic.
  • Seguridad, a través de proyectos como LDAP, SELinux, RBAC y OAUTH, con capas multitenencia.
  • Automatización, con incorporación de guías de Ansible para instalación y administración del ciclo de vida de los clústeres.
  • Servicios, a través de un amplio catálogo del contenido creado de antemano de los patrones de las aplicaciones más conocidas.

Los conceptos Esenciales que tienes que saber de Kubernetes


Como cualquier tecnología, existen muchas palabras específicas que pueden ser una barrera al ingresar. Veamos algunos de los términos más comunes para ayudarlo a entender Kubernetes.


  • Master: la máquina que controla los nodos Kubernetes. Aquí es donde se originan todas las asignaciones de tareas.
  • Nodo: estas máquinas realizan las tareas requeridas y asignadas. El master de Kubernetes las controla.
  • Pod: un grupo de uno o más contenedores implementados en un nodo único. Todos los contenedores de un pod comparten la dirección IP, la IPC, el nombre del host y otros recursos. Los pods abstraen la red y el almacenamiento del contenedor subyacente. Esto le permite mover los contenedores por el clúster con mayor facilidad.
  • Controlador de replicación: controla la cantidad de copias idénticas de un pod que deben ejecutarse en algún lugar del clúster.
  • Servicio: separa las definiciones de tareas de los pods. Los proxies de servicios de Kubernetes envían automáticamente las solicitudes de servicio al pod correspondiente, sin importar adónde se traslada en el clúster, o incluso si está siendo reemplazado.
  • Kubelet: este servicio se ejecuta en los nodos y lee los manifiestos del contenedor, y garantiza que los contenedores definidos estén iniciados y ejecutándose.
  • Kubectl: es la herramienta de configuración de la línea de comandos de Kubernetes.

Por ultimo, ¿qué soluciones de Kubernetes podemos conocer?


La lista puede ser mucho mas extensa, sin embargo, aquí tenemos un extracto de soluciones Open Source, Cloud también, de Kubernetes, ¡veámoslas!


1. Kubernetes


Google Kubernetes

Kubernetes es de hecho el motor de orquestación de contenedores más popular que existe en el mercado. Comenzó siendo un proyecto de Google y miles de equipos de desarrolladores lo usan para desplegar contenedores en producción. Google afirma que ejecuta miles de millones de contenedores usando Kubernetes cada semana.


Si solo puedes aprender uno, tiene que ser Kubernetes.


La herramienta funciona agrupando contenedores que componen una aplicación en unidades lógicas para una fácil gestión y descubrimiento.


  • Precio: Gratis

2. Docker Swarm


Docker Swarm

Swarm es la solución que propone Docker ante los problemas de los desarrolladores a la hora de orquestar y planificar contenedores a través de muchos servidores. Swarm viene incluido junto al motor de Docker desde la versión 1.12.0, y ofrece muchas funciones avanzadas integradas como el descubrimiento de servicios, balanceo de carga, escalado y seguridad.


Swarm sigue la filosofía de Docker de centrarse en la simplicidad y en la experiencia del desarrollador. Se podría decir que es más fácil de usar que Kubernetes de inicio, pero no tan potente y no tan adoptado por las empresas, los proveedores Cloud o por la comunidad.


  • Precio: Edición «Community» Gratuita

3. Mesosphere DC/OS


Mesosphere DCOS

El sistema operativo Mesosphere Datacenter (DC/OS) es una plataforma de código abierto, integrada para datos y contenedores desarrollados sobre el kernel de sistema distribuido Apache Mesos. Se ha diseñado para gestionar múltiples máquinas dentro de un centro de datos como uno o más clústeres, ya sea en la nube o usando software en servidores en local. DC/OS puede desplegar contenedores y gestionar tanto aplicaciones sin estado como protocolos con estado en el mismo entorno.


Es capaz de funcionar con Docker Swarm y Kubernetes.


  • Precio: los paquetes de suscripción de Mesosphere DC/OS están basados en el número de nodos (físicos y virtuales) en tu entorno.

4. Google Container Engine (GKE)


Google Kubernetes Engine (GKE)

Montado sobre Kubernetes (de hecho su nombre oficial es Google Kubernetes Engine, GKE), permite desplegar, gestionar y escalar aplicaciones de contenedores en la nube de Google. El objetivo de GKE es optimizar la productividad del departamento de desarrollo al mejorar la gestión de las cargas de trabajo basadas en contenedores. Oculta tanto las tareas de gestión simple como aquellas más complejas detrás de herramientas de líneas de comando, usando interfaces transparentes y fáciles de usar.


Obviamente, Kubernetes es la columna vertebral de GKE. Aunque no es estrictamente necesario dominar Kubernetes para usar GKE, te ayudará mucho si al menos conoces sus fundamentos básicos.


  • Precio: Pagas por los nodos, el almacenamiento y la transferencia utilizados.

5. Azure Container Service (AKS)


Azure Container Service (ACS)

Hace relativamente poco se le cambió el nombre de marca de ACS a AKS. El servicio de Azure es código abierto y está optimizado para su uso en las máquinas virtuales de Azure, denominadas Azure Virtual Machines. Proporciona las herramientas necesarias para crear, configurar y gestionar la infraestructura de contendedores Docker abiertos. AKS ofrece desarrollo simplificado de aplicaciones basadas en contenedores y despliegue con soporte para Kubernetes, Mesosphere DC/OS, o Swarm para la orquestación.


Escala y orquesta usando las herramientas de gestión de aplicaciones que elijas y conectándote mediante puntos de acceso API estándar.


  • Precio: Paga solo por las máquinas virtuales y los recursos de conexión y de almacenamiento adicionales que utilices.

6. Amazon ECS


AmazonECS

El servicio de AWS para orquestación de contenedores, Amazon ECS, es un sistema de gestión muy escalable que permite a los desarrolladores ejecutar aplicaciones en contenedores sobre instancias EC2. Está formado por muchos componentes integrados que permiten la fácil planificación y despliegue de clústeres, tareas y servicios Docker.


Aunque, como principal desventaja, no existe soporte para ejecutar contenedores fuera de EC2, los aspectos a favor incluyen ventajas propias del servicio AWS tales como CloudTrail, CloudWatch, Elastic Load Balancing, etc.


  • Precio: Se paga por los recursos AWS (por ejemplo las instancias EC2 o los volúmenes EBS volumes) necesarios para almacenar y ejecutar tu aplicación.

7. HashiCorp Nomad


HashiCorp Nomad

Soportada por Linux, Mac, y Windows, Nomad es una herramienta binaria única capaz de planificar todas las aplicaciones virtualizadas, en contenedores o independientes. Nomad te da la capacidad de ejecutar, si quisieras, 1 millón de contenedores a través de 5.000 hosts en cuestión de minutos. Nomad ayuda a mejorar la densidad a la vez que reduce costes, ya que es capaz de distribuir de manera eficiente más aplicaciones en menos servidores.


  • Precio: Gratis

8. Helios


Helios comenzó siendo la herramienta interna de Spotify para garantizar que cientos de microservicios funcionaran eficientemente a través de miles de servidores. Es capaz de desplegar y gestionar contenedores a escala y viene equipado con una API basada en HTTP y con un cliente de línea de comando.


Helios no necesita una topología de red concreta; únicamente requiere un clÚster ZooKeeper y una JVM en los servidores en los que se va ejecutar la herramienta. Está disponible como proyecto de código abierto.


  • Precio: Gratis

9. Marathon


Marathon

Marathon es una Plataforma como Servicio (PaaS) privada a nivel de producción desarrollada sobre Apache Mesos. El framework de Marathon escala aplicaciones en Docker y las expande a más nodos cuando se necesita, para incrementar los recursos disponibles y escalar. También puede hacer de herramienta de orquestación de contenedores para facilitar la recuperación ante fallos en contenedores. Marathon gestiona automáticamente fallos de hardware o de software, y garantiza que la aplicación siempre esté activa.


  • Precio: Gratis

10. Cloud Foundry’s Diego


Cloud Foundry’s Diego

Cloud Foundry usa su arquitectura «Diego» para gestionar contenedores de aplicaciones dentro del entorno «Garden». Garden sigue las directrices de la Iniciativa de Contenedores Abiertos de Linux para el alojamiento de contenedores y su abstracción se hace mediante los demás componentes de Diego. Lo elementos de Diego ofrecen la planificación de aplicaciones y capacidades de gestión a través de Cloud Controller.


  • Precio: Gratis

Estimados lectores, ¡hasta aquí nuestra entrada de hoy! Espero sea de su agrado, ¡nos seguimos leyendo en breve!

Gino Rojo, para EducaciónIT


Comments

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.