Kubernetes es una herramienta de gestión de contenedores de código abierto que automatiza la implementación de contenedores, el escalado y desescalado de contenedores y el equilibrio de carga de contenedores (también llamada herramienta de orquestación de contenedores). Está escrito en Golang y tiene una gran comunidad porque primero fue desarrollado por Google y luego donado a CNCF (Cloud Native Computing Foundation). Kubernetes puede agrupar ‘n’ cantidad de contenedores en una unidad lógica para administrarlos e implementarlos fácilmente. Funciona de manera brillante con todos los proveedores de nube, es decir, pública, híbrida y local.
Kubernetes es una plataforma de código abierto que administra contenedores Docker en forma de clúster. Junto con la implementación y el escalado automatizados de los contenedores, brinda reparación al reiniciar automáticamente los contenedores fallidos y reprogramarlos cuando mueren sus hosts. Esta capacidad mejora la disponibilidad de la aplicación.
Características de Kubernetes –
- Programación automatizada : Kubernetes proporciona un programador avanzado para lanzar contenedores en los Nodes del clúster. Realiza la optimización de recursos.
- Capacidades de autocuración : proporciona reprogramación, reemplazo y reinicio de los contenedores que están muertos.
- Implementaciones y reversiones automatizadas : admite implementaciones y reversiones para el estado deseado de la aplicación en contenedores.
- Escalamiento horizontal y equilibrio de carga : Kubernetes puede escalar hacia arriba y hacia abajo la aplicación según los requisitos.
Kubernetes contra Docker
Enjambre Docker | Kubernetes |
---|---|
Sin escalado automático | Escalado automático |
¿Auto Load-Balance | Configure manualmente sus ajustes de Equilibrio de carga |
Realiza actualizaciones continuas de los contenedores de inmediato. | K8S realiza actualizaciones continuas de Pods en su conjunto |
Comparta volúmenes de almacenamiento con cualquier otro contenedor | Comparta volúmenes de almacenamiento entre múltiples contenedores dentro de los mismos pods |
Utiliza herramientas de terceros como ELK | K8S proporciona herramientas integradas para el registro y la supervisión |
Arquitectura de Kubernetes
Kubernetes sigue la arquitectura cliente-servidor donde tenemos el maestro instalado en una máquina y el Node en máquinas Linux separadas. Sigue el modelo masterslave, que utiliza un maestro para administrar contenedores Docker en varios Nodes de Kubernetes. Un maestro y sus Nodes controlados (Nodes de trabajo) constituyen un «clúster de Kubernetes» . Un desarrollador puede implementar una aplicación en los contenedores docker con la ayuda del maestro de Kubernetes.
1. Componentes del Node principal de Kubernetes:
El maestro de Kubernetes es responsable de administrar todo el clúster, coordina todas las actividades dentro del clúster y se comunica con los Nodes trabajadores para mantener Kubernetes y su aplicación en ejecución. Este es el punto de entrada de todas las tareas administrativas. Cuando instalamos Kubernetes en nuestro sistema, tenemos cuatro componentes principales de Kubernetes Master que se instalarán. Los componentes del Node maestro de Kubernetes son:
a.) Servidor API : el servidor API es el punto de entrada para todos los comandos REST utilizados para controlar el clúster. Todas las tareas administrativas las realiza el servidor API dentro del Node maestro. Si queremos crear, eliminar, actualizar o mostrar un objeto de Kubernetes, debe pasar por este servidor de API. El servidor de API valida y configura los objetos de API, como puertos, servicios, replicación, controladores e implementaciones, y es responsable de exponer las API para cada operación. Podemos interactuar con estas API usando una herramienta llamada kubcetl .
‘kubcetl’ es un binario de lenguaje go muy pequeño que básicamente se comunica con el servidor API para realizar cualquier operación que emitamos desde la línea de comandos. Es una interfaz de línea de comandos para ejecutar comandos en clústeres de Kubernetes.
b.) Programador : es un servicio en maestro responsable de distribuir la carga de trabajo. Es responsable de rastrear la utilización de la carga de trabajo de cada Node trabajador y luego colocar la carga de trabajo en la que los recursos están disponibles y pueden aceptar la carga de trabajo. El programador es responsable de programar los pods en los Nodes disponibles según las restricciones que mencione en el archivo de configuración y programe estos pods en consecuencia. El programador es responsable de la utilización de la carga de trabajo y de la asignación del módulo al nuevo Node.
c.) Gerente de Contraloría– También conocido como controladores. Es un demonio que se ejecuta en un bucle sin terminación y es responsable de recopilar y enviar información al servidor API. Regula el clúster de Kubernetes mediante la realización de funciones de estilo de vida, como la creación de espacios de nombres y las recolecciones de elementos no utilizados de eventos del ciclo de vida, la recolección de elementos no utilizados de pod terminados, la recolección de elementos no utilizados eliminados en cascada, la recolección de elementos no utilizados de Nodes y muchos más. Básicamente, el controlador observa el estado deseado del clúster si el estado actual del clúster no cumple con el estado deseado, entonces el lazo de control toma los pasos correctivos para asegurarse de que el estado actual sea el mismo que el del estado deseado. Los controladores clave son el controlador de replicación, el controlador de punto final, el controlador de espacio de nombres y el controlador de cuentas de servicio.
d.) etcd : es una base de datos ligera distribuida de clave-valor. En Kubernetes, es una base de datos central para almacenar el estado actual del clúster en cualquier momento y también se utiliza para almacenar los detalles de configuración, como subredes, mapas de configuración, etc. Está escrito en el lenguaje de programación Go.
2. Componentes del Node trabajador de Kubernetes:
El Node Worker de Kubernetes contiene todos los servicios necesarios para administrar la red entre los contenedores, la comunicación con el Node maestro y asignar recursos a los contenedores programados. Los componentes del Node Worker de Kubernetes son:
a.) Kubelet : es un agente de Node principal que se comunica con el Node maestro y se ejecuta en cada Node trabajador dentro del clúster. Obtiene las especificaciones de los pods a través del servidor API y ejecuta el contenedor asociado con los pods y se asegura de que los contenedores descritos en los pods estén funcionando y en buen estado. Si kubelet detecta algún problema con los pods que se ejecutan en los Nodes trabajadores, intenta reiniciar el pod en el mismo Node y, si el problema está relacionado con el propio Node trabajador, el Node maestro de Kubernetes detecta la falla del Node y decide volver a crear los pods en el otro Node sano.
b.) Kube-Proxy : es el componente de red central dentro del clúster de kubernetes. Es responsable de mantener toda la configuración de la red. Kube-Proxy mantiene la red distribuida en todos los Nodes, todos los pods y en todos los contenedores y también expone los servicios en todo el mundo exterior. Actúa como proxy de red y equilibrador de carga para un servicio en un solo Node trabajador y administra el enrutamiento de red para paquetes TCP y UDP. Escucha el servidor API para cada creación y eliminación de puntos finales de servicio, por lo que para cada punto final de servicio configura la ruta para que pueda llegar a él.
c.) Pods : Pod es un grupo de contenedores que se implementan juntos en el mismo host. Con la ayuda de los pods, podemos implementar varios contenedores dependientes juntos para que actúe como un envoltorio alrededor de estos contenedores para que podamos interactuar y administrar estos contenedores principalmente a través de los pods.
d.) ventana acoplable– Docker es la plataforma de creación de contenedores que se utiliza para empaquetar su aplicación y todas sus dependencias juntas en forma de contenedores para garantizar que su aplicación funcione sin problemas en cualquier entorno que pueda ser de desarrollo, prueba o producción. Docker es una herramienta diseñada para facilitar la creación, implementación y ejecución de aplicaciones mediante el uso de contenedores. Docker es la plataforma de contenedores de software líder en el mundo. Fue lanzado en 2013 por una empresa llamada Dotcloud. Está escrito en lenguaje Go. Han pasado solo seis años desde que se lanzó Docker, pero las comunidades ya se han cambiado a él desde las máquinas virtuales. Docker está diseñado para beneficiar tanto a los desarrolladores como a los administradores de sistemas, lo que lo convierte en parte de muchas strings de herramientas de Devops. Los desarrolladores pueden escribir código sin preocuparse por el entorno de prueba y producción. Los administradores de sistemas no necesitan preocuparse por la infraestructura, ya que Docker puede escalar y reducir fácilmente la cantidad de sistemas. Docker entra en juego en la etapa de implementación del ciclo de desarrollo de software.