El kubelet obtiene la lista de Pods para ejecutar en su propio Nodo de las
siguientes
maneras
.
(1) Archivo:
el archivo en el directorio de archivos de configuración especificado por el parámetro de inicio de
kubelet
"a config " (el directorio predeterminado es " etc/
manifiestos de kubernetes
/)
.
El tiempo mediante la configuración
de frecuencia de verificación de archivos , el
valor predeterminado es
años 20
staticPodPath: /etc/kubernetes/manifests
(2)
punto final
HTTP
CURL ): establecido a través del parámetro " manifest-url " . a través de una configuración de frecuencia de verificación http
El intervalo de tiempo para verificar los datos del punto final
HTTP , el valor predeterminado es
20S.
(3)
Servidor API : el kubelet supervisa el directorio etcd a través del servidor API y sincroniza la tabla Pod .
Pods creados en modo servidor no API
Todos los pods creados en el modo de servidor no API se denominan pods estáticos
y
kubelet informa el estado de los pods estáticos a
API Server
,
API Server crea un Mirror Pod para que el Static Pod coincida. El estado del Mirror Pod será verdadero
En realidad refleja el estado del Static Pod.
Cuando se elimina un
Static
Pod
, se eliminará el
Mirror
Pod correspondiente
.
Pod creado por API Server
Solo discutimos la forma de obtener el inventario de Pod a través del
Servidor
API . El kubelet monitorea el " registro/ nodos/$ nombre del nodo actual " y el directorio "/ registro/ pods " a través del cliente del servidor API usando Watch List, y sincroniza la información obtenida con el caché local.
El kubelet
escucha e
tcd y
todas las operaciones en el
Pod
serán
monitoreadas por el
kubelet
. Si se encuentra un nuevo Pod vinculado a este nodo, el Pod se crea de acuerdo con los requisitos de la lista de Pod .
Si se encuentra que el
Pod local
ha sido modificado
, el
kubelet
hará las modificaciones correspondientes
Por ejemplo ,
cuando se elimine un contenedor en el
Pod , el contenedor se eliminará
a través de Docker Client .
Si se encuentra que se eliminó el pod de este nodo , se elimina el
pod
correspondiente y
el contenedor en el pod se pasa a través del cliente de Docker .
El kubelet
lee la información monitoreada, y si es para crear y modificar un
Pod
, realizará el
siguiente procesamiento.
(1
)
Crear un directorio de datos para el
Pod
(2
)
Lea la lista de pods del servidor
API .
(3
)
Monte el volumen externo para el
Pod
(4
) Descarga el
Secreto utilizado por el
Pod
(5 ) Verifique el
Pod
que ya se está ejecutando en el nodo
, si el Pod no tiene contenedor o Pause container (" kubernetes/pause
El contenedor creado por la imagen) no se inicia, luego detenga primero
los procesos de todos los contenedores en el
Pod .
Si
hay contenido que debe eliminarse en el
Pod
contenedores, elimine esos contenedores.
(6
)
Cree un contenedor para cada Pod con la imagen "
kubemetes/pausa ".
El contenedor de pausa se usa para hacerse cargo de la conexión en red de todos los demás contenedores del Pod. Cada vez que se crea un nuevo Pod, el kubelet primero creará el contenedor de Pausa y luego creará otros contenedores. La imagen de kubernetes/pause "tiene aproximadamente 200 KB y es una imagen de contenedor muy pequeña.
(7
)
Haga lo siguiente para cada contenedor en el
Pod .
- Calcule un valor hash para el contenedor y luego use el nombre del contenedor para consultar el valor hash del contenedor Docker correspondiente . Si se encuentra y los valores hash de los dos son diferentes, detenga el proceso del contenedor en Docker y detenga el proceso del contenedor Pause asociado con él ; si los dos son iguales, no haga nada
- Si el contenedor finaliza y el contenedor no tiene un restartPolicy especificado , no se hará nada.
- Llame a Docker Client para descargar la imagen del contenedor y llame a Docker Client para ejecutar el contenedor