Kubernetes 中批量任务处理与活性探测的深入解析
1. 批量任务处理的对象选择
在处理批量工作时,若希望任务队列持续运行,Deployment 是 Kubernetes 中合适的对象;若要处理有限的批量工作,Job 则是理想之选。例如,使用动态工作队列数据库时,若希望队列清空后工作节点完全关闭,Job 就能实现这一需求。而使用 Deployment 时,可能需要像 HorizontalPodAutoscaler 这样的单独系统来对工作节点 Pod 进行伸缩。使用 Job 时,工作节点 Pod 完成工作后能向 Job 控制器发出信号,随后关闭并回收资源。
2. 使用 Job 进行动态队列处理
2.1 动态队列的重新设计
将之前使用 Deployment 的动态队列重新设计为使用 Job。Kubernetes 的 Deployment 和 Job 都允许创建多个 Pod 工作节点,且在 Pod 失败时都会重新创建。但关键区别在于,由 Job 管理的 Pod 以“成功”代码(Unix 中为 exit 0)退出时,会向 Kubernetes 表明整个队列的工作已完成,不会再创建新的 Pod 工作节点,而正在运行的 Pod 可完成剩余工作。
2.2 工作节点代码的调整
为使工作节点在 Job 中正常工作,需调整代码,让队列清空时发出成功信号。以下是调整后的工作节点代码:
import os
import signal
import redis
from pi import *
redis_host = os.environ.get