Kubernetes动态工作扩展

Ell*_*ell 8 kubernetes google-cloud-pubsub

我终于在kubernetes池中浸泡我的脚趾,并希望得到一些建议,以解决我遇到的问题的最佳方法:

我们正在使用的技术:

  • GCP
  • GKE
  • GCP Pub/Sub

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

  1. 新的原始数据流入
  2. 节点对此进行分析并将数据分解为可管理的部分,这些部分被推送到队列中
  3. 我们有一个Autoscaling On和Min Size为'0'的集群
  4. Kubernetes作业为此群集上的每个新消息旋转一个pod
  5. 当pods无法再拉出消息时,它们会成功终止

问题是:

  • 触发此类工作的标准方法是什么?
    • 你是每次创造一份新工作,还是长期工作并重新开始工作?
  • 我只看到了使用yaml文件的例子,但是我们可能希望执行分配工作的节点创建作业,因为它知道应该运行多少个并行pod.是否建议使用python sdk以编程方式创建作业规范?或者,如果工作时间很长,您只需点击k8 api并修改所需的并行pod即可重新运行作业吗?

cha*_*ffe 3

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

但是,如果您想使用单个实例处理工作队列中的多个项目,那么通常建议使用 Deployment 来扩展继续处理队列中项目的工作线程池,扩展池工作线程的数量取决于队列中的项目数。如果没有剩余的工作项,那么您可以将部署扩展到 0 个副本,并在有工作需要完成时再进行扩展。

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