Empecemos por los nodos, un nodo puede ser tanto una máquina física como una virtual y es en estos nodos donde instalamos Kubernetes. Si un nodo es la máquina donde conviven los contenedores, un cluster es un grupo de nodos, de este modo, si uno de los nodos falla, nuestra aplicación seguira funcionando y además se comparte la carga entre nodos.
Ahora que tenemos un cluster ¿Quién es el encargado de gestionarlo? ¿Cómo se controlan los nodos? ¿Dónde se almacena la información de los nodos del cluster? Si falla un nodo, ¿Cómo se traslada la carga al resto de nodos? Aquí es donde entra el Master para responder a nuestras preguntas. El master es otro nodo más dentro del cluster con Kubernetes instalado. El master es el encargado de vigirlar el resto de nodos del cluster y de gestionar los contenedores que en él se encuentran.
Cuando se instala Kubernetes en un sistema se están instalando una serie de componentes:
- API Server
- etcd
- kubelet
- Container Runtime
- Controller
- Scheduler
API Server
Podemos decir que es el front-end de Kubernetes. Los usuarios, la gestión de dispositivos, la línea de comandos se comunican con el API para interactura con cluster Kubernetes.
Etcd
Etcd es un storage distribuido de tipo clave/valor usado por Kubernetes para almacenar todos los datos utilizados para gestionar el cluster. Cuando tienes varios nodos, etcd almacena toda la información en todos los nodos de forma distribuida
Scheduler
Se encarga de distribuir el trabajo o contenedores entre los nodos. Busca contenedores nuevos y los asigna a nodos.
Controller
Es el responsable de advertir y responder cuando los nodos o contenedores se caen. Toman las decisiones de poner nuevos contenedores en estos casos.
Container runtime
Este es el software que se encarga de ejecutar los contenedores. Auque existen otras alternativas usaremos Docker como container runtime.
Kubelet
Se ejecuta en cada nodo del cluster y es el responsable de asegurarse que los contenedores se ejecutan como se espera en los nodos.
Hasta ahora tenemos dos tipos de servidores; Master y Worker y un conjunto de componentes que forman Kubernetes. ¿Qué hace a un server maestro o esclavo? El nodo es donde se alojan los contenedores y para ejecutarlos necesitamos que se instale el Container runtime que normalmente será Docker (No tiene por qué ser Docker ya que, existen otras alternativas como Rockeer o CRI-O).
El servidor master tiene el API Server y es precisamente esto lo que lo convierte en Master. En los workers está el kubelt que se encargará de interacturar con el master para proporcionarle la infomación de salud de los contenedores y llevar a cabo las acciones solucitadas por el master.
Toda la información se almacena en el master usando un sistema basado en el popular etcd. El master también tiene el controller y el scheduler.
Hasta aquí hemos visto un poco de como se estructura la arquitectura de un cluster con Kubernetes y que componentes conforman Kubernetes y como se distribuyen.