首页 > 解决方案 > 当leader pod死掉时,我们可以立即更新k8s的leader吗?

问题描述

我按照这篇文章为我的应用程序的 HA 使用 k8s 领导者选举。但我遇到了一个问题。有没有人有同样的经历?例如,我有 4 个 pod 副本。其中一个 pod 已被选为领导者。当这个 leader pod 宕机时(例如手动杀死 pod),调度器将需要 30-40 秒来启动一个新的 pod,但旧的死亡 leader 会保持 10 秒或更长时间来更新。有没有办法在领导者 pod 死亡时立即更新领导者?还是我错过了任何设置?

在我所指的文章中,它提到了以下内容,这正是我所遇到的问题:

因为 Kubernetes 中的 pod 在终止前有一个宽限期,这可能需要 30-40 秒。

这是我正在使用的演示 yaml 文件。 https://gist.githubusercontent.com/ginkgoch/563d8d8caf9e4dd99a0c8de323e9211c/raw/f1abb94647c60874e4625b1b94f8fa125bd1a5ea/k8s-leader-election.yaml

标签: kubernetesleader-election

解决方案


文章解释说这是由于宽限期。当发出 kill 时,leader pod 还没有死亡,它只是在关闭。

您可以缩短或跳过强制删除或更改规范中的宽限期的关闭过程。那么风险是 Pod 可能会在没有完全清理的情况下关闭 - 你会知道这是否与你的 Pod 有关。

理论上应该可以在 Pod 开始终止时监听preStop 钩子并开始领导选举。但是,当旧的领导者终止时,您可能会有两个领导者(k8s 此时应该停止向旧的领导者发送流量,但它可能仍在做一些重要的事情,具体取决于您的设计)。k8s.gcr.io/leader-elector实现似乎需要等待老领导完全停止。可能还有其他实现可能支持立即选举,但我没有通过快速搜索找到任何实现,我认为等待旧领导者终止并不罕见。


推荐阅读