部署"A"检查一组检查并扩展部署"B"以运行任务



我有一个正在运行的GKE集群(v1.12.8-gke.10(。我正在尝试设置一个特定的应用程序,该应用程序将按照我想要的方式工作,但我似乎找不到和文档将其拼凑在一起。我想要完成的事情甚至可能是不可能的。

我想使用 python docker 映像设置一个部署(1 pod(,它正在运行执行检查的循环 pythons 脚本。如果检查全部通过,我希望此部署/pod 启动/扩展另一个将执行简单任务的部署,然后杀死已启动的 pod。

我不确定我是否应该使用部署,或者我是否需要在此过程中的某个地方混合HPA。我也尝试查看 KEDA,但它只有指定的触发器,不适合我想要做的事情。

我期待两种不同的部署。

部署 A = 1 个 pod,不断运行一个 python 脚本,该脚本正在检查它是否应该向部署 B 发送任何命令。

部署 B = 侦听部署 A 以联系它以指示它启动 Pod 以运行任务。任务完成后,终止容器。

您描述的工作流程是可能的。 控制器需要访问 Kubernetes API,可能使用官方 Python 客户端。 收到请求时,您将创建一个 Job,并可能将有关要运行的内容的信息作为命令行参数传递。 作业 Pod 中的进程将完成工作,然后正常退出。 然后,您将负责监视作业的状态并注意它何时完成,但您不必显式缩小它;删除已完成的作业将是礼貌的。

我通常在这里推荐的架构是使用像 RabbitMQ 这样的作业队列。 您的控制器有一个部署,您的辅助角色有一个单独的部署,以及一个 StatefulSet 来运行作业队列(或者类似于stable/rabbitmqHelm 图表(。 这些都不会直接与 Kubernetes API 交互。 当有新请求进来时,控制器会向 RabbitMQ 发布一条消息,当工作线程从队列中收到一条消息时,它将执行一项工作。

这样做的好处是更容易在本地开发(你可以在笔记本电脑或容器中运行 RabbitMQ,但访问 Kubernetes API 更难(。 如果您突然被大量作业提交淹没,您不会尝试用数千个作业使集群过载;它们将在 RabbitMQ 中备份,您可以一次执行一个。 如果希望群集执行更多操作,可以kubectl scale deployment获取更多辅助角色。 如果作业用完,worker pod 将闲置,但这不是真正的问题。

最新更新