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


当前回答

调试类似的问题。

有两件重要的事情需要考虑:

1)在从命名空间中删除终结器之前要三思,因为可能有一些资源您不想自动删除,或者至少要了解为了排除故障而删除了哪些资源。

2)像kubectl api-resources——verbs=list这样的命令可能不会提供由外部crds创建的资源。


在我的例子中:

我用kubectl编辑ns <ns-name>,在状态->条件下,我看到我安装的一些外部crds未能被删除,因为它们添加了定义的终结器:

 - lastTransitionTime: "2021-06-14T11:14:47Z"
    message: 'Some content in the namespace has finalizers remaining: finalizer.stackinstall.crossplane.io
      in 1 resource instances, finalizer.stacks.crossplane.io in 1 resource instances'
    reason: SomeFinalizersRemain
    status: "True"
    type: NamespaceFinalizersRemaining

其他回答

在我的案例中,问题是由自定义指标引起的。

要了解导致问题的原因,只需运行以下命令:

kubectl api-resources | grep -i false

这将告诉您是哪些api资源导致了问题。一旦识别出来,就删除它:

kubectl delete apiservice v1beta1.custom.metrics.k8s.io

一旦删除,命名空间就会消失。

调试类似的问题。

有两件重要的事情需要考虑:

1)在从命名空间中删除终结器之前要三思,因为可能有一些资源您不想自动删除,或者至少要了解为了排除故障而删除了哪些资源。

2)像kubectl api-resources——verbs=list这样的命令可能不会提供由外部crds创建的资源。


在我的例子中:

我用kubectl编辑ns <ns-name>,在状态->条件下,我看到我安装的一些外部crds未能被删除,因为它们添加了定义的终结器:

 - lastTransitionTime: "2021-06-14T11:14:47Z"
    message: 'Some content in the namespace has finalizers remaining: finalizer.stackinstall.crossplane.io
      in 1 resource instances, finalizer.stacks.crossplane.io in 1 resource instances'
    reason: SomeFinalizersRemain
    status: "True"
    type: NamespaceFinalizersRemaining

对于任何想为Kubernetes的新版本寻找一些命令的人来说,这对我很有帮助。

NAMESPACE=mynamespace
kubectl get namespace $NAMESPACE -o json | sed 's/"kubernetes"//' | kubectl replace --raw "/api/v1/namespaces/$NAMESPACE/finalize" -f -

在Kubernetes v1.24.1中测试

我有类似的问题与metric -server,执行kubectl获得namespace < namespace - here > -o json后,我发现这条消息:

"某些组的发现失败,1失败:无法检索 服务器api的完整列表:Io /v1beta1:错误 服务器("内部服务器错误: \ " / api / metrics.k8s.io / v1beta1吗?timeout=32s\":未经授权")已经生效 阻止请求成功

我在这个集群上安装了旧版本的metrics-server。我只是删除了这些资源。因为它是安装在:

kubectl apply -f metrics-server-0.3.7/deploy/1.8+/ --dry-run -o yaml | kubectl apply -f -

这个命令删除了所有这些:

kubectl apply -f metrics-server-0.3.7/deploy/1.8+/ --dry-run -o yaml | kubectl delete -f -

最后,该名称空间在几秒钟后消失。

我假设,如果你有一个最新的版本,你可以删除:

1. YAML安装(此处):

kubectl delete -f https://github.com/kubernetes-sigs/metrics-server/releases/download/<VERSION-HERE>/components.yaml

2. 舵图安装(此处)

helm uninstall metrics-server

不要忘记用正确的版本重新安装它。

这里有一个(又一个)解决方案。它使用jq从json中移除finalisers块,并且不需要kubectl代理:

namespaceToDelete=blah

kubectl get namespace "$namespaceToDelete" -o json \
  | jq 'del(.spec.finalizers)' \
  | kubectl replace --raw /api/v1/namespaces/$namespaceToDelete/finalize -f -