Kubernetes命名空间处于终止状态

时间:2018-10-23 16:52:30

标签: kubernetes

我们有一个集群,其中似乎永远都不想完全删除名称空间,现在无法重新创建自定义指标名称空间以能够收集自定义指标以正确设置HPA。我完全理解,我可以使用所有自定义指标资源创建另一个名称空间,但考虑到名称空间陷入“终止”状态,则有点担心群集的整体运行状况

$ kubectl get ns
NAME             STATUS        AGE
cert-manager     Active        14d
custom-metrics   Terminating   7d
default          Active        222d
nfs-share        Active        15d
ingress-nginx    Active        103d
kube-public      Active        222d
kube-system      Active        222d
lb               Terminating   4d
monitoring       Terminating   6d
production       Active        221d

我已经尝试将名称空间导出为JSON,删除终结器并使用已编辑的JSON文件重新创建。还尝试kubectl编辑ns自定义指标并删除“-kubernetes”终结器。全部无济于事。

有人对我如何尝试销毁这些“卡住的”命名空间有其他建议吗?

https://master-ip/api/v1/namespace/...../finalize的卷曲对我来说似乎不适用于Google Kubernetes Engine,我假设在GKE集群上不允许这些操作

尝试类似的方法也不起作用:

$ kubectl delete ns custom-metrics --grace-period=0 --force
  

警告:立即删除不会等待确认   正在运行的资源已终止。资源可能会继续运行   无限期地在群集上。服务器错误(冲突):操作   无法在名称空间“自定义指标”上实现:系统为   确保从此名称空间中删除所有内容。完成后,   该名称空间将由系统自动清除。

,此命名空间中根本没有列出资源: kubectl get all -n custom-metrics或循环访问此命名空间中的所有api资源都表明根本不存在任何资源: kubectl api-resources --namespaced=true -o name | xargs -n 1 kubectl get -n custom-metrics

7 个答案:

答案 0 :(得分:8)

我做了与rahul.tripathi类似的事情,除了卷曲对我不起作用-我跟随https://medium.com/@craignewtondev/how-to-fix-kubernetes-namespace-deleting-stuck-in-terminating-state-5ed75792647e进行了以下操作:

NAMESPACE=
kubectl get namespace $NAMESPACE -o json > $NAMESPACE.json
sed -i -e 's/"kubernetes"//' $NAMESPACE.json
kubectl replace --raw "/api/v1/namespaces/$NAMESPACE/finalize" -f ./$NAMESPACE.json

Voila!命名空间已删除

答案 1 :(得分:4)

唯一适用于我的解决方案是:

  1. kubectl get namespace annoying-namespace-to-delete -o json > tmp.json

  2. 来自edit tmp.json and remove"kubernetes"
  3. "spec": { "finalizers":[]}

  4. curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json https://kubernetes-cluster-ip/api/v1/namespaces/annoying-namespace-to-delete/finalize

这将删除您的名称空间,

答案 2 :(得分:3)

看起来像是known issue,人们在尝试各种不同的结果时会有不同的结果:

  • 弹跳kube-controller-manager
  • 弹跳所有kubelets
  • 弹跳整个集群
  • mygroup
  • 修补终结器到处都是“空”。

背景更多,但位于窗格级别here too

答案 3 :(得分:1)

    1. 获取当前状态:
kubectl get namespace <namespace-to-delete> -o json > tmp.json

观察:替换

    1. 编辑 tmp.json 并从 "spec" 中删除 "kubernetes":{ "finalizers":['kubernetes']}

例如:"spec": { "finalizers":[ ]}

    1. 更改命名空间并删除:
curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json https://<kubernetes-cluster-ip>/api/v1/namespaces/<namespace-to-delete>/finalize -H "Authorization: Bearer <token-Account>"

Obs.: 替换 namespace-to-delete、token-Account 和 token-Account

答案 4 :(得分:0)

对我来说,用--grace-period=0 --force删除从未成功。 Rico's answer很好,但是您可能无需重新启动集群即可做到这一点。

就我而言,总是有一些 对象,这些对象是在您“删除”命名空间后重新创建的。

要查看在命名空间中存在或不在Kubernetes资源中:

kubectl api-resources --namespaced=true
kubectl api-resources --namespaced=false

我正在做的是浏览它,找到所有在特定名称空间中使用过的k8s对象,并手动删除它们。

编辑: 查找要删除的对象的另一个有用命令:

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

答案 5 :(得分:0)

能够通过从this repo安装Prometheus运算符然后仅尝试删除名称空间来进行复制。

首次运行:

k apply -f manifests/

该命令创建monitoring命名空间,一堆命名空间资源(例如部署和configmap)以及未命名空间的资源(例如角色等)。

然后必须删除名称空间:

k delete ns monitoring

有一个想法,Kubernetes将删除所有相应的资源。结果,删除了命名空间中的所有对象,但是命名空间本身陷入了Terminated状态

仅说明一下,这是“删除”命名空间后剩余的杂散资源的列表。只有在相应的文件夹上运行kubectl delete后,这些资源才会被删除:

customresourcedefinition.apiextensions.k8s.io "podmonitors.monitoring.coreos.com" deleted
customresourcedefinition.apiextensions.k8s.io "prometheuses.monitoring.coreos.com" deleted
customresourcedefinition.apiextensions.k8s.io "prometheusrules.monitoring.coreos.com" deleted
customresourcedefinition.apiextensions.k8s.io "servicemonitors.monitoring.coreos.com" deleted
clusterrole.rbac.authorization.k8s.io "prometheus-operator" deleted
clusterrolebinding.rbac.authorization.k8s.io "prometheus-operator" deleted
clusterrole.rbac.authorization.k8s.io "kube-state-metrics" deleted
clusterrolebinding.rbac.authorization.k8s.io "kube-state-metrics" deleted
clusterrole.rbac.authorization.k8s.io "node-exporter" deleted
clusterrolebinding.rbac.authorization.k8s.io "node-exporter" deleted
apiservice.apiregistration.k8s.io "v1beta1.metrics.k8s.io" deleted
clusterrole.rbac.authorization.k8s.io "prometheus-adapter" deleted
clusterrole.rbac.authorization.k8s.io "system:aggregated-metrics-reader" deleted
clusterrolebinding.rbac.authorization.k8s.io "prometheus-adapter" deleted
clusterrolebinding.rbac.authorization.k8s.io "resource-metrics:system:auth-delegator" deleted
clusterrole.rbac.authorization.k8s.io "resource-metrics-server-resources" deleted
rolebinding.rbac.authorization.k8s.io "resource-metrics-auth-reader" deleted
clusterrole.rbac.authorization.k8s.io "prometheus-k8s" deleted
clusterrolebinding.rbac.authorization.k8s.io "prometheus-k8s" deleted
rolebinding.rbac.authorization.k8s.io "prometheus-k8s" deleted
role.rbac.authorization.k8s.io "prometheus-k8s" deleted

如果您的命名空间停留在Terminated状态,则该实验很可能证明了这一想法,总会有剩余资源引用它并阻止其被删除。 清理它的最简单(正确)方法是使用与创建它时相同的工具(kubectl apply,Helm等)。

答案 6 :(得分:0)

在删除命名空间时遇到问题:

kubectl delete namespaces "localkube-ns" 

Error from server (Conflict):
Operation cannot be fulfilled on namespaces "localkube-ns": 
The system is ensuring all content is removed from this namespace.  
Upon completion, this namespace will automatically be purged by the system.

几分钟后,问题消失了。

命名空间可能要删除很长时间 在确实产生的问题之后 很多被驱逐的豆荚。