是否有可能,如果总是失败,如何限制 kubernetes 作业创建最大数量 pods?
Is it possible, and how to limit kubernetes job to create a maxium number of pods if always fail?
作为我们公司的 QA,我是 kubernetes 的日常用户,我们使用 kubernetes 作业来创建性能测试 pods。根据 docs,工作的一项优势是
to create one Job object in order to reliably run one Pod to completion
但在我们的测试中,如果之前的失败,此功能将创建无限pods,这将占用我们团队共享集群的资源,并且删除这样的pods 将花费大量时间。看到这张图片:
目前职位清单是这样的:
{
"apiVersion": "batch/v1",
"kind": "Job",
"metadata": {
"name": "upgradeperf",
"namespace": "ntg6-grpc26-tts"
},
"spec": {
"template": {
"spec": {
"containers": [
{
"name": "upgradeperfjob",
"image":
"mycompany.com:5000/ncs-cd-qa/upgradeperf:0.1.1",
"command": [
"python",
"/jmeterwork/jmeter.py",
"-gu",
"git@gitlab-pri-eastus2.dev.mycompany.net:mobility-ncs-tools/tts-cdqa-tool.git",
"-gb",
"upgradeperf",
"-t",
"JMeter/testcases/ttssvc/JMeterTestPlan_ttssvc_cmpsize.jmx",
"-JtestDataFile",
"JMeter/testcases/ttssvc/testData/avaml_opus.csv",
"-JthreadNum",
"3",
"-JthreadLoopCount",
"1500",
"-JresultsFile",
"results_upgradeperf_cavaml_opus_t3_l1500.csv",
"-Jhost",
"mtl-blade32-03.mycompany.com",
"-Jport",
"28416"
]
}
],
"restartPolicy": "Never",
"imagePullSecrets": [
{
"name": "docker-registry-secret"
}
]
}
}
}
}
在某些情况下,例如 ip/ports 的错误配置,'reliably run one Pod to completion' 是不可能的,重新创建 pods 是浪费时间和资源。
那么是否有可能,如果总是失败,如何限制 kubernetes 作业创建 pods 的最大值(比如 3)?
您可能没有在您的 pod 规范中设置 restartPolicy: Never
,请添加它,我希望它更符合您的预期行为。
根据您的 kubernetes 版本,您可以使用以下方法解决此问题:
设置选项:restartPolicy: OnFailure
,那么失败的容器将在同一个Pod中重启,所以你不会得到很多失败的Pods,相反你会得到有很多重启的 Pod。
从Kubernetes 1.8开始,有一个参数backoffLimit
来控制失败作业的重启策略。该参数定义作业在处理作业失败前的重试次数,默认6次。要使此参数起作用,您必须设置参数 restartPolicy: Never
.
作为我们公司的 QA,我是 kubernetes 的日常用户,我们使用 kubernetes 作业来创建性能测试 pods。根据 docs,工作的一项优势是
to create one Job object in order to reliably run one Pod to completion
但在我们的测试中,如果之前的失败,此功能将创建无限pods,这将占用我们团队共享集群的资源,并且删除这样的pods 将花费大量时间。看到这张图片:
目前职位清单是这样的:
{
"apiVersion": "batch/v1",
"kind": "Job",
"metadata": {
"name": "upgradeperf",
"namespace": "ntg6-grpc26-tts"
},
"spec": {
"template": {
"spec": {
"containers": [
{
"name": "upgradeperfjob",
"image":
"mycompany.com:5000/ncs-cd-qa/upgradeperf:0.1.1",
"command": [
"python",
"/jmeterwork/jmeter.py",
"-gu",
"git@gitlab-pri-eastus2.dev.mycompany.net:mobility-ncs-tools/tts-cdqa-tool.git",
"-gb",
"upgradeperf",
"-t",
"JMeter/testcases/ttssvc/JMeterTestPlan_ttssvc_cmpsize.jmx",
"-JtestDataFile",
"JMeter/testcases/ttssvc/testData/avaml_opus.csv",
"-JthreadNum",
"3",
"-JthreadLoopCount",
"1500",
"-JresultsFile",
"results_upgradeperf_cavaml_opus_t3_l1500.csv",
"-Jhost",
"mtl-blade32-03.mycompany.com",
"-Jport",
"28416"
]
}
],
"restartPolicy": "Never",
"imagePullSecrets": [
{
"name": "docker-registry-secret"
}
]
}
}
}
}
在某些情况下,例如 ip/ports 的错误配置,'reliably run one Pod to completion' 是不可能的,重新创建 pods 是浪费时间和资源。 那么是否有可能,如果总是失败,如何限制 kubernetes 作业创建 pods 的最大值(比如 3)?
您可能没有在您的 pod 规范中设置 restartPolicy: Never
,请添加它,我希望它更符合您的预期行为。
根据您的 kubernetes 版本,您可以使用以下方法解决此问题:
设置选项:
restartPolicy: OnFailure
,那么失败的容器将在同一个Pod中重启,所以你不会得到很多失败的Pods,相反你会得到有很多重启的 Pod。从Kubernetes 1.8开始,有一个参数
backoffLimit
来控制失败作业的重启策略。该参数定义作业在处理作业失败前的重试次数,默认6次。要使此参数起作用,您必须设置参数restartPolicy: Never
.