![Kubernetes 或 Docker-Compose - 如何从队列中立即生成新的 docker 镜像](https://linux22.com/image/759536/Kubernetes%20%E6%88%96%20Docker-Compose%20-%20%E5%A6%82%E4%BD%95%E4%BB%8E%E9%98%9F%E5%88%97%E4%B8%AD%E7%AB%8B%E5%8D%B3%E7%94%9F%E6%88%90%E6%96%B0%E7%9A%84%20docker%20%E9%95%9C%E5%83%8F.png)
我有一份预定的工作项目清单。
- 当工作项“准备就绪”时,“调度程序”应动态启动“工作程序”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 之间的比较可以让你更深入地了解哪一个更适合你。