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


当前回答

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

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

对于名称空间来说是这样

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

其他回答

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

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

如果你得到

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

那可能是同一个问题

感谢@javierprovecho

正如之前在这个线程中提到的,还有另一种方法可以使用kubectl没有公开的API来终止名称空间,即使用kubectl的现代版本,其中kubectl replace——raw可用(不确定从哪个版本)。通过这种方式,您将不必生成kubectl代理进程,并避免与curl的依赖(在一些环境中,如busybox是不可用的)。为了帮助其他人,我在这里留下了这个:

kubectl get namespace "stucked-namespace" -o json \
  | tr -d "\n" | sed "s/\"finalizers\": \[[^]]\+\]/\"finalizers\": []/" \
  | kubectl replace --raw /api/v1/namespaces/stucked-namespace/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 名称}/完成

它消失了

**

完成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
)
curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json 127.0.0.1:8001/k8s/clusters/c-mzplp/api/v1/namespaces/rook-ceph/finalize

这对我来说很有效,命名空间消失了。

详细的解释可以在https://github.com/rook/rook/blob/master/Documentation/ceph-teardown.md链接中找到。

这发生在我中断kubernetes安装(Armory Minnaker)时。然后我继续删除名称空间并重新安装它。由于终结器的原因,我被困在豆荚的终止状态中。我把命名空间放到了tmp中。Json,从tmp删除终结器。Json文件,并执行curl命令。 解决这个问题后,我使用脚本卸载集群以消除残留,并重新安装。