我需要偶尔运行临时工作。这项工作需要一些国家的工作。建设国家需要很多时间。因此,期望在后续运行中保持状态持久且可重复使用,以实现快速周转时间。我希望将这份工作作为K8s pod进行管理。
这是一套完整的要求:
我知道K8s支持Jobs和Statefulsets。是否有任何控制器同时支持两者?
- 工作结束后,豆荚会下降。 K8s控制器不应该试图调出pod。
这就是乔布斯所做的 - 运行完成。你只能控制你是否想在exit > 0
上重试。
- Pod应该有一个持久的卷附加到它们。
全部相同的音量?他们会写还是只读?你有什么卷后端,AWS EBS或类似的?根据答案,您可能希望在几个卷之间拆分输入数据,或者使用单独的卷进行写入,然后使用单个卷进行汇总,以便在1个卷中进行汇编(减少一种映射)。或者使用支持多装载RW https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes的音量后端(参见ReadWriteMany
表)
- 我们应该能够在将来手动将pod重新启用。
适合这里的工作:你需要它时启动它,它一直运行到完成。
- 未来的运行可能比过去的运行具有更多或更少的副本。
乔布斯适合这里。启动工作时指定不同的completions
或parallelism
:https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#parallel-jobs
StatefulSets是不同的概念,它们主要用于连续运行的集群软件,需要保持每个pod的角色(例如分片)。