¿Cómo soluciono el bloqueo de pods y espacios de nombres en los clústeres de Amazon EKS?
No puedo eliminar mis pods o espacios de nombres de mi clúster de Amazon Elastic Kubernetes Service (Amazon EKS). Los pods o los espacios de nombres están bloqueados en el estado Finalizando.
Descripción corta
Tras eliminar un pod o un espacio de nombres en Amazon EKS, el recurso pasa al estado Finalizando. Si este proceso no se completa, debes resolver el problema manualmente.
Los pods pueden tener problemas de finalización por alguno de los siguientes motivos:
- Los finalizadores evitan la eliminación
- El pod no responde a las señales de finalización
- Los enlaces PreStop devuelven un error o el servicio terminationGracePeriodSeconds se prolonga demasiado
- Las interrupciones de la red bloquean la comunicación entre los nodos de trabajo y el plano de control
- El uso elevado de recursos afecta a los nodos de trabajo
Los espacios de nombres pueden experimentar problemas de finalización por cualquiera de los siguientes motivos:
- Kubernetes no puede eliminar recursos específicos
- Los servidores API informan de un estado falso
- Los finalizadores evitan la eliminación
Resolución
Usa las siguientes secciones para solucionar problemas relacionados con el pod o el espacio de nombres bloqueados.
Solución de problemas con pods bloqueados
Completa las siguientes tareas para solucionar el problema de los pods bloqueados.
Comprobación del estado del pod
Sigue estos pasos:
-
Para comprobar los registros de kubelet en el nodo afectado, ejecuta el siguiente comando:
kubectl get pods -A --field-selector=status.phase==Terminating -o wide -
Revisa la columna NODE en la salida para identificar los nodos afectados. Si todos los pods atascados están en el mismo nodo, ejecuta el siguiente comando journalctl para comprobar los registros de kubelet en el nodo afectado:
journalctl -u kubelet -
Reinicia el kubelet.
Comprobación para saber si hay finalizadores de pod
Para comprobar si hay finalizadores, ejecuta el siguiente comando:
kubectl get pod POD_NAME -n NAMESPACE -o yaml
Nota: Sustituye POD_NAME por el nombre de tu pod. Sustituye NAMESPACE por el nombre del espacio de nombres en el que se encuentra el pod.
Si hay finalizadores, ejecuta uno de los siguientes comandos:
Para una eliminación sencilla, usa el siguiente comando:
kubectl patch pod POD_NAME -n NAMESPACE -p '{"metadata":{"finalizers":null}}'
O bien, si tu entorno requiere operaciones de parches de JSON o prefiere una sintaxis más detallada, usa el siguiente comando:
kubectl patch pod POD_NAME -n NAMESPACE --type=json -p '[{"op": "remove", "path": "/metadata/finalizers" }]'
Nota: Sustituye POD_NAME por el nombre de tu pod. Sustituye NAMESPACE por el nombre del espacio de nombres en el que se encuentra el pod.
Forzar la eliminación del Pod
Importante: Se recomienda usar esta opción solo si otros métodos no pueden evitar la pérdida o el daño de los datos.
Para forzar la eliminación del pod, ejecuta el siguiente comando:
kubectl delete pod POD_NAME -n NAMESPACE --grace-period=0 --force
Nota: Sustituye POD_NAME por el nombre del pod y NAMESPACE por el espacio de nombres en el que se encuentra el pod.
Solución de problemas con los espacios de nombres bloqueados
Completa las siguientes tareas para solucionar los problemas de los espacios de nombres bloqueados.
Comprobación del estado del espacio de nombres
Cuando un espacio de nombres se queda bloqueado en estado Finalizando, es posible que contenga recursos que Kubernetes no puede eliminar. O bien, un servicio de API puede tener el estado Falso.
Para comprobar el estado del espacio de nombres, ejecuta el siguiente comando:
kubectl describe namespace NAMESPACE
Nota: Sustituye NAMESPACE por el nombre de tu espacio de nombres bloqueado.
Búsqueda y eliminación de los recursos restantes
Si los recursos permanecen en el espacio de nombres, recibirás el siguiente mensaje de error:
«NamespaceContentRemaining: Some resources are remaining: serviceaccounts has 2 resource instances»
Para enumerar los recursos restantes, ejecuta el siguiente comando:
kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get --show-kind --ignore-not-found -n NAMESPACE
Nota: Sustituye NAMESPACE por el nombre de tu espacio de nombres.
A continuación, ejecuta el siguiente comando para eliminar los recursos identificados:
kubectl delete RESOURCE_TYPE RESOURCE_NAME -n NAMESPACE
Nota: Sustituye RESOURCE_TYPE por el tipo de recurso, RESOURCE_NAME por el nombre del recurso y sustituye NAMESPACE por tu espacio de nombres.
Eliminación de los finalizadores de espacios de nombres
Si los finalizadores siguen adjuntados, verás el siguiente mensaje de error:
«NamespaceFinalizersRemaining: Some content in the namespace has finalizers remaining: kubernetes.io/persistent-volume-provisioner in 1 resource instance»
Para eliminar los finalizadores del espacio de nombres, puedes ejecutar un comando patch, usar un archivo JSON o forzar la eliminación del espacio de nombres.
Para eliminar los finalizadores con una operación patch, ejecuta el siguiente comando:
kubectl patch namespace NAMESPACE --type=json -p '[{"op": "remove", "path": "/metadata/finalizers" }]'
Nota: Sustituye NAMESPACE por el nombre de tu espacio de nombres bloqueado.
Para usar un archivo JSON, sigue estos pasos:
- Ejecuta el siguiente comando para crear el archivo de configuración del espacio de nombres:
Nota: Sustituye TERMINATING_NAMESPACE por el nombre del espacio de nombres bloqueado.kubectl get namespace TERMINATING_NAMESPACE -o json > tempfile.json - Elimina la matriz de finalizadores de la sección de especificaciones del archivo JSON:
- Ejecuta el siguiente comando para aplicar los cambios:
Nota: Sustituye TERMINATING_NAMESPACE por el nombre del espacio de nombres bloqueado.kubectl replace --raw "/api/v1/namespaces/TERMINATING_NAMESPACE/finalize" -f ./tempfile.json - Comprueba que se haya eliminado el espacio de nombres. Ejecuta el siguiente comando:
kubectl get namespaces
Para forzar la eliminación del espacio de nombres, ejecuta el siguiente comando:
kubectl delete namespace NAMESPACE --grace-period=0 --force
Nota: Sustituye NAMESPACE por el nombre de tu espacio de nombres bloqueado. Se recomienda usar esta opción solo si otros métodos no pueden evitar la pérdida o el daño de los datos.
Limpieza de recursos personalizados
Si los recursos permanecen en el espacio de nombres, ejecuta el siguiente comando:
kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get --show-kind --ignore-not-found -n NAMESPACE
Nota: Sustituye NAMESPACE por el nombre de tu espacio de nombres.
Si identificas recursos personalizados, ejecuta el siguiente comando para eliminarlos:
kubectl delete RESOURCE_TYPE RESOURCE_NAME -n NAMESPACE
Nota: Sustituye RESOURCE_TYPE por el tipo de recurso, RESOURCE_NAME por el nombre del recurso y sustituye NAMESPACE por tu espacio de nombres.
Ejecuta el siguiente comando para eliminar los finalizadores de recursos personalizados:
kubectl patch RESOURCE_TYPE RESOURCE_NAME -n NAMESPACE -p '{"metadata":{"finalizers":null}}' --type=merge
Nota: Sustituye RESOURCE_TYPE por el tipo de recurso. Sustituye RESOURCE_NAME por el nombre del recurso. Sustituye NAMESPACE por el ID de tu espacio de nombres.
A continuación, ejecuta el siguiente comando para eliminar CustomResourceDefinitions:
kubectl delete crd CRD_NAME
Nota: Sustituye CRD_NAME por el nombre de tu CustomResourceDefinitions. Elimina únicamente los elementos CustomResourceDefinitions que ya no necesites.
- Temas
- Containers
- Etiquetas
- Amazon Elastic Kubernetes Service
- Idioma
- Español

Contenido relevante
- preguntada hace 6 meses
- preguntada hace 10 meses
- preguntada hace 7 meses
- preguntada hace 6 meses