命名空间“卡住”为终止,如何删除它?

问题描述 投票:5回答:4

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

kubernetes namespaces
4个回答
7
投票

对我们来说,这是metrics-server崩溃。

因此,通过以下运行检查这是否与您的案例相关:kubectl api-resources

如果你得到

error: unable to retrieve the complete list of server APIs: metrics.k8s.io/v1beta1: the server is currently unable to handle the request

然后它可能是同样的问题

积分归@javierprovecho here所有


6
投票

假设您已经尝试强制删除资源,例如:Pods stuck at terminating status,并且您的智慧最终会尝试恢复命名空间...

您可以强制删除命名空间(可能留下悬空资源):

(
NAMESPACE=your-rogue-namespace
kubectl proxy &
kubectl get namespace $NAMESPACE -o json |jq '.spec = {"finalizers":[]}' >temp.json
curl -k -H "Content-Type: application/json" -X PUT --data-binary @temp.json 127.0.0.1:8001/api/v1/namespaces/$NAMESPACE/finalize
)
  • 这是答案here的改进,它基于评论here
  • 我正在使用jq实用程序以编程方式删除终结器部分中的元素。你可以手动完成。
  • kubectl proxy默认在127.0.0.1:8001创建监听器。如果您知道群集主服务器的主机名/ IP,则可以使用它。
  • 有趣的是,即使使用kubectl edit,这种方法似乎也有效,但同样的改变没有效果。

4
投票

这是由命名空间控制器无法删除的命名空间中仍存在的资源引起的。

此命令(使用kubectl 1.11+)将显示命名空间中保留的资源:

kubectl api-resources --verbs=list --namespaced -o name \
  | xargs -n 1 kubectl get --show-kind --ignore-not-found -n <namespace>

找到并解决并删除它们后,将清除命名空间


0
投票

我发现删除“terminating”命名空间的唯一方法是删除“终结器”部分中的条目。我试过--force删除它和--grace-period=0没有一个工作,但是,这个方法做了:

在命令行上显示命名空间中的信息:

$ kubectl get namespace your-rogue-namespace -o yaml

这将为您提供yaml输出,查找与此类似的行:

deletionTimestamp: 2018-09-17T13:00:10Z
  finalizers:
  - Whatever content it might be here...
  labels:

然后只需编辑命名空间配置并删除该终结器容器中的项目。

$ kubectl edit namespace your-rogue-namespace

这将打开一个编辑器(在我的例子中为VI),越过我想删除的行并删除它,我按下D键两次删除整行。

保存它,退出编辑器,然后像魔术一样。流氓名称空间应该消失了。

并确认它:

$ kubectl get namespace your-rogue-namespace -o yaml

请注意,之后可能会留下孤立的资源。

© www.soinside.com 2019 - 2024. All rights reserved.