我有一个“卡住”的名称空间,我删除显示在这个永恒的“终止”状态。


当前回答

类似的事情发生在我身上,在我的情况下,它是pv & pvc,我通过将终结器设置为null强行删除。看看你是否可以用ns做类似的事情

kubectl patch pvc <pvc-name> -p '{"metadata":{"finalizers":null}}'

对于名称空间来说是这样

kubectl patch ns <ns-name> -p '{"spec":{"finalizers":null}}'

其他回答

请尝试以下命令:

kubectl patch ns <your_namespace> -p '{"metadata":{"finalizers":null}}'

这里有一个(又一个)解决方案。它使用jq从json中移除finalisers块,并且不需要kubectl代理:

namespaceToDelete=blah

kubectl get namespace "$namespaceToDelete" -o json \
  | jq 'del(.spec.finalizers)' \
  | kubectl replace --raw /api/v1/namespaces/$namespaceToDelete/finalize -f -

强制删除名称空间或删除终结器绝对不是正确的方法,因为这可能会使资源注册到一个不存在的名称空间。

这通常很好,但有一天您将无法创建资源,因为它仍然在某个地方徘徊。

即将发布的Kubernetes 1.16版本应该会对名称空间终结器有更多的了解,目前我将依赖于标识策略。 一个很酷的脚本试图自动化这些是:https://github.com/thyarles/knsk

然而,它可以跨所有名称空间工作,这可能是危险的。它的解决方案是:https://github.com/kubernetes/kubernetes/issues/60807#issuecomment-524772920

博士tl;

检查是否有apiservice不可用,因此没有服务它的资源:kubectl get apiservice|grep False 通过kubectl api-resources——verbs=list——namespaced -o name | xargs -n 1 kubectl get -n $your-ns-to-delete查找所有仍然存在的资源

(来源:https://github.com/kubernetes/kubernetes/issues/60807 # issuecomment - 524772920)

对我们来说,是参数服务器崩溃。

因此,要检查这是否与您的情况相关,请运行以下命令:kubectl api-resources

如果你得到

错误:无法检索服务器api的完整列表:metrics.k8s。Io /v1beta1:服务器当前无法处理请求

那可能是同一个问题

感谢@javierprovecho

如果命名空间停留在终止状态,而该命名空间中的资源已经被删除,您可以在删除命名空间之前修补该命名空间的终结器:

kubectl patch ns ns_to_be_deleted -p '{"metadata":{"finalizers":null}}';

then

kubectl delete ns ns_to_be_deleted;

编辑:

请先查看@Antonio Gomez Alvarado的回答。根本原因可能是答案中提到的度量服务器。