我创建了两个节点池。一个小的用于所有谷歌系统工作,一个较大的一个用于我的任务。较大的一个应该在工作完成后将其大小减小到0。
问题是:即使没有cron作业,节点池也不会 将他的体型缩小到0。
创建群集:
gcloud beta container --project "projectXY" clusters create "cluster" --zone "europe-west3-a" --username "admin" --cluster-version "1.9.6-gke.0" --machine-type "n1-standard-1" --image-type "COS" --disk-size "100" --scopes "https://www.googleapis.com/auth/cloud-platform" --num-nodes "1" --network "default" --enable-cloud-logging --enable-cloud-monitoring --subnetwork "default" --enable-autoscaling --enable-autoupgrade --min-nodes "1" --max-nodes "1"
创建节点池:
在完成所有任务后,节点池应将其大小减小为0.
gcloud container node-pools create workerpool --cluster=cluster --machine-type="n1-highmem-8", -m "n1-highmem-8" --zone=europe-west3-a, -z europe-west3-a --disk-size=100 --enable-autoupgrade --num-nodes=0 --enable-autoscaling --max-nodes=2 --min-nodes=0
创建cron作业:
kubectl create -f cronjob.yaml
答案 0 :(得分:3)
从Google Documentation引用
"注意:从Kubernetes 1.7版开始,您可以为节点池指定最小大小为零。如果运行工作负载不需要实例,则允许您的节点池完全缩小。但是,虽然节点池可以扩展到零大小,但整个群集大小不会缩减到零节点(因为始终需要至少一个节点来运行系统Pod)。"
另请注意:
"群集自动规划器还根据节点池的总容量需求来衡量每个节点的使用情况。如果某个节点在一段时间内没有安排新Pod,并且 [此选项对您不起作用,因为它是最后一个节点] 可以安排在该节点上运行的所有Pod在池中的其他节点上,自动缩放器移动Pod并删除节点。
请注意,群集自动缩放器基于Pod资源请求工作,即Pod已请求的资源数量。群集自动缩放器不会考虑Pod正在使用的资源。从本质上讲,集群自动调节器信任您提供的Pod资源请求是准确的,并根据该假设在节点上调度Pod。"
因此我会检查:
如果仍然存在自动缩放器的所有问题,您可以打开private issue指定您的项目ID,因为社区可以做的事情不多。
如果您对评论感兴趣,问题跟踪器和我的链接将会查看您的项目(我为Google云平台支持工作)
答案 1 :(得分:0)
我遇到了同样的问题,并测试了许多不同的情况。最后,通过执行以下操作使它起作用:
创建初始大小为1而不是0的节点池:
gcloud container node-pools create ${NODE_POOL_NAME} \
--cluster ${CLUSTER_NAME} \
--num-nodes 1 \
--enable-autoscaling --min-nodes 0 --max-nodes 1 \
--zone ${ZONE} \
--machine-type ${MACHINE_TYPE}
以与此类似的方式配置CronJob:
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: cronjob800m
spec:
schedule: "7 * * * *"
concurrencyPolicy: Forbid
failedJobsHistoryLimit: 0
successfulJobsHistoryLimit: 0
jobTemplate:
spec:
template:
spec:
containers:
- name: cronjob800m
image: busybox
args:
- /bin/sh
- -c
- date; echo Hello from the Kubernetes cluster
resources:
requests:
cpu: "800m"
restartPolicy: Never
请注意,资源的设置方式只能在大型节点池上运行作业,而不能在小型节点池上运行。还要注意,我们将failedJobsHistoryLimit
和successfulJobsHistoryLimit
都设置为0,以便在成功/失败后自动从节点池中清除作业。
应该的。