Arquitectura de Kubernetes
A alto nivel podemos decir que kubernetes se compone de:
- Uno o varios nodos master, parte del control plane.
- Uno o varios nodos worker.
Nodos Master
Estos nodos proveen un entorno en el que ejecutar el control plane. El control plane es el encargado de supervisar el estado del clúster de Kubernetes y dirigir las operaciones que ocurren dentro de él.
Es vital para nuestro clúster que el control plane se mantenga corriendo, puesto que de no ser así, nuestro clúster se expone a una pérdida de servicio por parte de los clientes. Generalmente, en entornos productivos se disponen varios nodos master que garanticen una alta disponibilidad.
Para almacenar el estado y toda la configuración del cluster de kubernetes se emplea etcd. Al igual que en el caso de control plane en entornos productivos se deberán asegurar la existencia de múltiples réplicas para dotar a nuestro clúster de tolerancia a fallos.
Nodos Master: Componentes
Un nodo master corre los siguientes componentes control plane:
- API Server (kube-apiserver). Este API Server intercepta todas las llamadas RESTFul de usuarios, operators y agentes externos, las valida y las procesa. Todas las tareas administrativas son coordinadas por este API.
- Scheduler (kube-scheduler). Asigna pods a nodos en base al estado actual del clúster y los recursos disponibles. Su relevancia es mayor en entornos multinodo donde tiene en cuenta los requisitos de QoS (Quality of Service), reglas affinity y anti-affinity, taints, tolerancias, etc.
- Controller Managers (kube-controller-manager & cloud-controller-manager). Estos componentes regulan el estado del clúster. Comparando el estado actual contra el estado deseado. En base a las diferencias encontradas se lanzan acciones correctivas que permiten llevar el clúster al estado deseado.
- Data Sore (etcd). Esta base de datos es extremadamente consistente. La información se escribe siempre como append. Nunca se actualiza. La información más antigua se va compactando en procesos periódicos que permiten mantener el tamaño de la base de datos bajo control.
Nodos Worker
Sobre ellos corren las aplicaciones cliente. Estas aplicaciones son encapsuladas en Pods controlados por los agentes del control plane que corren en los nodos master.
Nodos worker: Componentes
Un nodo worker corre los siguientes componentes:
- Container runtime. Kubernetes no maneja directamente los contenedores. Esta función es soportada por: Docker, CRI-O, containerd o frakti.
- Node Agent- kubelet. Es un agente que corre en cada nodo worker que se comunica con los componentes del nodo master. Recibe definiciones de pods, principalmente desde el API Server, e interactúa con el container runtime del nodo asociado. Además, monitoriza la salud y los recursos de los nodos que están corriendo.
- Proxy — kube-proxy. Es un agente de red que corre en cada nodo que tiene por misión las actualizaciones dinámicas y el mantenimiento de todas las reglas de red del nodo.
- Addons para DNS, interfaces de usuario, monitorización del cluster y logging.