kubernetes - tutorial - Reinicie el contenedor dentro de la vaina
kubernetes force pull image (8)
Tengo un pod
test-1495806908-xn5jn
con 2 contenedores.
Me gustaría reiniciar uno de ellos llamado
container-test
.
¿Es posible reiniciar un solo contenedor dentro de un pod y cómo?
Si no, ¿cómo reinicio el pod?
El pod se creó usando un
deployment.yaml
con:
kubectl create -f deployment.yaml
¿Es posible reiniciar un solo contenedor?
No a través de
kubectl
, aunque dependiendo de la configuración de su clúster puede "engañar" y
docker kill the-sha-goes-here
, lo que hará que kubelet reinicie el contenedor "fallido" (suponiendo, por supuesto, la política de reinicio para el Pod dice que eso es lo que debería hacer)
¿Cómo reinicio el pod?
Eso depende de cómo se creó el Pod, pero según el nombre del Pod que proporcionó, parece estar bajo la supervisión de un ReplicaSet, por lo que puede simplemente
kubectl delete pod test-1495806908-xn5jn
y kubernetes creará uno nuevo en su lugar (el nuevo Pod tendrá un nombre diferente, así que no esperes que
kubectl get pods
devuelva
test-1495806908-xn5jn
nunca más)
Hay casos en los que desea reiniciar un contenedor específico en lugar de eliminar el pod y dejar que Kubernetes lo vuelva a crear.
Hacer un
kubectl exec POD_NAME -c CONTAINER_NAME reboot
funcionó para mí.
Hubo un problema en el pod de
coredns
,
coredns
dicho pod por
kubectl scale deployment <<name>> --replicas=2 -n service
Su pod se reiniciará automáticamente.
Matar el proceso especificado en el
CMD
/
ENTRYPOINT
funciona para mí.
(El contenedor se reinicia automáticamente)
El reinicio no estaba permitido en mi contenedor, así que tuve que usar esta solución.
Tanto el pod como el contenedor son efímeros, intente utilizar el siguiente comando para detener el contenedor específico y el clúster k8s reiniciará un nuevo contenedor.
kubectl exec -it [POD_NAME] -c [CONTAINER_NAME] -- /bin/sh -c "kill 1"
Esto enviará una señal
SIGTERM
al proceso 1, que es el proceso principal que se ejecuta en el contenedor.
Todos los demás procesos serán hijos del proceso 1 y finalizarán una vez que finalice el proceso 1.
Vea la página de
manual de kill
para otras señales que puede enviar.
Toda la razón para tener kubernetes es que administra los contenedores por usted para que no tenga que preocuparse tanto por el ciclo de vida de los contenedores en la cápsula.
Dado que tiene una configuración de
deployment
que usa un
replica set
.
Puede eliminar el pod usando
kubectl delete pod test-1495806908-xn5jn
y kubernetes gestionará la creación de un nuevo pod con los 2 contenedores sin ningún tiempo de inactividad.
Intentar reiniciar manualmente contenedores individuales en vainas niega todos los beneficios de los kubernetes.
Todas las respuestas anteriores han mencionado eliminar el pod ... pero si tiene muchos pods del mismo servicio, sería tedioso eliminar cada uno de ellos ...
Por lo tanto, propongo la siguiente solución, reiniciar :
-
1) Establecer escala a cero:
kubectl delete pod -n=kube-system coredns-fb8b8dccf-8ggcf
El comando anterior terminará todos sus pods con el nombre
<<name>>
-
2) Para iniciar el pod nuevamente, establezca las réplicas en más de 0
kubectl scale deployment <<name>> --replicas=0 -n service
El comando anterior iniciará sus pods nuevamente con 2 réplicas.
Usamos una línea de comando bastante conveniente para forzar la reinstalación de imágenes nuevas en el pod de integración.
Notamos que todos nuestros contenedores alpinos ejecutan su comando "sostenido" en el PID 5. Por lo tanto, enviarle una señal
SIGTERM
baja el contenedor.
imagePullPolicy
configuración de
imagePullPolicy
en
Always
hace que el kubelet vuelva a extraer la última imagen cuando recupera el contenedor.
kubectl exec -i [pod name] -c [container-name] -- kill -15 5