命名空间“卡住”为终止

raj*_*rma 12 namespaces kubernetes rancher amazon-eks

我在终止集群中的命名空间时遇到问题,它在命名空间 JSON 中显示了许多参数。我点击了此链接https://medium.com/@craignewtondev/how-to-fix-kubernetes-namespace-deleting-stuck-in-termination-state-5ed75792647e

 "spec": {},
    "status": {
        "conditions": [
            {
                "lastTransitionTime": "2021-01-11T08:41:48Z",
                "message": "All resources successfully discovered",
                "reason": "ResourcesDiscovered",
                "status": "False",
                "type": "NamespaceDeletionDiscoveryFailure"
            },
            {
                "lastTransitionTime": "2021-01-11T08:41:48Z",
                "message": "All legacy kube types successfully parsed",
                "reason": "ParsedGroupVersions",
                "status": "False",
                "type": "NamespaceDeletionGroupVersionParsingFailure"
            },
            {
                "lastTransitionTime": "2021-01-11T08:41:48Z",
                "message": "All content successfully deleted, may be waiting on finalization",
                "reason": "ContentDeleted",
                "status": "False",
                "type": "NamespaceDeletionContentFailure"
            },
            {
                "lastTransitionTime": "2021-01-11T08:42:09Z",
                "message": "All content successfully removed",
                "reason": "ContentRemoved",
                "status": "False",
                "type": "NamespaceContentRemaining"
            },
            {
                "lastTransitionTime": "2021-01-11T08:41:48Z",
                "message": "All content-preserving finalizers finished",
                "reason": "ContentHasNoFinalizers",
                "status": "False",
                "type": "NamespaceFinalizersRemaining"
            }
        ],
        "phase": "Terminating"
    }
}```
Run Code Online (Sandbox Code Playgroud)

raj*_*rma 35

我找到了终止卡住的命名空间的答案。

for ns in $(kubectl get ns --field-selector status.phase=Terminating -o jsonpath='{.items[*].metadata.name}')
do
  kubectl get ns $ns -ojson | jq '.spec.finalizers = []' | kubectl replace --raw "/api/v1/namespaces/$ns/finalize" -f -
done

for ns in $(kubectl get ns --field-selector status.phase=Terminating -o jsonpath='{.items[*].metadata.name}')
do
  kubectl get ns $ns -ojson | jq '.metadata.finalizers = []' | kubectl replace --raw "/api/v1/namespaces/$ns/finalize" -f -
done
Run Code Online (Sandbox Code Playgroud)

  • 这个解决方案神奇地起作用了。感谢@rajendra sharma 发布解决方案 (3认同)

小智 11

首先导出 env 中的命名空间名称,该名称在终止状态下被击中

export NAMESPACE="monitoring"
Run Code Online (Sandbox Code Playgroud)

然后运行以下命令删除终止命名空间

kubectl get namespace $NAMESPACE -o json   | tr -d "\n" | sed "s/\"finalizers\": \[[^]]\+\]/\"finalizers\": []/"   | kubectl replace --raw /api/v1/namespaces/$NAMESPACE/finalize -f -
Run Code Online (Sandbox Code Playgroud)


Mal*_*ata 7

您使用的教程不正确,因为通过删除终结器来删除命名空间并不是一个好方法,因为它可能会将资源注册到不存在的命名空间。请查看这篇文章:finalizer-kubernetes-ns

您可以尝试通过以下方式找出命名空间中哪些资源正在等待删除:

  • 使用命令查找仍然存在的所有资源 kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get -n $yotur-ns-to-delete
  • 检查是否有任何 apiservice 不可用,因此不会通过执行命令来提供其资源 kubectl get apiservice|grep False

另请看一下这个问题:ns-kubernetes-stuck-termination