Visión general de Kubernetes

Vamos a ver una visión general de Kubernetes, también conocido como K8s. Fue construido por Google en base a su experiencia en la ejecución de contenedores. Ahora es un proyecto de código abierto y es una de las mejores y más populares tecnologías de organización de contenedores. La página oficial es https://kubernetes.io/

Contenedores y su organización.

Para entender qué son los contenedores nos vamos a centrar en los más populares, los contenedores de Docker. Para aprender más sobre Docker puede acudir a los artículos sobre este tema que hay en este blog:

Introducción a Docker: https://www.statdeveloper.com/primeros-pasos-con-docker/

Imagenes de Docker: https://www.statdeveloper.com/creacion-de-imagenes-para-docker/

Docker Compose: https://www.statdeveloper.com/docker-compose/

Automatización de despliegue en Docker: https://www.statdeveloper.com/automatizacion-de-despliegues-en-docker/

En resumen, podemos decir que Docker es un proyecto para automatizar el despliegue de aplicaciones dentro de contenedores. Proporciona una capa adicional de abstracción y automatización de aplicaciones en múltiples sistemas operativos.​

Mediante el uso de contenedores, los recursos pueden ser aislados y restringidos. Permite otorgar a los procesos la capacidad de tener una visión propia del sistema operativo con su propio identificador. Aisla la estructura del sistema de archivos, y las interfaces de red. Todos los contenedores ejecutándose en un mismo Host comparten el mismo núcleo, pero cada contenedor está restringido a usar una cantidad definida de recursos como CPU, memoria y E / S.

Gestión de despliegues

vision general de kubernetesTradicionalmente, los desarrolladores desarrollaron aplicaciones y luego las entregan a los DevOps para implementarlo y administrarlo en entornos de producción. Lo hacen proporcionando un conjunto de instrucciones, como información sobre cómo se deben configurar los hosts, qué requisitos previos se deben instalar en el host y cómo se deben configurar las dependencias, etc.

El equipo de operaciones utiliza esta guía para configurar la aplicación. Dado que el equipo de operaciones no desarrolló la aplicación, suelen tener dificultades para configurarla. Cuando encuentran un problema, trabajan con los desarrolladores para resolverlo.

Con Docker, una parte importante del trabajo involucrado en la configuración de la infraestructura ahora está en manos de los desarrolladores. La guía que los desarrolladores crearon ahora se puede agrupar fácilmente en un archivo acoplable para crear una imagen para las aplicaciones. Esta imagen ahora se puede ejecutar en cualquier plataforma de contenedor y se garantiza que se ejecutará de la misma manera en todas partes.

El equipo de operaciones ahora puede usar la imagen para implementar la aplicación. Dado que la imagen ya estaba funcionando cuando el desarrollador la creó y las operaciones no la están modificando, continúa funcionando de la misma manera cuando se implementa en producción.

Visión general de la Estructura en Kubernetes

Para ver la estructura de Kubernetes vamos a empezar con los nodos. Un nodo es una máquina, física o virtual en la que está instalado Kubernetes. Un nodo es una máquina de trabajo y ahí es donde Kubernetes lanzará los contenedores. Si el nodo en el que se ejecuta la aplicación falla, la aplicación se cae. Por lo tanto, es mejor tener más de un nodo. Un clúster es un conjunto de nodos agrupados. De esta manera, si falla un nodo, todavía se puede acceder a la aplicación desde los otros nodos. Además, tener múltiples nodos ayuda a compartir la carga.

Para administrar el clúster de nodos, almacenar la información sobre los miembros del clúster, monitorizarlos o mover la carga de trabajo cuando un nodo falla existe el Maestro. El maestro es otro nodo con Kubernetes que está configurado para vigilar los nodos en el clúster y es responsable de la orquestación real de los contenedores en los nodos de trabajo.

Componentes

Cuando se instala Kubernetes en un sistema, se instalan varios componentes. Un servicio Kubelet, un servidor API y un servicio etcd,

API Server: El servidor API actúa como el front-end para Kubernetes. Los usuarios, los dispositivos de administración, las interfaces de línea de comandos, todos hablan con el servidor API para interactuar con el clúster de Kubernetes.

etcd Key-value store: El almacén distribuido de claves de valores etcd almacena todos los datos utilizados para administrar el clúster. Cuando se tienen múltiples nodos y múltiples Maestros en un clúster, etcd almacena toda esa información en todos los nodos del clúster de manera distribuida. Etcd es responsable de implementar bloqueos dentro del clúster para garantizar que no haya conflictos entre los Maestros.

Scheduler: El Programador es responsable de distribuir el trabajo o los contenedores en varios nodos. Busca contenedores recién creados y los asigna a nodos.

Controllers: Los controladores son el cerebro detrás de la organización. Son responsables de ver y responder cuando los nodos, contenedores o puntos finales caen. Los controladores toman decisiones para traer nuevos contenedores en tales casos.

Container runtime: Es el software subyacente que se utiliza para ejecutar contenedores. En nuestro caso vamos a utilizar Docker. Pero también hay otras opciones como Rocket o CRI-O.

Kubelet: Es el agente que se ejecuta en cada nodo del clúster. Es el agente responsable de asegurarse de que los contenedores se ejecuten en los nodos como se esperaba.

Distribución en la visión general de Kubernetes.

Hemos visto que hay dos tipos de servidores (Master y Worker)  y un conjunto de componentes que componen Kubernetes.

En el nodo de trabajo es donde se alojan los contenedores y para ejecutar los contenedores necesitamos que se instale el Container runtime (Docker). También tiene el agente Kubelet que es el encargado de interactuar con un maestro.

El servidor maestro tiene el API server y eso es lo que lo hace maestro. Los trabajadores usan este componente para enviar información y recoger las acciones solicitadas por el maestro. Toda la información recopilada se almacena en el almacén de valores clave etc key-value store en el maestro. El maestro también tiene el Controller y el Scheduler.

Utilidades de línea de comando

También vamos a ver un poco sobre una de las utilidades de línea de comando conocida como kube o kubectl. La herramienta kubectl se usa para implementar y administrar aplicaciones en un clúster de Kubernetes. Para obtener información del clúster, para obtener el estado de otros nodos en el clúster y para administrar muchas otras cosas. El comando “kubectl run <aplicacion>” se usa para implementar una aplicación en el clúster. El comando “kubectl cluster-info” se usa para ver información sobre el clúster y el comando “kubectl get-nodes” se usa para enumerar todos los nodos que forman parte del clúster.