Kubernetes es una plataforma de organización de contenedores que automatiza la implementación y escalabilidad de cargas de trabajo en contenedores. Kubernetes se ha ganado la reputación de ser complejo y difícil de manejar. Así es como se combinan los componentes individuales para formar un grupo.
Definición de clúster
Una sola instalación de Kubernetes se denomina "clúster". Hay uno o más nodos dentro del clúster para ejecutar los contenedores. A Nodo es una representación de una máquina física que se ha unido al clúster.
Kubernetes también tiene una Plan de control superficie. Funciona independientemente de los nodos trabajadores. El plano de control es con lo que interactúas. Expone la API de Kubernetes y es responsable de administrar los nodos trabajadores. Por lo general, no manipula directamente los nodos y sus cargas de trabajo.
La instrucción de Kubernetes para crear una carga de trabajo comienza con una llamada a la API al plano de control. Luego, el plan de inspección determina los nodos en los que se deben programar los contenedores. No importa cuántos nodos tenga, siempre habrá un solo plano de control dentro de su clúster.
Papel del plan de control
De manera más general, el plano de control es responsable de la gestión general del clúster. Cualquier operación que pueda afectar a varios nodos o la infraestructura del clúster será manejada por el plano de control.
El plan de control consta de varios componentes independientes. Juntos, son responsables de administrar la configuración del clúster, ejecutar y escalar las cargas de trabajo y reaccionar a los eventos dentro del clúster (como un nodo que se queda sin memoria).
El núcleo del plan de control es cubo-apiserver. Este componente proporciona la API HTTP de Kubernetes que utiliza a través de herramientas como Kubectl y Helm. La API es la forma en que interactúa con su clúster. También lo utilizan otros componentes del clúster, como los procesos de trabajo de nodo, para transmitir información al plano de control.
Los recursos de su clúster, como pods, servicios y trabajos, se administran individualmente "Controladores. "Los controladores monitorean sus recursos para la salud y preparación. También identifican los cambios que se han solicitado y luego toman medidas para migrar el estado actual al estado deseado.
Los controladores son administrados en conjunto por administrador-controlador-kube. Este componente del plano de control inicia y ejecuta los controladores individuales. Este proceso siempre estará en ejecución. Si alguna vez falla, los cambios realizados a través del servidor API no se identificarán y nunca se producirá ningún cambio de estado.
Otro componente crítico del plan de control es programador de kube. El planificador es responsable de asignar pods a los nodos. La planificación generalmente requiere la consideración de varios parámetros diferentes, como el uso actual de recursos de cada nodo y cualquier restricción que haya aplicado en su manifiesto.
El programador evaluará la idoneidad de cada nodo y luego delegará el pod para que se ejecute en el nodo más apropiado. Si la disponibilidad del nodo cambia o se requieren múltiples réplicas de un pod, el programador tomará medidas para reprogramar la carga de trabajo en consecuencia.
El plano de control completo generalmente se ejecuta en un solo nodo dentro del clúster. ES técnicamente posible para extender el plano de control a través de múltiples nodos. Esto ayuda a maximizar la disponibilidad.
Normalmente, la pérdida del plano de control le impide administrar su clúster, ya que la API y las funciones de programación se desconectan. Sin embargo, los pods de los nodos trabajadores seguirán funcionando: intentarán volver a conectarse periódicamente al plano de control.
Comunicación entre los nodos y el plano de control.
Kubernetes mantiene un bidireccional canal de comunicación entre los nodos y el plano de control.
Se requiere comunicación para que el plano de control pueda instruir a los nodos para que creen nuevos contenedores. En la dirección opuesta, los nodos deben proporcionar datos sobre su disponibilidad (como estadísticas de uso de recursos) al plano de control. Esto garantiza que Kubernetes pueda tomar decisiones informadas al planificar contenedores.
Todos los nodos trabajadores ejecutan una instancia de kubelet. Esta es una utilidad de agente responsable de mantener la comunicación con el plano de control de Kubernetes. Kubelet también supervisa continuamente los contenedores que ejecuta el nodo. Notificará al plan de inspección si un contenedor cae en un estado insalubre.
Cuando un nodo necesita enviar datos al plano de control, Kubelet se conecta al servidor de la API del plano de control. Esto usa la misma interfaz HTTPS a la que se conecta a través de herramientas como kubectl. Kubelet está preconfigurado con credenciales que le permiten autenticarse en Kubernetes.
El tráfico desde el plano de control a los nodos se maneja nuevamente usando kubelet. Kubelet expone su punto final HTTPS al que puede acceder el plano de control. Este punto final acepta nuevos manifiestos de contenedores, que luego Kubelet usa para regular los contenedores en ejecución.
¿Qué más están ejecutando los nodos?
Kubelet no es el único binario que un nodo de Kubernetes necesita para ejecutarse. También encontrará una instancia de proxy de kube en cada nodo. Este es responsable de configurar el sistema de red del nodo para cumplir con los requisitos de carga de trabajo del contenedor.
Kubernetes tiene el concepto de "Servicios," que exponen varios pods como una sola identidad de red. Es kube-proxy el que convierte las definiciones de servicio en las reglas de red que proporcionan el acceso solicitado.
kube-proxy configura la infraestructura de red del sistema operativo para exponer los servicios creados por kubelet. El reenvío de tráfico es manejado por la capa de filtrado de paquetes a nivel del sistema operativo o por el propio kube-proxy.
Además de kubelet y kube-proxy, los nodos también deben tener un tiempo de ejecución de contenedor disponible. El tiempo de ejecución del contenedor es responsable de extraer las imágenes y ejecutar realmente los contenedores. Kubernetes admite cualquier tiempo de ejecución que implemente sus propios archivos Interfaz de tiempo de ejecución del contenedor específico. Los ejemplos incluyen containerd y CRI-O.
Conclusión
Kubernetes requiere mucha terminología. Dividir los grupos en sus partes constituyentes puede ayudarlo a apreciar cómo se conectan los componentes individuales.
El Plano de Control se ubica sobre todos los Nodos y es responsable de administrar las operaciones del clúster. Los nodos se muestran mejor como iguales directamente debajo del plano de control. Existe una comunicación continua de ida y vuelta entre los nodos y el plano de control. Como usuario, interactúas con el plano de control solo a través del servidor API.
El plano de control es, por tanto, la pieza central de su grupo. Por lo general, no interactúas directamente con los nodos. En su lugar, envía las instrucciones al plan de control, que luego crea los horarios adecuados para satisfacer su solicitud. Las cargas de trabajo se programan en los nodos solo cuando el plano de control envía un manifiesto de contenedor a una de las instancias de kubelet disponibles.
Cuando un nodo recibe un nuevo manifiesto, utilizará el tiempo de ejecución del contenedor para extraer la imagen adecuada e iniciar una nueva instancia de contenedor. kube-proxy luego modificará la configuración de red para configurar los servicios y hacer que la carga de trabajo sea accesible. Kubelet retransmite los datos de estado del nodo a Kubernetes, lo que le permite tomar medidas para reprogramar los pods si los recursos del nodo son limitados.
Descubre más contenido