我正在测试Kubernetes,目的是能够在队列中运行批处理作业。我用
创建了一个resourcequota $ kubectl create quota memoryquota --hard=memory=450Mi
,
将使用的命名空间中所有容器的总内存使用量限制为450M。我还有一个脚本run-memhog.sh
,它创建一个内存限制为X并使用Y兆内存的memhog作业:
kubectl run memhog-$(cat /dev/urandom | tr -dc 'a-z0-9' | fold -w 8 | head -n 1)
--replicas=1 --restart=OnFailure --limits=memory=$1Mi,cpu=100m --record
--image=derekwaynecarr/memhog --command -- memhog -r100 $2m
正确运行$ for i in {1..4}; do ./run-memhog.sh 200 100; done
会导致创建四个作业,其中两个作业在大约20秒内完成,另外两个作为预期,会收到FailedCreate
警告并显示消息
创建错误:pods" memhog-plgxke9m - "被禁止:超出配额:memoryquota,请求:内存= 200Mi,使用:内存= 400Mi,限制:内存= 450Mi
正在运行$ kubectl get jobs
会显示预期结果:
NAME DESIRED SUCCESSFUL AGE
memhog-2covdiww 1 0 35s
memhog-6bg0b6g6 1 1 35s
memhog-plgxke9m 1 0 35s
memhog-w2ujbg1b 1 1 35s
到目前为止一切都还可以,并且我希望这两个仍然未完成的作业在资源可用时立即开始运行(=在之前的pod /容器被清除之后)。然而,工作处于待处理状态,谁知道谁知道多长时间 - 我在两小时后检查了他们仍然没有开始运行,之后我让服务器一夜之间运行,并且在那段时间内工作已经完成。< / p>
我的问题是:导致这些工作待了这么长时间的原因是什么?无论如何,我可以更频繁地轮询资源可用性吗?我试图搜索kubectl引用和kubernetes文档,但没有找到任何修复/设置。