删除namespace一直处于Terminating状态

容器与中间件容器服务技术服务知识库
问题描述

删除 namespace 一直处于 Terminating 状态

运行环境
  • 容器服务 VKE
问题原因

可能原因1:资源发现

如果罗列资源发生报错,可能导致 namespace 卡主 Terminating 状态:

  • 查看 namespace 卡在 Terminating 的原因 - Discovery failed for some groups
$ kubectl get namespace <name> -o yaml
conditions:
  - lastTransitionTime: "2021-03-12T12:46:17Z"
    message: 'Discovery failed for some groups, 1 failing: unable to retrieve the
      complete list of server APIs: webhook.cert-manager.io/v1beta1: the server is
      currently unable to handle the request'
    reason: DiscoveryFailed
    status: "True"
    type: NamespaceDeletionDiscoveryFailure

  • 查看 apiservice 的状态
$ kubectl get apiservice
NAME                                   SERVICE                             AVAILABLE                 AGE
v1beta1.webhook.cert-manager.io        cert-manager/cert-manager-webhook   False (ServiceNotFound)   3d23h

解决方法:将异常的apiservice状态恢复成True或者删除不需要的apiservice,即可恢复。

可能原因2:finalizer

finalizer 导致 namespace Terminating 一般为以下两种情况: 1. namespace资源对象的spec.finalizer[] 列表中不为空 解决方法:手动清空finalizer列表

  $ kubectl get ns demo -o json | jq '.spec.finalizers=[]' > ns-without-finalizers.json
  cat ns-without-finalizers.json
  $ kubectl proxy &
  $ PID=$!
  $ curl -X PUT http://localhost:8001/api/v1/namespaces/demo/finalize -H "Content-Type: application/json" --data-binary @ns-without-finalizers.json
  $ kill $PID

2. namespace资源对象的metadata.finalizer[] 列表不为空 比如:将集群托管到 rancher 管理后,rancher 就会写 finalizer 到metadata.finalizer[] 列表,而当集群脱离 rancher 管理之后,手动删除namespace,往往就会发生 Terminating。 解决方法: 将 metadata.finalizer[]列表删除

$ kubelet edit ns <name>

如果您有其他问题,欢迎您联系火山引擎技术支持服务

19
0
0
0
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论