启用自动缩放后,GKE不会从0缩放到/从0缩放

时间:2018-08-15 08:48:19

标签: kubernetes google-cloud-platform autoscaling google-kubernetes-engine kubernetes-cronjob

我想在我的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

2 个答案:

答案 0 :(得分:4)

不支持将整个集群扩展到0,因为您总是需要至少一个节点用于系统Pod:

See docs

您可以创建一个带有用于系统Pod的小型计算机的节点池,以及一个用于运行工作负载的具有一台大型计算机的附加节点池。这样,第二个节点池可以缩小到0,您仍然有运行系统Pod的空间。

尝试之后,@ xEc提到:还请注意,在某些情况下我的节点池无法扩展,例如如果我创建的池初始大小为0而不是1。 < / p>

-旧建议下面

也许您可以运行带有cron的微型VM,以扩展集群,提交作业(而不是CronJob),等待其完成然后将其缩减为0?

答案 1 :(得分:0)

我认为对GKE进行此类工作调整不是一个好主意。如果您确实需要0个实例,建议您使用

  1. App Engine标准环境,可让您将实例缩放为0(https://cloud.google.com/appengine/docs/standard/go/config/appref) 或
  2. 云功能,无论如何它们都是“无实例” /无服务器的。您可以使用此非官方指南来触发您的Cloud Functions(https://cloud.google.com/community/tutorials/using-stackdriver-uptime-checks-for-scheduling-cloud-functions