Conceptos asociados a Kubernetes, explicados
Kubernetes es la plataforma establecida como estándar de facto para la orquestación de contenedores de código abierto. Es una de las principales herramientas en el desarrollo moderno con contenedores, ya que ayuda a mitigar los retos y problemas inherentes a estos. Existen una serie de conceptos básicos que conviene tener a mano y entender bien para poder sacar el mejor partido de esta tecnología. En este artículo te presentamos los más relevantes a modo de breve glosario sobre Kubernetes.
¿Qué es un clúster?
Un clúster no es más que un grupo de máquinas virtuales relacionadas. En él tenemos dos tipos de nodos:
- Nodo maestro: el nodo o nodos de gestión del clúster. Es a dónde se envían todas las instrucciones para el despliegue
- Nodo de trabajador: son aquellos nodos en los que se ejecutan los microservicios
Estos son algunos de los componentes importantes del nodo maestro, en cuanto a control:
- Servidor API, que gestiona toda la comunicación de un clúster
- El «scheduler», que decide la ubicación de los pods
- El control manager, que gestiona los despliegues y ReplicaSet (ahora veremos qué significan estos conceptos)
- etcd, la base de datos distribuida que almacena el estado del clúster en todo momento
¿Qué es un Pod?
Un Pod es la unidad más pequeña que se puede desplegar en Kubernetes, y representa una instancia de un microservicio, un conjunto de contenedores en ejecución. A cada Pod se le asigna una dirección IP efímera.
Se configura normalmente para ejecutar un único contenedor primario, pero también puede ejecutar contenedores secundarios opcionales que añaden características suplementarias. Los Pods se gestionan por un Deployment.
¿Qué es un ReplicaSet?
La misión de ReplicaSet es mantener en todo momento un número determinado de Pods en ejecución en el clúster.
Si desplegamos un determinado microservicio con, por ejemplo, 8 instancias, Kubernetes monitorizará a través de ReplicaSet la «salud» de estos pods. En el caso de que, eventualmente, uno o varios de ellos se desactiven o suceda algo inesperado, ReplicaSet los sustituirá por otros nuevos.
¿Qué es un Deployment?
El papel de Deployment, o despliegue, es garantizar la flexibilidad a la hora de lanzar nuevas versiones de los microservicios.
Como definición, podemos decir que se trata de un objeto de la API que gestiona una aplicación replicada, normalmente ejecutando Pods sin estado local. Cada réplica está representada por un Pod, y los Pods están distribuidos entre los nodos de un clúster.
Un despliegue representa todas las versiones del microservicio. Si disponemos de una versión de un microservicio y queremos desplegar una nueva versión sin tiempo de inactividad, ahí es donde entra Deployment. Al crear esta nueva versión de un microservicio ya existente, Deployment crearía un nuevo ReplicaSet ella. Por tanto, tendríamos un Deployment representando al microservicio original; un ReplicaSet de esa primera versión; un ReplicaSet de la segunda versión del microservicio.
La operativa normal es que se crea un despliegue para cada microservicio, y se gestionan las nuevas versiones asegurando un tiempo de inactividad cero.
¿Qué es un servicio?
Un servicio es el objeto de la API de Kubernetes que describe cómo se accede a las aplicaciones, como conjunto de Pods, y puede describir puertos y balanceadores de carga (load balancers).
Kubernetes otorga a sus Pods su propia dirección IP y un nombre DNS para un conjunto de ellos, y puede balancear la carga entre ellos. Los Pods de Kubernetes son creados y destruidos para coincidir con el estado del clúster; es decir, no son recursos permanentes y, a través de Deployment se pueden crear y destruir los Pods de manera dinámica.
Esto implica que el conjunto de Pods en ejecución en un momento dado puede ser distinto al que se ejecutan un momento después. ¿Cómo se organiza la comunicación entre pods en un entorno tan dinámico? Esa es la motivación tras los servicios, ya que son una abstracción que define un conjunto lógico de Pods y una política de acceso a ellos. El conjunto de Pods a los que apunta un Servicio se determina mediante lo que se conoce como Selector.
Al igual que tiene su propio lenguaje, Kubernetes tiene sus propias complicaciones. Si te quieres desentender de parte de ellas, los servicios de Managed Kubernetes son tu mejor opción.