kubernetes - 当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
解决方案
文章解释说这是由于宽限期。当发出 kill 时,leader pod 还没有死亡,它只是在关闭。
您可以缩短或跳过强制删除或更改规范中的宽限期的关闭过程。那么风险是 Pod 可能会在没有完全清理的情况下关闭 - 你会知道这是否与你的 Pod 有关。
理论上应该可以在 Pod 开始终止时监听preStop 钩子并开始领导选举。但是,当旧的领导者终止时,您可能会有两个领导者(k8s 此时应该停止向旧的领导者发送流量,但它可能仍在做一些重要的事情,具体取决于您的设计)。k8s.gcr.io/leader-elector
实现似乎需要等待老领导完全停止。可能还有其他实现可能支持立即选举,但我没有通过快速搜索找到任何实现,我认为等待旧领导者终止并不罕见。
推荐阅读
- symfony - Hwi oauth bundle 和 Symfony 3.4 无法自动装配服务:如何在 symfony 3.4 + FOSUserBundle 中使用 hwi/oauth-bundle
- android - BottomSheet 可以显示在另一个视图后面吗?
- javascript - Npm Archiver 替换压缩文件夹中的文件
- firebase - 如何通过 Swift 4.0、Xcode 中的“Pod Install”升级 Firebase
- javascript - python 上的 JavaScript 从给定的 lat lon 计算 300 万条记录的 s2 单元格
- java - Java SparkSession Hive SQL 未应用 regexp_replace
- pie-chart - 在 SpotFire 中的饼图中去除黑色轮廓
- python-3.x - 如何在python中随机选择一行数据框,但有重复的行?
- php - 使用 PHP 在 60 秒后自动将行插入 MySQL
- c# - C# - 并行异步运行代码