Ingress-controller-nginx 领导者选举 - 为什么?

Bre*_*nen 5 kubernetes kubernetes-ingress nginx-ingress

谁能解释为什么在部署具有多个副本的入口控制器(nginx)时需要领导者选举?他们之间有同步吗?实际上同步了什么?

我搜索了文档并发现...我不知道有一个 configmap 保存了领导者的 POD 名称,但仅此而已。

我还看到启动 Pod 时正在进行领导者选举

I0828 16:08:39.500651       7 nginx.go:307] Starting NGINX process
I0828 16:08:39.500779       7 leaderelection.go:242] attempting to acquire leader lease ingresscontroller/ingress-controller-leader...
I0828 16:08:39.500890       7 nginx.go:327] Starting validation webhook on :8443 with keys /usr/local/certificates/cert /usr/local/certificates/key
I0828 16:08:39.503049       7 controller.go:141] Configuration changes detected, backend reload required.
I0828 16:08:39.504322       7 status.go:86] new leader elected: ingress-nginx-controller-xxxxxx-xxxx
I0828 16:08:39.728368       7 controller.go:157] Backend successfully reloaded.
I0828 16:08:39.728416       7 controller.go:166] Initial sync, sleeping for 1 second.
Run Code Online (Sandbox Code Playgroud)

谁能提供一些关于为什么需要领导者的见解?

提前致谢!

布雷特

Arg*_*dhu 4

简单来说,领导者选举是一种机制,保证 nginx 入口控制器中只有一个实例正在主动做出决策,而所有其他实例均处于非活动状态,但如果活动实例发生问题,则准备好接管领导权。

这本质上与 Kubernetes 的控制平面组件(例如 kube-controller-manager 或 kube-scheduler)非常相似。

同步是将 Ingress 资源中定义的规则中的所需状态同步到实际的 nginx 配置文件中。

nginx 入口控制器 pod 副本本身之间没有状态同步,因为每个 pod 都能够在 pod 首次启动时将所需状态从入口资源同步到实际的 nginx 配置文件,并保持连续状态通过 Kubernetes API 服务器公开的 API 监视 Ingress 和其他一些资源。

  • 您好,感谢您的回复。我了解领导者选举是什么,但我不知道领导者实际上做出了什么决定。流量将流向两个 ingress-nginx pod,并且两个 pod 都能够处理我的请求。所以基本上,他们都应该是无国籍的。这个领导者做了哪些其他节点不做的事情?事实上,两个节点之间没有状态同步,因为它们都拥有所需的所有信息。 (3认同)