我有一个“卡住”的名称空间,我删除显示在这个永恒的“终止”状态。
当前回答
我喜欢这个答案 它只有两个命令。
在一个终端:
kubectl proxy
在另一个终端:
kubectl get ns delete-me -o json | \
jq '.spec.finalizers=[]' | \
curl -X PUT http://localhost:8001/api/v1/namespaces/delete-me/finalize -H "Content-Type: application/json" --data @-
其他回答
你可以运行一些东西。但这通常意味着,命名空间的自动删除无法完成,并且有一个正在运行的进程必须手动删除。要找到它,你可以做这些事情:
把所有的资料都集中到这个名字空间。如果这没有任何结果,继续下一个建议
$ kubectl get all -n your-namespace
一些命名空间附加了apiserivces,删除起来很麻烦。这可以是你想要的任何资源。然后,如果发现任何信息,就删除该资源
$ kubectl get apiservice|grep False
但主要的收获是,可能有一些东西没有完全去除。因此,您可以看到最初在该名称空间中有什么,然后可以看到yaml旋转了哪些内容以查看进程。或者你可以开始谷歌为什么不适当删除服务X,你会发现事情。
这里有一个(又一个)解决方案。它使用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 -
单行命令
kubectl patch ns <Namespace_to_delete> -p '{"metadata":{"finalizers":null}}'
简单的技巧
你只能在控制台编辑命名空间kubectl编辑<命名空间名称>删除/删除“Kubernetes”从终结器部分(应该像“finalizers”:[])并按enter或保存/应用更改。
你也可以一步完成。
诀窍:1
Kubectl获取命名空间烦扰-命名空间-删除-o json > tmp.json 然后编辑tmp。从终结器中删除“kubernetes 打开另一个终端运行命令kubectl代理,在Curl下面运行
curl -k -H "Content-Type: application/json" -X PUT——data-二进制 @tmp。json https://localhost:8001/api/v1/namespaces/<NAMESPACE NAME TO DELETE>/finalize . json
它应该删除您的名称空间。
循序渐进指南
使用命令启动代理:
kubectl代理
kubectl代理&开始服务 127.0.0.1:8001
找到名称空间
Kubectl得到ns
{您的命名空间名称}终止1d
把它归档
kubectl获取命名空间{您的命名空间名称}-o json > tmp.json
编辑tmp文件。Json并删除终结器
"spec" "finalizers" "kubernetes"
编辑之后,它应该是这样的
,“规范”:{“终结者”:[]},
我们现在只需运行curl并更新其中的名称空间值就差不多了
curl -k -H "Content-Type: application/json" -X PUT——data-二进制 @tmp。json http://127.0.0.1:8001/api/v1/namespaces/{Your namespace 名称}/完成
它消失了
**
编辑: 不建议删除终结器。 正确的做法是:
删除命名空间下的所有资源。
Github问题链接
我通常的工作空间是一个小的k8s集群,我经常破坏并重新构建它,这就是为什么删除终结器方法适合我。
原来的答案:我经常遇到同样的问题。
这就是我的工作
kubectl get ns your-namespace -o json > ns-without-finalizers.json
编辑ns-without-finalizers.json。将所有终结器替换为空数组。
运行kubectl代理(通常在另一个终端上运行)
然后curl这个命令
curl -X PUT http://localhost:8001/api/v1/namespaces/your-namespace/finalize -H "Content-Type: application/json" --data @ns-without-finalizers.json
完成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
)
推荐文章
- Printf与std::字符串?
- Kubectl连续日志
- 我的kubernetes豆荚不断崩溃与“CrashLoopBackOff”,但我找不到任何日志
- 如何从kubectl配置中删除集群和上下文?
- Kubernetes支持多个环境(Staging、QA、生产等)
- CSS中*和*|*的区别是什么?
- Kubernetes API -获取特定节点上的pod
- 我如何调试“ImagePullBackOff”?
- Django:“projects”vs“apps”
- 在Kubernetes中更新configmap时重新启动pod ?
- 输入对象的datetime。Datetime没有Datetime属性
- 为部署的Kubernetes服务获取YAML ?
- 如何在kubernetes中切换命名空间
- \(反斜杠)在PHP(5.3+)中做什么?
- 位于另一个名称空间中的服务