Espacio de nombres "atascado" como terminando, cómo lo eliminé
Tuve un espacio de nombres "atascado" que eliminé y se muestra en este estado eterno de "terminación".
Suponiendo que ya has intentado forzar la eliminación de recursos como: Pods bloqueados en estado de terminación y estás al límite de tu ingenio tratando de recuperar el espacio de nombres...
Puede forzar la eliminación del espacio de nombres (quizás dejando recursos pendientes):
(
NAMESPACE=your-rogue-namespace
kubectl proxy &
kubectl get namespace $NAMESPACE -o json |jq '.spec = {"finalizers":[]}' >temp.json
curl -k -H "Content-Type: application/json" -X PUT --data-binary @temp.json 127.0.0.1:8001/api/v1/namespaces/$NAMESPACE/finalize
)
Este es un refinamiento de la respuesta aquí , que se basa en el comentario aquí .
Estoy usando la
jq
utilidad para eliminar elementos mediante programación en la sección de finalizadores. En su lugar, podrías hacerlo manualmente.kubectl proxy
crea el oyente en127.0.0.1:8001
por defecto . Si conoce el nombre de host/IP de su clúster maestro, es posible que pueda usarlo en su lugar.Lo curioso es que este enfoque parece funcionar incluso cuando realizar
kubectl edit
el mismo cambio no tiene ningún efecto.
Esto se debe a que aún existen recursos en el espacio de nombres que el controlador del espacio de nombres no puede eliminar.
Este comando (con kubectl 1.11+) le mostrará qué recursos quedan en el espacio de nombres:
kubectl api-resources --verbs=list --namespaced -o name \
| xargs -n 1 kubectl get --show-kind --ignore-not-found -n <namespace>
Una vez que los encuentre, los resuelva y elimine, el espacio de nombres se limpiará.