我们有一个集群,其中似乎永远都不想完全删除名称空间,现在无法重新创建自定义指标名称空间以能够收集自定义指标以正确设置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
答案 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)
唯一适用于我的解决方案是:
kubectl get namespace annoying-namespace-to-delete -o json > tmp.json
edit tmp.json and remove"kubernetes"
的 "spec": { "finalizers":[]}
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,人们在尝试各种不同的结果时会有不同的结果:
mygroup
背景更多,但位于窗格级别here too。
答案 3 :(得分:1)
kubectl get namespace <namespace-to-delete> -o json > tmp.json
观察:替换
例如:"spec": { "finalizers":[ ]}
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.
几分钟后,问题消失了。
命名空间可能要删除很长时间 在确实产生的问题之后 很多被驱逐的豆荚。