我想在我的GKE上运行CronJob,以便每天执行批处理操作.理想的情况是我的集群在作业未运行时扩展到0个节点,并且每次满足计划时动态扩展到1个节点并在其上运行作业.
我首先尝试通过使用kubernetes doc 中的一个简单的CronJob来实现这一点,它只打印当前时间并终止.
我首先使用以下命令创建了一个集群:
gcloud container clusters create $CLUSTER_NAME \
--enable-autoscaling \
--min-nodes 0 --max-nodes 1 --num-nodes 1 \
--zone $CLUSTER_ZONE
Run Code Online (Sandbox Code Playgroud)
然后,我创建了一个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
Run Code Online (Sandbox Code Playgroud)
作业计划每小时运行一次,并在终止前打印当前时间.
首先,我想创建具有0个节点的集群,但设置--num-nodes 0结果是错误的.为什么会这样?请注意,我可以在创建集群后手动将集群缩小到0个节点.
其次,如果我的群集有0个节点,则不会调度作业,因为群集不会自动扩展到1个节点,而是会出现以下错误:
无法安排pod:没有可用于安排pod的节点.
第三,如果我的集群有1个节点,则作业正常运行但在此之后,集群不会缩小到0个节点,而是保留1个节点.我让我的集群运行两个连续的工作,并没有在两者之间缩小.我假设一小时应该足够长,以便群集这样做.
我错过了什么?
autoscaling google-cloud-platform kubernetes google-kubernetes-engine kubernetes-cronjob
我有一个批处理作业,我想在Google Cloud的Kubernetes集群上运行。该工作必须定期运行,例如每周一次,并且需要一天才能完成。从文档:
从Kubernetes 1.7版本开始,您可以为节点池指定最小大小为零。如果不需要运行其中的实例,则可以使节点池完全缩小。但是,尽管节点池可以扩展为零大小,但是整个群集的大小却不能缩减为零节点(因为运行系统Pod始终需要至少一个节点)。
我的问题是,如果将群集缩小到0个节点,使用该群集是否还会产生成本?据我了解,集群规模不会为空,因此仍然会产生成本。
如果是这样,那么将我的成本降至最低的正确方法是什么?我应该在运行作业之前/之后定期创建/删除集群吗?