services - kubernetes service spec ports
Pods atascados en estado de terminaciĆ³n (10)
Elimine el bloque finalizadores del recurso (pod, implementación, ds, etc.) yaml:
"finalizers": [
"foregroundDeletion"
]
Traté de eliminar un
ReplicationController
con 12 pods y pude ver que algunos de los pods están atascados en el estado de
Terminating
.
Mi clúster Kubernetes consta de un nodo de plano de control y tres nodos de trabajo instalados en máquinas virtuales Ubuntu.
¿Cuál podría ser la razón de este problema?
NAME READY STATUS RESTARTS AGE
pod-186o2 1/1 Terminating 0 2h
pod-4b6qc 1/1 Terminating 0 2h
pod-8xl86 1/1 Terminating 0 1h
pod-d6htc 1/1 Terminating 0 1h
pod-vlzov 1/1 Terminating 0 1h
En mi caso, la opción
--force
no funcionó del todo.
¡Todavía podía ver la cápsula!
Estaba atascado en modo de terminación / desconocido.
Entonces después de correr
kubectl delete pods <pod> -n redis --grace-period=0 --force
corrí
kubectl patch pod <pod> -p ''{"metadata":{"finalizers":null}}''
Encontré este comando más sencillo:
for p in $(kubectl get pods | grep Terminating | awk ''{print $1}''); do kubectl delete pod $p --grace-period=0 --force;done
Eliminará todos los pods en estado de terminación en el espacio de nombres predeterminado.
Forzar la eliminación del pod:
kubectl delete pod --grace-period=0 --force --namespace <NAMESPACE> <PODNAME>
La bandera
--force
es obligatoria.
La pregunta original es " ¿Cuál podría ser la razón de este problema? " Y la respuesta se discute en github.com/kubernetes/kubernetes/issues/51835 y https://github.com/kubernetes/kubernetes/issues/65569 y consulte https://www.bountysource.com/issues/33241128-unable-to-remove-a-stopped-container-device-or-resource-busy
Es causado por el montaje de Docker que se filtra en algún otro espacio de nombres.
Puede iniciar sesión en el host del pod para investigar.
minikube ssh
docker container ps | grep <id>
docker container stop <id>
Me topé con esto recientemente cuando eliminé el espacio de nombres ceph de la torre; se quedó atascado en el estado de terminación.
Lo único que ayudó fue eliminar el finalizador de kubernetes llamando directamente a la api k8s con curl como se sugiere here .
-
kubectl get namespace rook-ceph -o json > tmp.json
-
elimine el finalizador de
tmp.json
entmp.json
(deje la matriz vacía"finalizers": []
) -
ejecute el
kubectl proxy
en otro terminal para fines de autenticación y ejecute la siguiente solicitud curl al puerto devuelto -
curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json 127.0.0.1:8001/k8s/clusters/c-mzplp/api/v1/namespaces/rook-ceph/finalize
- el espacio de nombres se ha ido
Desmontaje detallado de ceph de torre here .
Me topé con esto recientemente para liberar recursos en mi clúster. Aquí está el comando para eliminarlos a todos.
kubectl get pods --all-namespaces | grep Terminating | while read line; do
pod_name=$(echo $line | awk ''{print $2}'' ) name_space=$(echo $line | awk
''{print $1}'' ); kubectl delete pods $pod_name -n $name_space --grace-period=0 --force;
done
Espero que esto ayude a alguien que lea esto
Puede usar el siguiente comando para eliminar el POD con fuerza.
kubectl delete pod <PODNAME> --grace-period=0 --force --namespace <NAMESPACE>
Respuesta práctica: siempre puede eliminar un pod de terminación ejecutando:
kubectl delete pod NAME --grace-period=0
Respuesta histórica: hubo un problema en la versión 1.1 en el que a veces las vainas se quedan varadas en el estado de terminación si sus nodos se eliminan de forma no limpia del clúster.
Si
--grace-period=0
no funciona, puede hacer lo siguiente:
kubectl delete pods <pod> --grace-period=0 --force