我想在我的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个节点,而是出现以下错误:
无法安排广告连播:没有可用的节点来安排广告连播。
第三,如果我的集群有1个节点,则作业可以正常运行,但是此后,集群将不会缩小到0个节点,而是保留1个节点。我让群集运行两个连续的作业,但在这之间没有缩减。我认为一个小时应该足够使群集能够这样做。
我想念什么?
编辑:我可以使用它,并详细说明了我的解决方案here。
答案 0 :(得分:4)
不支持将整个集群扩展到0,因为您总是需要至少一个节点用于系统Pod:
您可以创建一个带有用于系统Pod的小型计算机的节点池,以及一个用于运行工作负载的具有一台大型计算机的附加节点池。这样,第二个节点池可以缩小到0,您仍然有运行系统Pod的空间。
尝试之后,@ xEc提到:还请注意,在某些情况下我的节点池无法扩展,例如如果我创建的池初始大小为0而不是1。 < / p>
-旧建议下面
也许您可以运行带有cron的微型VM,以扩展集群,提交作业(而不是CronJob),等待其完成然后将其缩减为0?
答案 1 :(得分:0)
我认为对GKE进行此类工作调整不是一个好主意。如果您确实需要0个实例,建议您使用