优雅解决kubernetes集群namespace删除卡在terminating状态问题
问题描述
在k8s中删除命名空间时,有时候会遇到卡在terminating状态,命名空间永远无法完成删除操作,即使加了--force等强制删除的参数也无济于事。
常见解决方法
在google等搜索引擎搜索,可以得到一种常见的解决办法:
大致思路如下:
- 清理ns的finalizers
- 调用apiserver强删
治本方案
-
kubectl get ns xxx -o yaml
-
看到有如下提示
conditions: - lastTransitionTime: "2022-11-16T09:35:55Z" message: 'Discovery failed for some groups, 1 failing: unable to retrieve the complete list of server APIs: metrics.k8s.io/v1beta1: the server is currently unable to handle the request' reason: DiscoveryFailed status: "True" type: NamespaceDeletionDiscoveryFailure
-
推测是metrics-server不能正常运行,删掉metrics-server负载无效
-
需要删除该api组:
k delete apiservice v1beta1.metrics.k8s.io
-
所有删除卡住的namespace,都可以describe查看到具体哪些资源没删掉。然后describe该具体资源,一般是有finalizer,将finalizer删掉即可删除该资源。命名空间下的所有子资源删除掉后,命名空间会自动完成删除。
参考
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。