kubernetes - 从一组副本中选择一个 kubernetes pod 来执行任务

我有一个在 Kubernetes pod 中运行的 java 应用程序。

应用程序执行多项任务(taskAtaskB 等)。该应用程序支持在不同的 pod 中运行多个实例。所有的 pod 都在执行相同的任务。

但是,有一个任务只能由一个 pod 完成(例如,taskA 应该只在其中一个 pod 中运行)。如果执行特定任务的 pod 死亡,其他节点之一应该开始执行该任务(被动节点,关于 taskA,接管)。

k8s 是否支持此功能,或者我是否需要使用其他服务(例如 zookeeper)?

最佳答案

Kubernetes 不知道您的 pod 中正在运行什么或您的请求中有什么。您的建议(几乎)没有直接支持。

您可能会查找的更一般的主题是领导者选举。在您的示例中,集群领导者是唯一可以执行 taskA 的人。 ZooKeeper普遍用于此;有一个更新的算法叫做 Raft那也可以。您必须将对此的支持写入您的应用程序。

Kubernetes 中最接近的是 StatefulSet . StatefulSet 的有用特性是 its replicas are numbered starting from 0 ,因此 pod 可以查看自己的主机名并确定它是哪一个。如果编号较低的 pod 发生故障,则 Kubernetes 将以相同身份重新启动它。您可以设置只有 pod 0 可以执行 taskA 的规则,这在实践中可能会满足您的要求。

https://stackoverflow.com/questions/60000255/

相关文章:

apache-kafka - Kafka服务启动失败

C# - 检查是否可以访问/读取文件夹

c# - Blazor 在 X 量空闲时间后做某事

html - html和每个元素通常使用什么字体大小?

microsoft-graph-api - 带有过滤器的 microsoft-graph api 用

google-bigquery - 如何在 Google BigQuery 中将日期解析为周年?

go - sqlx 无法对嵌套结构使用结构扫描

sql-server - 启动SSIS包时不支持包部分调试

python-3.x - Convnet 序数回归损失函数

flutter - 从一个选项卡更改为另一个选项卡时,所有选项卡都会不断重建