gpt4 book ai didi

kubernetes - 如何强制删除Kubernetes命名空间?

转载 作者:行者123 更新时间:2023-12-02 11:27:27 25 4
gpt4 key购买 nike

如何强制删除停留在终止中的命名空间?

重建步骤:

  • 应用此YAML
  • apiVersion: v1
    kind: Namespace
    metadata:
    name: delete-me
    spec:
    finalizers:
    - foregroundDeletion
  • kubectl delete ns delete-me
  • 无法删除delete-me

  • 我发现的唯一解决方法是销毁并重新创建整个集群。

    我尝试过的事情:

    这些都不起作用或修改命名空间。在这些方法中的任何一个之后,仍然存在问题的终结器。

    编辑YAML和 kubectl apply
    应用:
    apiVersion: v1
    kind: Namespace
    metadata:
    name: delete-me
    spec:
    finalizers:
    $ kubectl apply -f tmp.yaml 

    namespace/delete-me configured

    该命令无错误地结束,但 namespace 未删除。

    下面的YAML具有相同的结果:
    apiVersion: v1
    kind: Namespace
    metadata:
    name: delete-me
    spec:
    kubectl edit kubectl edit ns delete-me,并删除终结器。同上完全删除列表。同上删除 spec。同上用空列表替换 finalizers
    $ kubectl edit ns delete-me 

    namespace/delete-me edited

    这不会显示任何错误信息,但不会更新命名空间。再次对该对象进行 kubectl edit即可显示终结器仍然存在。
    kubectl proxy &
  • kubectl proxy &
  • curl -k -H "Content-Type: application/yaml" -X PUT --data-binary @tmp.yaml http://127.0.0.1:8001/api/v1/namespaces/delete-me/finalize

  • 如上所述,此操作成功退出但不执行任何操作。

    强制删除
    kubectl delete ns delete-me --force --grace-period=0
    实际上会导致错误:
    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.
    Error from server (Conflict): Operation cannot be fulfilled on namespaces "delete-me": The system is ensuring all content is removed from this namespace. Upon completion, this namespace will automatically be purged by the system.

    但是,它实际上没有任何作用。

    等了好久

    在我为调试此问题而设置的测试集群中,我已经等待了一个多星期。即使命名空间可能最终决定删除,我也需要比一周快的时间删除它。

    确保命名空间为空

    命名空间为空。
    $ kubectl get -n delete-me all

    No resources found.
    etcdctl
    $ etcdctl --endpoint=http://127.0.0.1:8001 rm /namespaces/delete-me

    Error: 0: () [0]

    我很确定这是一个错误,但是我不知道该如何解释。它也不起作用。还尝试了 --dir-r
    ctron/kill-kube-ns
    有一个 script for force deleting Namespaces。这也不起作用。
    $ ./kill-kube-ns delete-me

    Killed namespace: delete-me

    $ kubectl get ns delete-me

    NAME STATUS AGE
    delete-me Terminating 1h
    POST将编辑的资源/ finalize

    Returns a 405。我不确定这是否是POST到/ finalize的规范方法。

    链接

    This
    appears
    to
    be
    a
    recurring
    problem
    and
    none
    of
    these
    resources
    helped

    Kubernetes bug

    最佳答案

    kubectl proxy尝试几乎是正确的,但并不完全正确。可以使用JSON代替YAML来解决问题,但我不确定。

    终结符列表为空的JSON:

    ~$ cat ns.json

    {
    "kind": "Namespace",
    "apiVersion": "v1",
    "metadata": {
    "name": "delete-me"
    },
    "spec": {
    "finalizers": []
    }
    }

    使用 curl对对象进行 PUT,而不会遇到有问题的终结器。
    ~$ curl -k -H "Content-Type: application/json" -X PUT --data-binary @ns.json http://127.0.0.1:8007/api/v1/namespaces/delete-me/finalize

    {
    "kind": "Namespace",
    "apiVersion": "v1",
    "metadata": {
    "name": "delete-me",
    "selfLink": "/api/v1/namespaces/delete-me/finalize",
    "uid": "0df02f91-6782-11e9-8beb-42010a800137",
    "resourceVersion": "39047",
    "creationTimestamp": "2019-04-25T17:46:28Z",
    "deletionTimestamp": "2019-04-25T17:46:31Z",
    "annotations": {
    "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Namespace\",\"metadata\":{\"annotations\":{},\"name\":\"delete-me\"},\"spec\":{\"finalizers\":[\"foregroundDeletion\"]}}\n"
    }
    },
    "spec": {

    },
    "status": {
    "phase": "Terminating"
    }
    }

    命名空间已删除!
    ~$ kubectl get ns delete-me

    Error from server (NotFound): namespaces "delete-me" not found

    关于kubernetes - 如何强制删除Kubernetes命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55853312/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com