这里以cattle-system为例!执行删除命令后namespace(也是用其他k8s object)仍然存在,首先执行

kubectl edit namespace cattle-system

查看是否存在spec.finalizers: kubernetes,如:

spec:
  finalizers:
  - kubernetes

如果不存在spec.finalizers,删除如下行,保存退出后,namespace则被删除:

        "deletionTimestamp": "2023-03-23T11:47:05Z",
        "finalizers": [
            "controller.cattle.io/namespace-auth"
        ],

如果存在spec.finalizers,就要麻烦一些:

1、启动apiserver代理:kubectl proxy --port=8081 

2、执行如下代码,需指定要删除的<namespace>

NAMESPACE=<namespace>
kubectl get namespace ${NAMESPACE} -o json > ${NAMESPACE}.json
vi ${NAMESPACE}.json

3、编辑json文件,删除如下内容(有就删,没有则忽略):

        "deletionTimestamp": "2023-03-28T04:31:47Z",
        "finalizers": [
            "controller.cattle.io/namespace-auth"
        ],
    "spec": {
        "finalizers": [
            "kubernetes"
        ]
    },

4、直接调用apiserver

curl -k -H "Content-Type: application/json" -X PUT --data-binary @${NAMESPACE}.json http://127.0.0.1:8081/api/v1/namespaces/${NAMESPACE}/finalize
kubectl get namespace

5、清理json文件:rm -rf ${NAMESPACE}.json

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐