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 ,就正常了。

参考资料

删除 Terminating 状态的命名空间

Q.E.D.


好久不見,今日營業中