Contenedores

¿Qué es Kubernetes?

Kubernetes o k8s (k, 8 caracteres, s... ¿se entiende?), o "kube" para ser breves, es una plataforma de open source que automatiza las operaciones de un contenedor 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 comprender hosts en nubes públicas, privadas o híbridas.

Kubernetes fue desarrollado y diseñado originalmente por ingenieros de Google. 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 tecnología es la que subyace tras los servicios de nube de Google). Google genera más de 2 mil millones de implementaciones en contenedores por semana, impulsadas por una plataforma interna: Borg. Borg fue la precursora de Kubernetes, y las lecciones aprendidas del desarrollo de Borg a lo largo de los años fueron la principal influencia detrás de gran parte de la tecnología de Kubernetes.

Dato curioso: Los siete radios en el logotipo de Kubernetes hacen referencia al nombre original del proyecto: “Project Seven of Nine”.

Red Hat fue una de las primeras empresas que trabajó con Google en Kubernetes, incluso antes del lanzamiento, y se ha convertido en el segundo colaborador líder del proyecto anterior a Kubernetes. Google donó el proyecto Kubernetes a la recientemente creada Cloud Native Computing Foundation en 2015.


¿Por qué es necesario tener Kubernetes?

Las aplicaciones de producción real abarcan varios contenedores. Esos contenedores deben implementarse en varios hosts de servidores. Kubernetes le ofrece las capacidades de orquestación y gestión que se necesitan para implementar contenedores a escala para estas cargas de trabajo. Las orquestación de Kubernetes le permite crear servicios de aplicaciones que abarcan varios contenedores, programar esos contenedores en un clúster, escalarlos y administrar el estado de esos contenedores en el tiempo.

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 completa.

Kubernetes explained - diagram

Por supuesto, esto depende de la manera en que utiliza los contenedores en su entorno. Una aplicación rudimentaria de contenedores de Linux los trata como máquinas virtuales eficientes y rápidas. Una vez que escala esto a un entorno de producción y aplicaciones múltiples, es claro que necesita varios contenedores ubicados que trabajen juntos para ofrecer servicios individuales. Esto multiplica significativamente el número de contenedores en su entorno y, a medida que dichos contenedores se acumulan, la complejidad aumenta.

Kubernetes soluciona muchos problemas comunes de la proliferación de contenedores al ordenar y reunir los contenedores juntos en un pod. Los pods añaden un nivel de abstracción a los contenedores agrupados, lo que le permite programar las cargas de trabajo y proporcionar los servicios necesarios, como las conexiones de red y el almacenamiento, para esos contenedores. Otras partes de Kubernetes lo ayudan a equilibrar la carga en estos pods y a garantizar que cuente con la cantidad correcta de contenedores ejecutándose para dar soporte a su carga de trabajo.

Con la implementación correcta de Kubernetes y con la ayuda de otros proyectos de open source, como Atomic Registry, Open vSwitch, heapster, OAuth y SELinux, puede orquestar todas las partes de su infraestructura de contenedores.


¿Qué puede hacer con Kubernetes?

La principal ventaja de usar Kubernetes en su entorno es que le proporciona la plataforma para programar y ejecutar contenedores en clústeres de máquinas virtuales o físicas. A grandes rasgos, le permite implementar y depender completamente de una infraestructura basada en contenedores en entornos de producción. Y dado que Kubernetes abarca todo lo referido a la automatización de tareas operativas, puede hacer muchas de las cosas que también otras plataformas de aplicaciones o sistemas de gestión le permiten hacer, pero para sus contenedores.

Con Kubernetes usted puede:

  • 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.

Aprenda el lenguaje de Kubernetes

Como cualquier tecnología, existen muchas palabras específicas de la tecnología 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 cuántas copias idénticas de un pod deben estar ejecutándose 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.


Uso de Kubernetes en la producción

Kubernetes es open source. Y, como tal, no existe una estructura de soporte formalizada en torno a esa tecnología, o por lo menos una a la que podría confiarle su negocio. Si tiene problemas para implementar Kubernetes durante su ejecución en la producción, no estará de lo más contento. Y, probablemente, sus clientes tampoco.

Allí es donde Red Hat OpenShift entra en acción. OpenShift es Kubernetes para empresas, y mucho más. OpenShift comprende todas las piezas de tecnología adicionales que convierten a Kubernetes en una herramienta potente y viable para las empresas, que incluye lo siguiente: registro, conexiones en red, telemetría, seguridad, automatización y servicios, entre otras características. Con OpenShift, sus desarrolladores pueden crear nuevas aplicaciones en contenedores, alojarlas e implementarlas en la nube, con la escalabilidad, el control y la orquestación que pueden transformar una buena idea en nuevos negocios de forma fácil y rápida.

Y lo mejor de todo es que OpenShift cuenta con el soporte y el desarrollo del principal líder en open source: Red Hat.


Eche un vistazo a cómo Kubernetes se adapta a su infraestructura

Kubernetes diagram

Kubernetes se ejecuta al principio de un sistema operativo (por ejemplo, Red Hat Enterprise Linux Atomic Host) e interactúa con pods de contenedores que se ejecutan en los nodos. El master de Kubernetes toma los comandos de un administrador (o del equipo de DevOps) y transmite esas instrucciones a los nodos subordinados. Esta transferencia funciona con una gran cantidad de servicios para decidir automáticamente qué nodo es el que mejor se adapta a la tarea. Luego asigna los recursos y los pods en ese nodo para cumplir con la tarea requerida.

Por lo tanto, desde el punto de vista de la infraestructura, hay un cambio muy pequeño en la manera en que usted ha estado administrando los contenedores. El control sobre esos contenedores comienza en un nivel superior, lo que le ofrece un mejor control sin la necesidad de microadministrar cada contenedor o nodo por separado. Aunque es necesario realizar algunas tareas, se trata principalmente de asignar un master de Kubernetes, definir nodos y definir pods.

¿Qué se puede decir de Docker?

La tecnología Docker funciona igual, como se supone que debe hacerlo. Cuando Kubernetes programa un pod en un nodo, el kubelet en ese nodo instruye a Docker para iniciar los contenedores especificados. El kubelet luego recopila continuamente información del estado de esos contenedores desde Docker y añade esa información en el master. Docker arrastra los contenedores a ese nodo, e inicia y detiene esos contenedores como lo hace normalmente. La diferencia radica en que un sistema automatizado le solicita a Docker que realice estas acciones en lugar de que el administrador lo haga manualmente en todos los nodos de todos los contenedores.