Resumen
Kubernetes (también conocida como k8s o "kube") es una plataforma open source para la organización en contenedores que automatiza muchos de los procesos manuales involucrados en la implementación, la gestión y el ajuste de las aplicaciones que se alojan en ellos.
Clústeres de Kubernetes
Puede agrupar conjuntos de hosts que ejecuten contenedores de Linux® en clústeres, y Kubernetes lo ayudará a gestionarlos con facilidad y eficacia.
Los clústeres de Kubernetes pueden contener hosts en las instalaciones y en las nubes públicas, privadas o híbridas. Por eso, es la plataforma ideal para alojar las aplicaciones desarrolladas directamente en la nube que deben ajustarse rápidamente, como la transmisión inmediata de datos a través de Apache Kafka.
Empresas que colaboran con Kubernetes
Originalmente, los ingenieros de Google fueron quienes desarrollaron y diseñaron Kubernetes. Google fue una de las primeras empresas que colaboró en el desarrollo de los contenedores de Linux y ha declarado públicamente que ejecuta todo en contenedores. (Los contenedores son la tecnología subyacente tras sus servicios de nube).
Google genera más de 2000 millones de implementaciones en contenedores por semana con su plataforma interna: Borg. Se trata de la tecnología precursora de Kubernetes, y todo lo que aprendieron al desarrollarla a lo largo de los años influyó considerablemente en el organizador de contenedores.
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 ahora es el segundo colaborador más importante de su proyecto upstream. Google donó el proyecto a la organización Cloud Native Computing Foundation (CNCF), creada en 2015.
¿Kubernetes se encuentra en sus planes futuros? Comience por aquí.
Las posibilidades que ofrece Kubernetes
La ventaja principal de usar Kubernetes en su entorno es que obtiene una plataforma para programar y ejecutar los contenedores en clústeres de máquinas virtuales (VM) o físicas, especialmente si se encuentra en pleno proceso de optimización del desarrollo de las aplicaciones para la nube.
A grandes rasgos, le permite implementar una infraestructura basada en contenedores en los entornos de producción, y depender completamente de ella. Además, puede realizar muchas de las mismas tareas que haría con otras plataformas de aplicaciones o sistemas de gestión, pero en sus contenedores, ya que Kubernetes automatiza las tareas operativas.
Los desarrolladores también pueden crear aplicaciones desarrolladas en la nube con Kubernetes como la plataforma de tiempo de ejecución mediante el uso de patrones de Kubernetes. Los patrones son las herramientas que necesitan los desarrolladores de Kubernetes para diseñar servicios y aplicaciones basados en contenedores.
Esto es lo que puede hacer con Kubernetes:
- Organizar los contenedores en varios hosts
- Hacer un mejor uso del hardware para aprovechar al máximo los recursos necesarios en la ejecución de las aplicaciones empresariales
- Controlar y automatizar las implementaciones y actualizaciones de las aplicaciones
- Agregar almacenamiento para ejecutar aplicaciones con estado
- Ampliar las aplicaciones en contenedores y sus recursos mientras se ejecutan
- Gestionar los servicios de forma declarativa para garantizar que las aplicaciones implementadas siempre se ejecuten correctamente
- Realizar comprobaciones de estado y autorreparaciones de sus aplicaciones con ubicación, reinicio, replicación y adaptación automáticos
Sin embargo, Kubernetes depende de otros proyectos para proporcionar todos estos servicios organizados. Al agregar otros proyectos open source, puede aprovechar al máximo la capacidad de Kubernetes. Los elementos necesarios incluyen:
- El registro a través de proyectos como Docker Registry
- Las conexiones en red, a través de proyectos como OpenvSwitch y el enrutamiento inteligente en el extremo
- La telemetría a través de proyectos como Kibana, Hawkular y Elastic
- La seguridad a través de proyectos como LDAP, SELinux, RBAC y OAUTH con capas de arquitectura multiempresa
- La automatización con la incorporación de playbooks de Ansible para instalar y gestionar el ciclo de vida de los clústeres
- Los servicios a través de un amplio catálogo de patrones conocidos de aplicaciones
Conozca los conceptos básicos sobre los contenedores de Linux y la tecnología de organización en contenedores. Acceda al curso cuando lo solicite y aprenda a organizar las aplicaciones y los servicios en contenedores, a realizar las pruebas correspondientes con Docker y a implementarlos en un clúster de Kubernetes con Red Hat® OpenShift®.
Vocabulario de Kubernetes
Al igual que ocurre con la mayoría de las tecnologías, el vocabulario específico de Kubernetes puede suponer un obstáculo a la hora de comenzar a utilizar la plataforma. Veamos algunos de los términos más comunes para que pueda comprenderla mejor.
Plano de control: conjunto de procesos que controlan los nodos de Kubernetes. Es donde se originan todas las asignaciones de tareas.
Nodos: máquinas que ejecutan las tareas solicitadas que asigna el plano de control.
Pod: grupo de uno o más contenedores implementados en un solo nodo. Todos los contenedores de un pod comparten la dirección IP, la IPC, el nombre de host y otros recursos. Los pods utilizan la red y el almacenamiento del contenedor subyacente. Esto permite mover los contenedores en 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 las tareas de los pods. Los proxies de servicios de Kubernetes envían las solicitudes de servicio al pod correspondiente de forma automática, sin importar adónde se traslade en el clúster ni si se lo reemplaza.
Kubelet: este servicio se ejecuta en los nodos y se encarga de leer los manifiestos del contenedor y de garantizar el inicio y el funcionamiento de los contenedores definidos.
kubectl: es la herramienta de configuración de la línea de comandos de Kubernetes.
Funcionamiento de Kubernetes
Una implementación de Kubernetes en funcionamiento se denomina clúster. Se puede visualizar en dos partes: el plano de control y las máquinas informáticas, también llamadas nodos.
Cada nodo es su propio entorno de Linux®, y puede ser una máquina virtual o física. Además, los nodos ejecutan los pods, los cuales están formados por contenedores.
El plano de control se encarga de mantener el estado deseado del clúster, como las aplicaciones que se ejecutan y las imágenes de contenedores que se utilizan. Las máquinas informáticas son las que ejecutan las aplicaciones y las cargas de trabajo.
Kubernetes funciona en un sistema operativo (por ejemplo, Red Hat® Enterprise Linux®) e interactúa con los pods de los contenedores que se ejecutan en los nodos.
El plano de control de Kubernetes recibe las instrucciones del administrador (o del equipo de DevOps) y las trasmite a las máquinas informáticas.
Esta transferencia funciona gracias a una gran cantidad de servicios que le permiten seleccionar el nodo más adecuado para la tarea de manera automática. Luego, distribuye los recursos y asigna los pods que se encuentran en ese nodo para cumplir con la tarea solicitada.
El estado deseado de un clúster de Kubernetes define las aplicaciones o las cargas de trabajo que deben ejecutarse, junto con las imágenes que utilizan, los recursos que deben estar disponibles y otros ajustes similares.
Desde el punto de vista de la infraestructura, esto no modifica demasiado la forma en que gestiona los contenedores. Los controla desde un nivel superior, lo cual le permite supervisar mejor los elementos sin la necesidad de gestionar excesivamente cada contenedor o nodo por separado.
Usted se encarga de configurar Kubernetes y de definir los nodos, los pods y los contenedores dentro de ellos, y Kubernetes organiza estos últimos.
Usted decide si quiere ejecutar Kubernetes en servidores dedicados (bare metal), máquinas virtuales, proveedores de nube pública, nubes privadas o entornos de nube híbrida. Una de sus ventajas principales es que funciona en varios tipos de infraestructura.
Funcionamiento de Docker
Docker se puede usar como un tiempo de ejecución de contenedores organizado mediante Kubernetes. Cuando Kubernetes programa un pod en un nodo, el kubelet que se ejecuta en él indica a Docker que inicie los contenedores especificados.
A continuación, el kubelet comienza a recopilar ininterrumpidamente la información sobre el estado de esos contenedores desde Docker y la almacena en el plano de control. Docker traslada los contenedores a ese nodo y los inicia y detiene.
La diferencia de utilizar Kubernetes con Docker radica en que un sistema automatizado solicita que Docker realice ciertas acciones, en lugar de que las ejecute el administrador de forma manual en los nodos de todos los contenedores.
La infraestructura propia de Kubernetes
Hoy en día, la mayoría de las implementaciones de Kubernetes que se llevan a cabo en las instalaciones se ejecutan en la infraestructura virtual que se encuentra en uso. La cantidad de implementaciones en servidores dedicados (bare metal) es cada vez mayor, lo cual es la evolución natural de los centros de datos. Kubernetes funciona como la herramienta para gestionar la implementación y el ciclo de vida de las aplicaciones en contenedores. Para administrar los recursos de la infraestructura, se utilizan otras herramientas.
Pero ¿qué sucedería si diseñara el centro de datos, incluso a la capa de infraestructura, desde cero para que incluyera contenedores?
En ese caso, comenzaría directamente con servidores dedicados (bare metal) y almacenamiento definido por el software que implementa y gestiona Kubernetes, para que la infraestructura tuviera la misma capacidad de autoinstalación, autoajuste y autorreparación que los contenedores. Esta es la visión sobre la infraestructura de Kubernetes.
Beneficios que ofrece la infraestructura de Kubernetes
Agilidad en la nube pública y simplicidad en las instalaciones para reducir los problemas entre los desarrolladores y el equipo de operaciones de TI
Aumento de la rentabilidad al no necesitar una capa de hipervisor distinta para ejecutar las máquinas virtuales (VM)
Flexibilidad para que los desarrolladores implementen contenedores, aplicaciones sin servidor y VM de Kubernetes, lo cual permite ajustar las aplicaciones y la infraestructura
Capacidad de ampliación de la nube híbrida con Kubernetes como capa común en las instalaciones y las nubes públicas
Elementos que utiliza Red Hat para hacer realidad la infraestructura de Kubernetes
Red Hat OpenShift
Red Hat OpenShift ofrece funciones para la automatización integral con los operadores de Kubernetes, que automatizan la instalación y la gestión del ciclo de vida de la infraestructura que no pertenece al organizador de contenedores.
Red Hat OpenShift Data Foundation
Red Hat OpenShift Data Foundation proporciona almacenamiento preparado de forma dinámica con el operador de almacenamiento Rook para Kubernetes.
Virtualización propia de los contenedores
La virtualización propia de los contenedores en Red Hat OpenShift posibilita el funcionamiento de las máquinas virtuales en Kubernetes. Se basa en el proyecto de la comunidad open source upstream conocido como KubeVirt.
Metal3
Metal3 es un proyecto upstream para implementar y gestionar el ciclo de vida de los servidores dedicados (bare metal) de forma totalmente automatizada mediante el uso de Kubernetes.
Motivos para utilizar Kubernetes
Kubernetes le permite distribuir y gestionar las aplicaciones heredadas, desarrolladas en la nube y en contenedores, así como aquellas que se rediseñan con una estructura de microservicios.
Es necesario que el equipo de desarrollo pueda diseñar aplicaciones y servicios nuevos con rapidez para satisfacer las necesidades cambiantes de la empresa. El desarrollo en la nube comienza con los microservicios en contenedores, lo cual agiliza el proceso y facilita la transformación y la mejora de las aplicaciones actuales.
Vea esta serie de webinars para conocer las opiniones de los especialistas que lo ayudarán a establecer la plataforma de datos en Kubernetes empresarial que necesita para diseñar, ejecutar, implementar y modernizar las aplicaciones.
El desarrollo de las aplicaciones con Kubernetes
Las aplicaciones de producción abarcan varios contenedores, los cuales deben implementarse en diversos hosts de servidores. Kubernetes ofrece las funciones de organización y gestión que permiten implementar los contenedores según sea necesario para estas cargas de trabajo.
El sistema de organización de esta plataforma le permite diseñar servicios de aplicaciones que abarquen varios contenedores, programar los contenedores en un clúster, ampliarlos y controlar su estado a lo largo del tiempo. Además, posibilita la adopción de medidas efectivas para mejorar la seguridad de la TI.
Kubernetes también debe integrarse con las redes, el almacenamiento, la seguridad, la telemetría y demás servicios para proporcionar una infraestructura integral de contenedores.
Si lo lleva a un entorno de producción y aplicaciones múltiples, resulta evidente que necesita varios contenedores ubicados en el mismo lugar y que funcionen juntos para ofrecer servicios individuales.
Los contenedores de Linux brindan a las aplicaciones basadas en los microservicios una unidad para la implementación de aplicaciones y un entorno de ejecución autónomo que resultan ideales. Además, con los microservicios organizados en contenedores, es más fácil coordinar los servicios, como el almacenamiento, la conexión de red y la seguridad.
Esto multiplica considerablemente la cantidad de contenedores en el entorno y, a medida que se acumulan, aumenta la complejidad.
Kubernetes es la solución para varios de los problemas comunes relacionados con la proliferación de los contenedores, ya que los ordena y reúne en pods. Los pods agregan una capa de abstracción a los contenedores agrupados, así que podrá programar las cargas de trabajo y proporcionar los servicios necesarios, como las conexiones de red y el almacenamiento, para esos contenedores.
Además, Kubernetes lo ayuda a equilibrar la carga en los pods y a garantizar que cuente con la cantidad adecuada de contenedores en ejecución para respaldar las cargas de trabajo.
La implementación correcta de Kubernetes y el uso de otros proyectos open source, como Open vSwitch, OAuth y SELinux, le permitirán organizar las distintas partes de la infraestructura de contenedores.
Caso práctico: diseño de una plataforma de nube para ofrecer servicios bancarios innovadores
Emirates NBD, uno de los bancos más importantes de los Emiratos Árabes Unidos (EAU), buscaba una base resistente y adaptable para la transformación digital. El banco lidiaba con un sistema de implementación lento y un entorno de TI complejo. Para configurar un servidor, necesitaban hasta dos meses y demoraban más de seis meses en realizar cambios en las aplicaciones monolíticas de gran tamaño.
Optaron por Red Hat OpenShift Container Platform para organizar, integrar y gestionar los contenedores, y así crearon Sahab, la primera nube privada de un banco de Oriente Medio que se ejecuta según sea necesario. Sahab ofrece aplicaciones, sistemas y otros recursos para el desarrollo integral, desde la implementación hasta la producción, a través de un modelo de tecnología como servicio.
Gracias a la plataforma nueva, Emirates NBD mejoró la colaboración entre los equipos internos y con los partners utilizando interfaces de programación de aplicaciones (API) y microservicios. Además, el banco adoptó prácticas de desarrollo ágil y de DevOps que le permitieron acortar los ciclos de actualización y lanzamiento de las aplicaciones.
Los contenedores tienen mucho más que ofrecer.
Enfoque de DevOps compatible con Kubernetes
El desarrollo de las aplicaciones modernas requiere procesos diferentes a los enfoques del pasado. DevOps permite llevar una idea de la etapa de desarrollo a la de implementación más rápido.
En esencia, DevOps se basa en la automatización de las tareas operativas de rutina y la estandarización de los entornos en todo el ciclo de vida de una aplicación. Los contenedores respaldan un entorno unificado para el diseño, la distribución y la automatización de las aplicaciones, y facilitan su traslado entre los entornos de desarrollo, de prueba y de producción.
Uno de los principales resultados de la adopción de DevOps es un canal de integración e implementación continuas (CI/CD). La CI/CD le permite distribuir las aplicaciones a los clientes con frecuencia y validar la calidad del software con una intervención humana mínima.
La gestión del ciclo de vida de los contenedores con Kubernetes y el enfoque de DevOps permite adaptar el desarrollo de software y las operaciones de TI para respaldar el canal de CI/CD.
Con las plataformas adecuadas, tanto dentro como fuera del contenedor, puede aprovechar mejor los cambios que implementó en la cultura y en los procesos.
Uso de Kubernetes en la producción
Esta plataforma es de open source, así que no hay ninguna estructura de soporte formalizada en torno a esta tecnología, o al menos ninguna a la que podría confiarle su empresa.
Si tuviera inconvenientes al implementar Kubernetes mientras se ejecuta en la producción, ni sus clientes ni usted se sentirían satisfechos.
Imagine que Kubernetes es el motor de un automóvil. El motor puede funcionar de por sí, pero solo pasa a formar parte de un vehículo funcional cuando se conecta a la transmisión, los ejes y las ruedas. La mera instalación de Kubernetes no basta para obtener una plataforma para la producción.
Para que sea totalmente funcional, se debe agregar otros elementos, como la autenticación, las redes, la seguridad, la supervisión, la gestión de los registros y otras herramientas.
Allí es donde entra en juego Red Hat OpenShift, que representa el vehículo completo.
Red Hat OpenShift es la plataforma de Kubernetes para las empresas. Incluye todos los recursos tecnológicos adicionales que convierten a Kubernetes en una herramienta sólida y viable para la empresa, como los registros, las redes, la telemetría, la seguridad, la automatización y los servicios.
Incorpora al organizador de contenedores como uno de los elementos centrales de la plataforma, y Cloud Native Computing Foundation la ofrece como distribución certificada de Kubernetes.
Gracias a Red Hat OpenShift Container Platform, los desarrolladores pueden crear aplicaciones nuevas en contenedores, alojarlas e implementarlas en la nube con la capacidad de ajuste, la organización y el control necesarios para convertir una idea brillante en un nuevo negocio, en poco tiempo y sin complicaciones.
Utilice la versión de prueba gratuita de 60 días de Red Hat OpenShift para automatizar las operaciones de los contenedores.