Directorio de artículos
Introducción a los componentes k8s
Diagrama de arquitectura
Role
- Master: Es la puerta de enlace y eje central del cluster.Su función principal es exponer las interfaces API, rastrear el estado de salud de otros servidores, programar cargas de manera óptima y orquestar la comunicación entre otros componentes . Un solo nodo maestro puede completar todas las funciones, pero considerando el problema del punto único de falla, generalmente se implementan múltiples nodos maestros en un entorno de producción para formar un clúster. Incluye todos los componentes del plano de control.
- Nodo: es el nodo de trabajo de Kubernetes y es responsable de recibir instrucciones de trabajo del Master, crear y destruir objetos Pod en consecuencia de acuerdo con las instrucciones y ajustar las reglas de la red para un enrutamiento y reenvío de tráfico razonables . En un entorno de producción, puede haber N nodos. Incluye todos los nodos de nodos.
Componentes del plano de control
Los componentes del plano de control toman decisiones globales para el clúster, como la programación de recursos. replicas
Además de detectar y responder a eventos del clúster, como iniciar un nuevo pod cuando no se cumple un campo implementado ).
Los componentes del plano de control se pueden ejecutar en cualquier nodo del clúster. Sin embargo, para simplificar, el script de configuración normalmente inicia todos los componentes del plano de control en la misma máquina y no ejecuta contenedores de usuario en esta máquina.
a un servidor
El servidor API es un componente del plano de control de Kubernetes y es responsable de exponer la API de Kubernetes y manejar el trabajo de aceptar solicitudes . El servidor API es la interfaz del plano de control de Kubernetes.
apiserver es la puerta de entrada de todo el clúster
La única interfaz externa de K8S proporciona API RESTful HTTP/HTTPS, es decir, API de Kubernetes. Todas las solicitudes deben comunicarse a través de esta interfaz. Es el principal responsable de recibir, verificar y responder a todas las solicitudes REST. El estado del resultado se almacena persistentemente en etcd, que es la única entrada para todas las adiciones, eliminaciones y modificaciones de recursos .
puerto
[root@k8s-master ~]# netstat -anplut|egrep LISTEN.*apiserver
envase
[root@k8s-master ~]# docker ps|grep apiserver
c09166f7c313 ca9843d3b545 "kube-apiserver --ad…" 3 minutes ago Up 3 minutes k8s_kube-apiserver_kube-apiserver-k8s-master_kube-system_2fc27474246553d4d73cbb5d364b9726_6
8f9429e1d4e6 registry.aliyuncs.com/google_containers/pause:3.2 "/pause" 5 minutes ago Up 5 minutes k8s_POD_kube-apiserver-k8s-master_kube-system_2fc27474246553d4d73cbb5d364b9726_5
etcétera
Un almacén de valores clave coherente y de alta disponibilidad que se utiliza como base de datos backend para todos los datos del clúster de Kubernetes.
Responsable de guardar la información de configuración del clúster k8s y la información de estado de varios recursos.Cuando los datos cambien, etcd notificará rápidamente a los componentes k8s relevantes. etcd es un componente de servicio independiente y no está afiliado al clúster K8S. En un entorno de producción, etcd debe ejecutarse en un clúster para garantizar la disponibilidad del servicio.
etcd no solo se utiliza para proporcionar almacenamiento de datos de valores clave, sino que también proporciona un mecanismo de vigilancia para monitorear e impulsar cambios. En el sistema de clúster K8S, los cambios en los valores de las claves etcd se notificarán al servidor API , que los enviará al cliente a través de la API de vigilancia.
puerto
[root@k8s-master ~]# netstat -anplut|egrep LISTEN.*etcd
envase
[root@k8s-master ~]# docker ps |grep etcd
c66803416c06 0369cf4303ff "etcd --advertise-cl…" 6 minutes ago Up 6 minutes k8s_etcd_etcd-k8s-master_kube-system_6b17573732d23fd599a67ffecd227455_5
f2847eb09da2 registry.aliyuncs.com/google_containers/pause:3.2 "/pause" 6 minutes ago Up 6 minutes k8s_POD_etcd-k8s-master_kube-system_6b17573732d23fd599a67ffecd227455_5
programador de kube
kube-scheduler
Es un componente del plano de control , responsable de monitorear los Pods recién creados que no especifican un nodo en ejecución (nodo) y de seleccionar los nodos en los que se ejecutarán los Pods .
Los factores considerados en las decisiones de programación incluyen requisitos de recursos de Pods individuales y colecciones de Pods, software, hardware y restricciones de políticas, especificaciones de afinidad y antiafinidad, ubicación de datos, interferencia entre cargas de trabajo y plazos.
envase
[root@k8s-master ~]# docker ps|grep scheduler
c179d65f1940 3138b6e3d471 "kube-scheduler --au…" 7 minutes ago Up 7 minutes k8s_kube-scheduler_kube-scheduler-k8s-master_kube-system_0378cf280f805e38b5448a1eceeedfc4_5
2dbe2c73b36b registry.aliyuncs.com/google_containers/pause:3.2 "/pause" 7 minutes ago Up 7 minutes k8s_POD_kube-scheduler-k8s-master_kube-system_0378cf280f805e38b5448a1eceeedfc4_5
puerto
[root@k8s-master ~]# netstat -anplut|egrep LISTEN.*scheduler
administrador-controlador-kube
kube-controller-manager es un componente del plano de control y es responsable de ejecutar el proceso del controlador .
Responsable de gestionar varios recursos del clúster y garantizar que los recursos estén en el estado esperado.
Lógicamente, cada controlador es un proceso independiente, pero para reducir la complejidad, todos se compilan en el mismo ejecutable y se ejecutan en el mismo proceso.
Estos controladores incluyen:
- Controlador de nodo: Responsable de notificar y responder cuando falla un nodo
- Controlador de trabajo: monitorea los objetos de trabajo que representan tareas únicas y luego crea pods para ejecutar estas tareas hasta su finalización.
- Controlador EndpointSlice: completa el objeto EndpointSlice (para proporcionar el vínculo entre el Servicio y el Pod).
- Controlador ServiceAccount: cree una cuenta de servicio predeterminada (ServiceAccount) para el nuevo espacio de nombres.
- Controlador de réplica: especifique la cantidad de contenedores en el pod. Si faltan algunos, se completarán automáticamente.
- Controlador de implementación: ayuda a implementar software
- Controlador de tareas programadas: ayuda a monitorear las tareas programadas
puerto
[root@k8s-master ~]# netstat -anplut|egrep LISTEN.*kube-controlle
envase
[root@k8s-master ~]# docker ps |grep kube-controlle
3ea62f3d0381 b9fa1895dcaa "kube-controller-man…" 10 minutes ago Up 10 minutes k8s_kube-controller-manager_kube-controller-manager-k8s-master_kube-system_5c575d17517839b576ab4817fd06353f_5
8d65ce545508 registry.aliyuncs.com/google_containers/pause:3.2 "/pause" 10 minutes ago Up 10 minutes k8s_POD_kube-controller-manager-k8s-master_kube-system_5c575d17517839b576ab4817fd06353f_5
administrador-del-controlador-de-la-nube
Un componente del plano de control de Kubernetes que incorpora una lógica de control específica de la plataforma en la nube. Cloud Controller Manager le permite conectar su clúster a la API de un proveedor de nube y separar los componentes que interactúan con la plataforma de nube de los componentes que interactúan con su clúster.
cloud-controller-manager
Ejecute únicamente controladores específicos de la plataforma en la nube. Por lo tanto, si ejecuta Kubernetes en su propio entorno o ejecuta un entorno de aprendizaje en su computadora local, el clúster implementado no necesita un administrador de controlador de nube.
De manera similar a kube-controller-manager
, cloud-controller-manager
varios bucles de control lógicamente independientes se combinan en el mismo archivo ejecutable para que usted lo ejecute como el mismo proceso. Puede escalarlo horizontalmente (ejecutar más de una réplica) para mejorar el rendimiento o mejorar la tolerancia a fallos.
Todos los siguientes controladores incluyen dependencias de los controladores de la plataforma en la nube:
- Controlador de nodo: se utiliza para verificar el proveedor de la nube después de que el nodo finaliza la respuesta para determinar si el nodo se ha eliminado
- Controlador de ruta: se utiliza para configurar el enrutamiento en la infraestructura de la nube subyacente
- Controlador de servicio: se utiliza para crear, actualizar y eliminar balanceadores de carga del proveedor de la nube.
Componente de nodo
kubelet
Garantiza que todos los contenedores se ejecuten en Pods.
Se ejecuta un programa independiente en el host, no en el contenedor
kubelet
Se ejecutará en todos los nodos del clúster . Garantiza que todos los contenedores (contenedores) se ejecuten en Pods .
Kubelet es el agente de un nodo. Cuando el Programador determina ejecutar un Pod en un Nodo, enviará la información de configuración específica (imagen, volumen, etc.) del Pod al kubelet del nodo. El kubelet creará y ejecute el contenedor basándose en esta información y envíelo al maestro para informar el estado de ejecución .
puerto
[root@k8s-master ~]# netstat -anplut|grep kubelet
proceso
[root@k8s-master ~]# ps aux|grep kubelet
fue un apoderado
Se ejecuta un programa independiente en el host, no en el contenedor
kube-proxy es un proxy de red que se ejecuta en cada nodo del clúster e implementa parte del concepto de servicio de Kubernetes .
kube-proxy mantiene algunas reglas de red en los nodos que permiten la comunicación de red con Pods desde sesiones de red dentro o fuera del clúster.
Si el sistema operativo proporciona una capa de filtrado de paquetes disponible, kube-proxy implementará reglas de red a través de ella. De lo contrario, kube-proxy solo reenvía el tráfico.
Modo proxy (equilibrio de carga)
- ipvs, se recomienda habilitar ipvs en el entorno de producción
- iptables, usado por defecto, baja eficiencia
puerto
[root@k8s-master ~]# netstat -anplut|grep LISTEN.*kube-proxy
proceso
[root@k8s-master ~]# ps aux|grep kube-proxy
root 3485 0.5 1.5 744064 28764 ? Ssl 12:41 0:04 /usr/local/bin/kube-proxy --config=/var/lib/kube-proxy/config.conf --hostname-override=k8s-master
root 14987 0.0 0.0 112824 992 pts/0 S+ 12:54 0:00 grep --color=auto kube-proxy
complemento principal
Componentes de comunicación de red.
Calicó
Logre la comunicación entre hosts en el tipo de red superpuesta, adecuada para clústeres a gran escala
Todos los hosts k8s se ejecutarán
franela
Adecuado para clusters de pequeña escala
DNS central
Programe y ejecute pods que proporcionen servicios DNS en un clúster K8S. Otros pods en el mismo clúster pueden usar este servicio DNS para resolver nombres de host . K8S utiliza el proyecto CoreDNS de forma predeterminada desde la versión 1.11 para proporcionar servicios dinámicos de resolución de nombres para el registro y descubrimiento de servicios para el clúster.
Panel
Todas las funciones del clúster K8S deben basarse en la interfaz de usuario web para administrar las aplicaciones en el clúster y el propio clúster.