我删除了一个“卡住”的命名空间,显示在这个永恒的“终止”状态。
对我们来说,这是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所有
假设您已经尝试强制删除资源,例如: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
)
这是由命名空间控制器无法删除的命名空间中仍存在的资源引起的。
此命令(使用kubectl 1.11+)将显示命名空间中保留的资源:
kubectl api-resources --verbs=list --namespaced -o name \
| xargs -n 1 kubectl get --show-kind --ignore-not-found -n <namespace>
找到并解决并删除它们后,将清除命名空间
我发现删除“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
请注意,之后可能会留下孤立的资源。