Tabla de contenido
Características del contenedor 1 init
El contenedor init en el Pod
Los contenedores de inicio son contenedores especiales que se ejecutan antes de que se inicien los contenedores de aplicaciones dentro de un pod. El contenedor de inicio puede incluir algunas utilidades y scripts de instalación que no están presentes en la imagen de la aplicación.
Características del contenedor 1 init
El contenedor init es muy parecido a un contenedor normal, excepto por lo siguiente:
-
Siempre corren hasta el final. Si el contenedor Init del pod falla, el kubelet seguirá reiniciando el contenedor Init hasta que tenga éxito. Sin embargo, si un Pod tiene
restartPolicy
un valor de "Nunca" y el contenedor de inicio del Pod falla, Kubernetes configurará el estado de todo el Pod como Fallido. -
Cada uno debe completarse correctamente antes de que se pueda iniciar el siguiente.
-
Además, los contenedores Init no son compatibles con
lifecycle
, y , porque deben ejecutarse hasta el final antes de que el Pod esté listolivenessProbe
.readinessProbe
startupProbe
-
Si se especifican varios contenedores Init para un Pod, se ejecutarán secuencialmente uno por uno. Cada contenedor Init debe ejecutarse correctamente antes de que pueda ejecutarse el siguiente. Cuando todos los contenedores Init hayan terminado de ejecutarse, Kubernetes inicializará el contenedor de la aplicación para el Pod y se ejecutará como de costumbre.
-
Los contenedores de inicio admiten todos los campos y funciones de los contenedores de aplicaciones, incluidos los límites de recursos, los volúmenes de datos y la configuración de seguridad. Sin embargo, los contenedores Init manejan las solicitudes de recursos y los límites de forma ligeramente diferente.
2 Usando el contenedor init
Dirección del sitio web oficial: Contenedor de inicio | Kubernetes
El contenedor Init se especifica en la especificación del Pod containers
en paralelo a la matriz que describe el contenedor de la aplicación.
apiVersion: v1
kind: Pod
metadata:
name: init-demo
spec:
containers:
- name: myapp-container
image: busybox:1.28
command: ['sh', '-c', 'echo The app is running! && sleep 3600']
initContainers:
- name: init-myservice
image: busybox:1.28
command: ['sh', '-c', 'echo init-myservice is running! && sleep 5']
- name: init-mydb
image: busybox:1.28
command: ['sh', '-c', 'echo init-mydb is running! && sleep 10']
-
Ver detalles de inicio
$ kubectl describe pod init-demo
# 部分结果
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 2m16s default-scheduler Successfully assigned default/init-demo to k8s-node2
Normal Pulling 2m16s kubelet Pulling image "busybox:1.28"
Normal Pulled 118s kubelet Successfully pulled image "busybox:1.28" in 17.370617268s (17.370620685s including waiting)
Normal Created 118s kubelet Created container init-myservice
Normal Started 118s kubelet Started container init-myservice
Normal Pulled 112s kubelet Container image "busybox:1.28" already present on machine
Normal Created 112s kubelet Created container init-mydb
Normal Started 112s kubelet Started container init-mydb
Normal Pulled 101s kubelet Container image "busybox:1.28" already present on machine
Normal Created 101s kubelet Created container myapp-container
Normal Started 101s kubelet Started container myapp-container