Descripción general
Basta con conocer los conceptos básicos de Kubernetes para saber que es una plataforma open source de organización de los contenedores diseñada para ejecutar aplicaciones y servicios distribuidos según sea necesario. Pero probablemente no sepa qué elementos la conforman ni cómo interactúan entre ellos.
Revisemos rápidamente los principios de diseño de Kubernetes, y analicemos cómo funcionan sus diferentes elementos.
Principios de diseño de Kubernetes
Tal como se explica en los detalles de implementación de Kubernetes, el diseño de un clúster con esta tecnología se basa en tres principios.
Un clúster de Kubernetes debe tener las siguientes características:
- Seguridad: debe seguir las prácticas recomendadas de seguridad más recientes.
- Facilidad de uso: debe poder operarse con algunos comandos sencillos.
- Capacidad de expansión: no debe favorecer a un solo proveedor. Además, debe poder personalizarse desde un archivo de configuración.
¿Cuáles son los elementos que conforman un clúster de Kubernetes?
Una implementación de Kubernetes en funcionamiento se denomina clúster. Lo puede visualizar en dos partes: el plano de control y las máquinas informáticas o 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.
En este diagrama, se muestra la relación que existe entre las partes de un clúster de Kubernetes:
¿Qué ocurre en el plano de control de Kubernetes?
Plano de control
Comencemos por la pieza central del clúster de Kubernetes: el plano de control. En él se encuentran los elementos de Kubernetes que controlan el clúster, junto con los datos sobre su estado y configuración. Los elementos principales de Kubernetes tienen la importante tarea de garantizar que los contenedores se ejecuten en cantidades suficientes y con los recursos necesarios.
El plano de control está en contacto permanente con las máquinas informáticas y garantiza que el clúster se ejecute según la configuración que usted haya establecido.
kube-apiserver
¿Necesita interactuar con su clúster de Kubernetes? Utilice la API de Kubernetes, que es el frontend del plano de control de esta plataforma y se encarga de gestionar las solicitudes internas y externas. El servidor de la API determina si una solicitud es válida, y en ese caso la procesa. Puede acceder a la API con llamadas de REST, con la interfaz de la línea de comandos kubectl o con otras herramientas de la línea de comandos, como kubeadm.
kube-scheduler
¿Su clúster está en buen estado? Si se necesitaran clústeres nuevos, ¿dónde sería más adecuado colocarlos? De esto se encarga el programador de Kubernetes.
Para ello, debe tener en cuenta los recursos que necesita un pod, como CPU o memoria, junto con el estado del clúster. Luego, programa el pod en un nodo informático adecuado.
kube-controller-manager
Los controladores son los que realmente ejecutan el clúster. El controlador y administrador de Kubernetes contiene varias funciones de este tipo en una. El controlador realiza una consulta al programador y se asegura de que se esté ejecutando la cantidad correcta de pods. Si uno de ellos se cae, otro controlador lo percibe y responde al problema. Un controlador conecta los servicios a los pods, de manera que las solicitudes van a los extremos correctos. Además, hay algunos que permiten crear cuentas y tokens de acceso a las API.
etcd
Los datos de configuración y la información sobre el estado del clúster se alojan en la etcd, una base de datos de almacenamiento clave-valor. Este almacén distribuido y con tolerancia a los fallos está diseñado para ser la principal fuente de información del clúster.
¿Qué ocurre en un nodo de Kubernetes?
Nodos
Un clúster de Kubernetes necesita al menos un nodo informático, pero suele tener varios. Los pods se programan y organizan para ejecutarse en ellos. Cuando necesite ampliar la capacidad de su clúster, incorpore más nodos.
Pods
El pod es la unidad más pequeña y sencilla del modelo de objetos de Kubernetes. Representa una instancia única de una aplicación. Cada pod contiene un contenedor o una serie de contenedores con conexión directa, y las opciones que controlan su funcionamiento. Los pods pueden conectarse a un almacenamiento permanente para ejecutar aplicaciones con estado.
Motor de tiempo de ejecución de contenedores
Cada nodo informático posee un motor de tiempo de ejecución de contenedores que posibilita el funcionamiento de estos. Docker es un ejemplo, aunque Kubernetes también admite otros tiempos de ejecución que cumplen con la Open Container Initiative, como rkt y CRI-O.
kubelet
Todos los nodos informáticos contienen una kubelet, es decir, una aplicación muy pequeña que se comunica con el plano de control y que garantiza la ejecución de los contenedores en un pod. Cuando el plano de control necesita que algo suceda en un nodo, la kubelet ejecuta la acción.
kube-proxy
Los nodos informáticos también contienen un kube-proxy, es decir, un proxy de red que facilita los servicios de red de Kubernetes. El kube-proxy administra las comunicaciones de red dentro y fuera del clúster. Para ello, utiliza la capa de filtrado de paquetes del sistema operativo o reenvía el tráfico por cuenta propia.
¿Qué más necesita un clúster de Kubernetes?
Almacenamiento permanente
Además de gestionar los contenedores que ejecutan una aplicación, Kubernetes también puede administrar los datos que esta genera y que están adjuntos a un clúster. La plataforma permite que los usuarios soliciten recursos de almacenamiento sin necesidad de conocer los detalles de la infraestructura subyacente. Los volúmenes permanentes son específicos de un clúster y no de un pod, así que duran más que este último.
Registro de contenedores
Las imágenes de contenedores en las que se basa Kubernetes se almacenan en un registro de contenedores que puede configurar usted o pertenecerle a un tercero.
Infraestructura subyacente
Usted decide si quiere ejecutar Kubernetes en servidores sin sistema operativo, máquinas virtuales, proveedores de nube pública, nubes privadas o entornos de nube híbrida. Una de las principales ventajas de Kubernetes es que funciona en muchos tipos de infraestructura.
Ahora, nadie dijo que es fácil
Esta descripción simplificada de la arquitectura de Kubernetes solo da un panorama general. Para entender los desafíos que supone configurar y proteger un clúster de Kubernetes, hay que considerar cómo se comunican los elementos mencionados entre ellos, y con los recursos y la infraestructura externos.
Este sistema ofrece las herramientas para organizar una aplicación en contenedores de gran tamaño y complejidad, pero usted también debe tomar varias decisiones. Por ejemplo, debe elegir el sistema operativo, el tiempo de ejecución del contenedor, las herramientas de integración/distribución continuas (CI/CD), los servicios de aplicaciones, el almacenamiento y la mayoría de los demás elementos. También tiene que gestionar las funciones, el control de acceso, la arquitectura multiempresa y los ajustes seguros predeterminados. Además, puede optar por ejecutar Kubernetes por su cuenta o trabajar con un proveedor que le brinde una versión compatible.
Esta libertad de elección forma parte de la naturaleza flexible de Kubernetes. Si bien puede ser difícil implementar Kubernetes, la plataforma le ofrece la posibilidad de ejecutar aplicaciones en contenedores según sus propios términos y responder con agilidad a los cambios en la empresa.
Desarrolle aplicaciones en la nube con Kubernetes
Vea esta serie de webinars para conocer la opinión de los especialistas y, así, establecer la plataforma de datos en Kubernetes empresarial que necesita para diseñar, ejecutar, implementar y modernizar las aplicaciones.
¿Por qué conviene elegir Red Hat OpenShift para Kubernetes?
Red Hat es líder y desarrollador activo de la tecnología de contenedores de open source, lo cual incluye a Kubernetes. Además, diseña herramientas fundamentales para proteger, simplificar y actualizar la infraestructura de contenedores de forma automática.
Red Hat® OpenShift® es una distribución empresarial de Kubernetes. Con este producto, los equipos obtienen una plataforma única e integrada para DevOps. Red Hat OpenShift ofrece a los desarrolladores la posibilidad de elegir los lenguajes, los marcos de trabajo, el middleware y las bases de datos, junto con el diseño y la implementación de la automatización a través de la CI/CD para aumentar la productividad. También está disponible una plataforma de servicios de datos y almacenamiento diseñada para los contenedores: Red Hat OpenShift Data Foundation.