¿Es posible reiniciar un solo contenedor?
No a través kubectl
, aunque dependiendo de la configuración de su clúster, puede "hacer trampa" y docker kill the-sha-goes-here
, lo que hará que kubelet reinicie el contenedor "fallido" (asumiendo, por supuesto, que la política de reinicio del Pod dice que eso es lo que debe hacer)
como 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 kubectl get pods
volver test-1495806908-xn5jn
nunca más)
docker kill the-sha-goes-here
¿por qué no hacerlodocker container restart the-sha-goes-here
? ¿Por qué confiar enkubelet
reiniciarlo? De todos modos, el problema real es que dónde ejecuto eldocker
comando, incluso si es para matar el contenedor. ¡Encendidocould-shell
,docker
no muestra los contenedores de los clústeres k8s!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.
Haciendo un
kubectl exec POD_NAME -c CONTAINER_NAME /sbin/killall5
trabajo para mí.(Cambié el comando de
reboot
a/sbin/killall5
según las recomendaciones a continuación).fuente
reboot
; Tuve más suerte ejecutando en su/sbin/killall5
lugar; que mata todos los procesos y el contenedor saldrá.kubectl exec POD_NAME -c CONTAINER_NAME /sbin/reboot
Trabajó como un encantoTanto el pod como el contenedor son efímeros, intente usar el siguiente comando para detener el contenedor específico y el clúster k8s reiniciará un nuevo contenedor.
Esto enviará una
SIGTERM
señal 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 después de que el proceso 1 salga. Consulte la página de manual de kill para ver otras señales que puede enviar.fuente
La razón de tener kubernetes es que administra los contenedores por ti para que no tengas que preocuparte tanto por el ciclo de vida de los contenedores en el pod.
Dado que tiene una
deployment
configuración que utilizareplica set
. Puede eliminar el pod utilizandokubectl 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 pods niega todos los beneficios de kubernetes.fuente
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, reinicie :
1) Ponga la escala a cero:
El comando anterior terminará todos sus pods con el nombre
<<name>>
2) Para volver a iniciar el pod, establezca las réplicas en más de 0
El comando anterior iniciará sus pods nuevamente con 2 réplicas.
fuente
kubectl patch deployment <deployment name> -p "{\"spec\": {\"template\": {\"metadata\": { \"labels\": { \"redeploy\": \"$(date +%s)\"}}}}}"
lugar. Esto actualizará la implementación y, por lo tanto, iniciará la recreación de todos los pods administrados por él de acuerdo con la estrategia de actualización continua.Usamos una línea de comando bastante conveniente para forzar la re-implementación de imágenes nuevas en el módulo de integración.
Notamos que todos nuestros contenedores alpinos ejecutan su comando de "sostenimiento" en PID 5. Por lo tanto, enviar una
SIGTERM
señal derriba el contenedor.imagePullPolicy
al establecerse,Always
kubelet vuelve a extraer la última imagen cuando devuelve el contenedor.fuente
kill -15 5
está ejecutando el comando kill para enviar la señal "-15" al proceso con el PID 5. Así es como le dice a un proceso que le gustaría que termine (SIGTERM ) y que se tome el tiempo de limpiar los recursos abiertos (archivos temporales, transacciones de rollback db, cerrar conexiones, lo que sea). En contraste con -9 (SIGKILL), mata el proceso inmediatamente, sin permitirle limpiar ningún recurso abierto.Matar el proceso especificado en el Dockerfile
CMD
/ENTRYPOINT
funciona para mí. (El contenedor se reinicia automáticamente)No se permitió reiniciar en mi contenedor, así que tuve que usar esta solución.
fuente
Hubo un problema en el
coredns
pod, eliminé dicho pod porSu pod se reiniciará automáticamente.
fuente
Suponiendo que el contenedor se ejecuta como root, lo cual no se recomienda.
En mi caso, cuando cambié la configuración de la aplicación, tuve que reiniciar el contenedor que se usó en un patrón de sidecar, eliminaría el PID para la aplicación de arranque de primavera que es propiedad del usuario de Docker.
fuente
kubectl exec -it ${POD_NAME?} -c ${CONTAINER_NAME?} bash ...
, a las personas les resultará mucho más fácil copiar y pegar.