kubernetes - Kubernetes 中的有状态作业
问题描述
我需要偶尔运行一项临时工作。这项工作需要一些状态才能工作。建立国家需要很多时间。因此,希望在后续运行中保持状态的持久性和可重用性,以加快周转时间。我希望将这项工作作为 K8s pod 进行管理。
这是一套完整的要求:
- 工作完成后,豆荚将下降。K8s 控制器不应尝试启动 Pod。
- 每个 pod 都应该附加一个持久卷。每个 pod 应该有 1 个卷。我打算使用 EBS。
- 将来我们应该能够手动恢复 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(例如分片)的角色。
推荐阅读
- python - 如何根据第一次出现的列条件执行分组并删除重复项?
- python-3.x - 使用请求库python搜索标题中包含特定字符串的git问题
- react-native - 在堆栈导航器中隐藏标题
- pine-script - Pine 脚本检查条件
- python - 如何获得 csv 列中所有数字的总和?
- import - 提供“--isolatedModules”标志时重新导出类型需要使用“导出”
- python - 使用网格 python 制作 tkinter 水平滚动条
- c - 函数范围和指针
- cookies - 只有一个请求时,多个同名的cookie如何进行认证?
- node.js - 不能在节点 14 中使用可选链接 - 语法错误?