Kubernetes动态作业扩展

时间:2018-07-25 23:31:00

标签: kubernetes google-cloud-pubsub

我终于将脚趾浸入kubernetes池中,并希望获得有关解决问题的最佳方法的一些建议:

我们正在使用的技术:

  • GCP
  • GKE
  • GCP发布/订阅

我们需要对整个车队进行批量处理,并决定采用以下方法:

  1. 新的原始数据流入
  2. 节点对此进行分析,并将数据分解为可管理的部分,然后将这些部分推送到队列中
  3. 我们有一个集群,其自动缩放功能已开启且最小大小为“ 0”
  4. Kubernetes作业为该集群上的每条新消息旋转一个pod
  5. 当Pod无法再提取消息时,它们会成功终止

问题是:

  • 触发此类作业的标准方法是什么?
    • 您是否每次都创建一个新工作,或者工作应该长期存在并可以重新运行?
  • 我只看过使用yaml文件的示例,但是我们可能希望完成工作分配的节点创建作业,因为它知道应该运行多少个并行Pod。是否建议使用python sdk以编程方式创建作业规范?或者,如果工作寿命长,您是否只需点击k8 api并修改所需的并行Pod,然后重新运行工作?

1 个答案:

答案 0 :(得分:2)

Kubernetes中的工作是短暂的,不能重用。作业是为运行一次,运行到完成的工作负载而设计的。通常,为他们分配特定的任务,即处理单个队列项目。

但是,如果要使用单个实例处理工作队列中的多个项目,则通常建议改为使用“部署”来扩展继续处理队列中项目的工作程序池,从而扩展池数工作人员取决于队列中的项目数。如果没有剩余工作项,则可以将部署扩展到0个副本,并在需要完成工作时进行扩展。

要在Kubernetes中创建和控制工作负载,最佳实践是使用Kubernetes SDK。虽然您可以使用SDK生成YAML文件并使用kubectl之类的其他工具来简化配置和错误处理,还可以简化群集中资源的自省。