我有一份预定的工作项目清单。
- 当工作项“准备就绪”时,“调度程序”应动态启动“工作程序”Docker 映像。
- “工人”运行15-240分钟即可完成。
- 如果资源不够,“调度程序”应该等待并及时重试。
- 我稍后会实现节点扩展。
在 Docker-Compose 或 Kubernetes 中实现这个的最简单方法是什么?
答案1
- 当工作项“准备就绪”时,“调度程序”应动态启动“工作程序”Docker 映像。
现在,许多 Kubernetes 功能都是使用自定义资源内置的,这使得 Kubernetes 更加模块化。自定义资源允许您存储和检索数据,但当您将其与 结合使用时custom controller
,自定义资源可提供真正的declarative API
。
对于你的任务,你想检查操作符模式 它是自定义资源和自定义控制器的组合。
你的 Operator 将必须关注你的work item
状态,一旦准备就绪,它就会触发 Kubernetes Job,运行你的 DockerWorker
镜像直至完成。
值得一提的是,你可以使用去客户端或者python 客户端访问 Kubernetes RESTful API 接口。client-go
是一个用于开发 K8s 自定义控制器的非常强大的库。
欲了解更多官方支持的客户端列表,请访问官方文档。
ClusterAutoscaler
当您需要运行一项作业时,可以使用此功能来扩展 Kubernetes 集群,然后在作业完成时缩小集群。
如果你想了解更多关于运营商的信息
或者,您可能希望研究某种 CI/CD 调度程序,例如 Jenkins。以下是一些使用 jenkins 的 kubernetes 的很好示例:
但是如果您正在寻找类似消息队列的东西来管理任务而不是 Jenkins,将其与 Deployments 和 StatefulSets 放在同一个 Kubernetes 集群中可能会更方便。
这里有更多关于消息队列管理的信息:
最后一个小比较Kubernetes 和 Docker 之间的比较可以让你更深入地了解哪一个更适合你。