我有一个“卡住”的名称空间,我删除显示在这个永恒的“终止”状态。
当前回答
这是由于名称空间控制器无法删除名称空间中仍然存在的资源。
这个命令(使用kubectl 1.11+)将显示名称空间中保留的资源:
kubectl api-resources --verbs=list --namespaced -o name \
| xargs -n 1 kubectl get --show-kind --ignore-not-found -n <namespace>
一旦找到并解析并删除这些名称空间,该名称空间就会被清理
其他回答
我发现删除“终止”名称空间的唯一方法是删除“终结器”部分中的条目。我试过——强制删除它和——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键两次删除整行。
保存它,退出编辑器,就像变魔术一样。rogue-namespace应该消失了。
为了证实这一点:
$ kubectl get namespace your-rogue-namespace -o yaml
在我的案例中,问题是由自定义指标引起的。
要了解导致问题的原因,只需运行以下命令:
kubectl api-resources | grep -i false
这将告诉您是哪些api资源导致了问题。一旦识别出来,就删除它:
kubectl delete apiservice v1beta1.custom.metrics.k8s.io
一旦删除,命名空间就会消失。
这里有一个(又一个)解决方案。它使用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 -
手动编辑nsyaml对我来说不起作用,编辑时没有抛出错误,但更改没有生效。
这招对我很管用:
在一次会议中:
kubectl proxy
在另一个外壳中:
kubectl get ns <rouge-ns> -o json | jq '.spec.finalizers=[]' | curl -X PUT http://localhost:8001/api/v1/namespaces/<rouge-ns>/finalize -H "Content-Type: application/json" --data @-
来源:https://virtual-simon.co.uk/vsphere-kubernetes-force-deleting-stuck-terminating-namespaces-and-contexts/
完成nobar已经很棒的回答。如果您使用Rancher部署集群,则需要注意。
牧场主部署改变每一个api调用,prepending /k8s/clusters/c-XXXXX/到url。
rancher上集群的id (c-XXXXX)可以很容易地从rancher UI中获得,因为它将出现在URL中。
所以在你得到集群id c-xxxx之后,就按照nobar说的去做,只是改变api调用,包括rancher位。
(
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/k8s/clusters/c-XXXXX/api/v1/namespaces/$NAMESPACE/finalize
)
推荐文章
- Kubernetes支持多个环境(Staging、QA、生产等)
- CSS中*和*|*的区别是什么?
- Kubernetes API -获取特定节点上的pod
- 我如何调试“ImagePullBackOff”?
- Django:“projects”vs“apps”
- 在Kubernetes中更新configmap时重新启动pod ?
- 输入对象的datetime。Datetime没有Datetime属性
- 为部署的Kubernetes服务获取YAML ?
- 如何在kubernetes中切换命名空间
- \(反斜杠)在PHP(5.3+)中做什么?
- 位于另一个名称空间中的服务
- 命名空间“卡住”作为终止,我如何删除它
- Kubernetes如何使部署更新映像
- 如何在c++中正确使用名称空间?
- 如何在gcloud和minikube之间切换kubectl集群