Kubernetes 排坑指北
本文档旨在记录学习 Kubernetes 中,踩过的坑点记录在案,持续更新ing ✨
删除 Terminating 状态的命名空间
错误原因
使用 kubectl delete -f xxx.yaml
,再次执行 kubectl apply -f xxx.yaml
时提示 unable to create new content in namespace kuboard because it is being terminated
。
查看命名空间
$ kubectl get namespace
NAME STATUS AGE
default Active 16h
kube-node-lease Active 16h
kube-public Active 16h
kube-system Active 16h
kuboard Terminating 16h
发现 kuboard
命名空间一直处于 Terminating
状态,无法进行删除。
解决方案
查看 kuboard
的命名空间描述。
$ kubectl get ns kuboard -o json > kuboard.json
编辑 json 文件
$ vi kuboard.json
将
"spec": {
"finalizers": [
"kubernetes"
]
},
更改为,保存并退出。
"spec": {
},
新开一个窗口运行 kubectl proxy
跑一个 API 代理在本地的 8081
端口。
$ kubectl proxy --port=8081
Starting to serve on 127.0.0.1:8081
最后运行 curl
命令进行删除。
curl -k -H "Content-Type:application/json" -X PUT --data-binary @kuboard.json http://127.0.0.1:8081/api/v1/namespaces/kuboard/finalize
注意:命令中的
kuboard
就是命名空间。
再次查看命名空间
$ kubectl get namespace
NAME STATUS AGE
default Active 16h
kube-node-lease Active 16h
kube-public Active 16h
kube-system Active 16h
发现 kuboard
命名空间已经消失了。
最后再次执行 kubectl apply -f xxx.yaml
,就正常了。
参考资料
Q.E.D.