¿Cómo funciona la arquitectura de red de Kubernetes?
La Arquitectura de Kubernetes está formada por dos (2) grandes partes:
Nodos master: Que son el cerebro de Kubernetes.
Nodos minions: Que son los nodos de trabajo.
Para poder comunicarse con Kubernetes se puede realizar de dos (2) formas y ambas son utilizando la API que expone Kubernetes:
UI interfaz de usuario.
CLI línea de comandos.
Ambas se comunican a través de la Api, en donde se ejecutan las diferentes órdenes.
Kubernetes es una plataforma de orquestación que busca un modelo declarativo a donde no se le indica qué hacer sino que se le expresa este es el estado deseado del cluster, esto me gustaría lograr y Kubernetes entra en un ciclo de reconciliación constante hasta llegar a ese estado final.
Registro de Imágenes: Nos permite justamente al momento de ejecutar un contenedor que se basa en una imagen y que no se pueda acceder al contenedor, lo que hacen dichos nodos (registro de imagen) es conectarse a un registro de imágenes porque no se tiene la imagen y descargar la misma.
¿Qué pasa cuando un Nodo Master muere?
Hay dos (2) componentes importantes de Kubernetes que nos permiten sobrellevar la situación:
Raft Consensus (Consenso de arbitraje): Kubernetes está fundamentado en este algoritmo que permite tener varios master en mi cluster y cuando un máster no responde, muere, etc. Nos permite que otro nodo máster tome el leadership (liderazgo) y que nuestras aplicaciones puedan seguir funcionando, este proceso se realiza de forma automática.
Levantar el nodo master: Para levantarlo se deben tener backups del clúster, se debe tener un claro conocimiento de cómo agregar el nodo al clúster para avanzar.
El que no exista un Nodo Master no significa que nuestros servicios dejan de funcionar sino que no se puede enviarle comandos al cluster, ejecutar un pod, hacer un nuevo deploy, entre otros. Pero todo el resto de la arquitectura seguirá funcionando.
Está una vista más a detalle de la arquitecta Kubernetes a donde se puede observar el nodo master más desagregado y que cuenta con cuatro (4) elementos:
API Server: Es a lo que todo se conecta, los agentes, los nodos, cuando se utiliza un comando (CLI), un dashboard, etc; todo se conecta al API Server porque al ser el cerebro del cluster es el que entiende que está sucediendo y es cuando un nodo máster se cae justamente se pierde, es lo único que se conecta al ETCD que es una base de datos altamente disponible con la finalidad que si el nodo se cae el cluster no quede fuera de servicio.
Scheduler: Cuando se debe crear un tipo de trabajo como un Pod, etc. Se encarga de asignar el Pod al nodo que corresponde además de administrar los flujos de trabajo, revisando las restricciones y recursos disponibles.
Controller Manager: Es un proceso que está en un ciclo de reconciliación constante, buscando llegar a un estado deseado (utilizando un sistema declarativo y no imperativo) con el que se busca darle instrucciones a Kubernetes, tipos de controller manager:
Replica Manager.
Deployment Manager.
Service Manager.
Etcd: Key value store, es lo que permite que sea altamente disponible.
Otros componentes:
Container Runtime: Generalmente suele ser Docker, en versiones 1.14 de Kubernetes tienen por default Container D, que es producto del core de Docker.
Componentes importantes que viven en los nodos:
Kubelet: Agente de Kubernetes, se conecta con el control play y le dice soy este nodo y pregunta qué recurso (pods, contenedores ) debo ejecutar, el Scheduler asigna el pod y contendores al nodo, el agente (Kubelet) realiza esta comunicación constantemente con el control vía API server consultando qué recurso ejecutar, recibe el recurso y está constantemente realizando este ciclo. Actualiza constantemente el Control Play con el estado de los contenedores, monitorea los pods constantemente para saber si están vivos, los recursos disponibles, etc; le comunica constantemente al scheduler vía API Server el estado de los mismos.
Kube-proxy: Se encarga de balancear el tráfico que corre en nuestros contenedores/servicios. UNa vez que llega el request se encarga de decidir a que Pod y contenedor debe ir.
Nodos = Minions
Todos los nodos y masters están conectados a una red física para tener comunicación entre sí.