K8S 中强制删除namespace 命名空间后 显示 Terminating 状态
1:现象
K8S 中强制删除namespace 命名空间后 显示 Terminating 状态。
并且报错 warning: Immediate deletion does not wait for confirmation that the running
故障现象:
warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.
[root@k8s-master ns]# kubectl delete ns nginx --force --grace-period=0
[root@k8s-master ns]# kubectl get ns
NAME STATUS AGE
default Active 51d
kube-node-lease Active 51d
kube-public Active 51d
kube-system Active 51d
metallb-system Active 58m
nginx Terminating 68s
2:解决方法
[root@k8s-master ns]# kubectl get ns nginx -o json > nginx-ns.json
[root@k8s-master ns]# cat nginx-ns.json
{
"apiVersion": "v1",
"kind": "Namespace",
"metadata": {
"annotations": {
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Namespace\",\"metadata\":{\"annotations\":{},\"name\":\"nginx\"}}\n"
},
"creationTimestamp": "2022-03-17T17:05:40Z",
"deletionTimestamp": "2022-03-17T17:05:44Z",
"labels": {
"kubernetes.io/metadata.name": "nginx"
},
"name": "nginx",
"resourceVersion": "11180",
"uid": "88768b09-79a7-407b-a60d-4133d8cff9e8"
},
"spec": {
"finalizers": [
"kubernetes"
]
},
"status": {
"phase": "Terminating"
}
}
删除spec字段后,执行以下curl命令,使用kube-apiserver的8080端口,执行删除操作
[root@k8s-master ns]# cat nginx-ns.json
{
"apiVersion": "v1",
"kind": "Namespace",
"metadata": {
"annotations": {
"kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Namespace\",\"metadata\":{\"annotations\":{},\"name\":\"nginx\"}}\n"
},
"creationTimestamp": "2022-03-17T17:05:40Z",
"deletionTimestamp": "2022-03-17T17:05:44Z",
"labels": {
"kubernetes.io/metadata.name": "nginx"
},
"name": "nginx",
"resourceVersion": "11180",
"uid": "88768b09-79a7-407b-a60d-4133d8cff9e8"
},
"status": {
"phase": "Terminating"
}
}
curl -k -H "Content-Type: application/json" -X PUT --data-binary @nginx-ns.json http://127.0.0.1:8080/api/v1/namespaces/nginxl/finalize
# 再次查看ns
[root@k8s-master ns]#kubectl get ns
NAME STATUS AGE
default Active 51d
kube-node-lease Active 51d
kube-public Active 51d
kube-system Active 51d
metallb-system Active 63m
#备注:
如果kube-apiserver未开非安全端口,可以手动创建一个代理会话
kubectl proxy --port=8081
curl -k -H "Content-Type: application/json" -X PUT --data-binary @nginx-ns.json http://127.0.0.1:8081/api/v1/namespaces/nginx/finalize