我想在我的 GKE 上运行 CronJob,以便每天执行批处理操作。理想的情况是我的集群在作业未运行时扩展到 0 个节点,并在每次满足计划时动态扩展到 1 个节点并在其上运行作业。
我首先尝试通过使用在kubernetes文档中找到的一个简单的 CronJob 来实现这一点,它只打印当前时间并终止。
我首先使用以下命令创建了一个集群:
gcloud container clusters create $CLUSTER_NAME \
--enable-autoscaling \
--min-nodes 0 --max-nodes 1 --num-nodes 1 \
--zone $CLUSTER_ZONE
然后,我创建了一个具有以下描述的 CronJob:
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: hello
spec:
schedule: "1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
args:
- /bin/sh
- -c
- date; echo Hello from the Kubernetes cluster
restartPolicy: Never
该作业计划每小时运行一次,并在终止前打印当前时间。
首先,我想创建具有 0 个节点的集群,但设置--num-nodes 0
会导致错误。为什么会这样?请注意,我可以在创建集群后手动将集群缩减到 0 个节点。
其次,如果我的集群有 0 个节点,则不会安排作业,因为集群不会自动扩展到 1 个节点,而是会出现以下错误:
无法调度 pod:没有可用于调度 pod 的节点。
第三,如果我的集群有 1 个节点,作业会正常运行,但在那之后,集群不会缩减到 0 个节点,而是保留 1 个节点。我让我的集群运行了两个连续的作业,并且在两者之间没有缩小。我认为一小时应该足以让集群这样做。
我错过了什么?
编辑:我已经开始工作并在此处详细说明了我的解决方案。