kubernetes 卸载图表后“ingress-nginx-controller”服务仍未删除

e4yzc0pl  于 2023-06-28  发布在  Kubernetes
关注(0)|答案(2)|浏览(290)

我从我的AKS集群卸载了nginx-ingress,几乎所有的资源都被删除了我的主要服务,这是一种LoadBalancer仍然存在,我试图通过使用delete命令手动删除,但仍然没有删除。我不知道这是什么问题,请帮助我解决这个问题。
先谢谢你了

vbopmzt1

vbopmzt11#

这可能是由于service.kubernetes.io/load-balancer-cleanup终结器。
检查Azure-k8s: Not able to delete Load Balancer service?,可能会发生LB类型服务卡死的情况。
我建议你运行kubectl edit svc service_name打开服务,删除下面的部分,并再次保存。

finalizers:
  - service.kubernetes.io/load-balancer-cleanup

如果这没有帮助,请在您的问题中提供详细的详细删除输出+ kubectl describe svc <service-name>,如前所述

k3fezbri

k3fezbri2#

(This不适合注解/从格式中受益)
@Ashis @Vit是正确的,但我会补充一些关于终结器的澄清,以及为什么有时需要打补丁。
同样在“这不是一个好的做法,以消除终结器”这是更准确地说,作为一个一般的经验法则,你不应该这样做。但重要的是要知道为什么你不应该这样做,因为这可以让你理解规则的例外/什么时候可以违反经验法则。

注:就是这样一个案例,原因如下

  • 以下两个是真正的经验法则陈述:
  • 通常你不应该去碰终结器。
  • 通常情况下,资源不应停留在删除状态超过1小时/即使等待24小时也不会转换为已删除。
  • 当你不是在一个正常的情况下,它的罚款去违反经验法则。
    finalizer的作用是什么?

https://kubernetes.io/docs/concepts/overview/working-with-objects/finalizers/

  • 终结器负责自动配置资源的垃圾收集/自动删除。
  • 如果创建服务.yaml可以派生一个CSP LB(云服务提供商负载均衡器)
  • 然后删除service.yaml应该删除产生的CSP LB,以防止现有的孤立资源/成本。
    为什么资源会卡在不可删除的状态?
  • 终结器是帮助这些资源的垃圾收集的实现细节,但是终结器逻辑可能并且偶尔会陷入不一致的状态,需要通过手动干预来解决。
  • https://github.com/kubernetes/kubernetes/issues/39420#issuecomment-546781470

提到有几个竞争条件类型的bug会让服务在删除时陷入困境。/使服务控制器处于混乱状态。(如删除和更新操作同时发生)或删除无法成功,因为已删除。终结器由于竞争条件bug而陷入不一致状态,因此永远不会被更新/删除。

  • 这些竞争条件错误(可重复性不一致,半罕见,但有些常见)发生在OpenShift,GKE,Azure,EKS和DIY Kubernetes中。它们可以发生在Ingress(主要是在GKE上),服务,命名空间,pvcs和其他对象上。
  • 顺便说一句,这个修复finalizer不一致状态的技巧甚至出现在官方的CSP文档中,比如GCP,谷歌人发明了Kubernetes。

https://cloud.google.com/kubernetes-engine/docs/troubleshooting#namespace_stuck_in_terminating_state

如何修复:

读取https://www.middlewareinventory.com/blog/kubectl-delete-stuck-what-to-do/
下面是它所说内容的摘要

  • 首先,遵循不删除终结者/给予垃圾收集时间的经验法则,但在等待1小时后,考虑采取强制措施。
  • 如果你真的很好奇,可以检查kube-controller-manager(或其他控制器,如aws-load-balancer-controller(用于在AWS上运行的集群的kube插件))或存储类控制器插件(用于使用DIY存储类的本地kubernetes)的日志。(这些可能会告诉您终结器卡住的原因。)
  • 如果你了解外部资源是如何被创建的/终结器是如何清理的,并且你愿意检查它是否已经被删除或手动清理,那么你应该可以安全地将终结器修补为null(清除不一致的状态),然后删除对象。
  • 要修复滞留在终止时间超过1小时的资源,请执行以下操作:
  • kubectl patch (service|ingress|pvc|etc) (name-of-resource) -p '{"metadata":{"finalizers":[]}}' --type=merge
  • 要修复名称空间在1h之后终止登录时卡住:
  • 以下代码适用于linux/mac/Win 11 WSL 2的bash,但假设安装了jq(json查询
  • export NS=istio
  • kubectl get ns $NS -o json | jq '.spec.finalizers=[]' | kubectl replace --raw /api/v1/namespaces/$NS/finalize -f -

相关问题