我想在我的 GKE 上运行 CronJob,以便每天执行批处理操作。理想的情况是,我的集群在作业未运行时扩展到 0 个节点,并在每次满足计划时动态扩展到 1 个节点并在其上运行作业。
我首先尝试使用一个简单的 CronJob 来实现这一点库伯内特斯 https://kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/仅打印当前时间并终止的 doc。
我首先使用以下命令创建了一个集群:
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 个节点。我让我的集群连续运行两个作业,并且它在中间没有缩小规模。我认为一小时对于集群来说应该足够长了。
我缺少什么?
编辑:我已经让它工作并详细说明了我的解决方案here https://stackoverflow.com/questions/49903951/node-pool-does-not-reduce-his-node-size-to-zero-although-autoscaling-is-enabled/51891485#51891485.