理解Kubernetes作业中的回退限制
我在kubernetes中创建了一个理解Kubernetes作业中的回退限制,kubernetes,Kubernetes,我在kubernetes中创建了一个Cronjob,带有计划(8****),作业的backoffLimit默认为6,pod的RestartPolicy默认为Never,pod被故意配置为失败。据我所知,(对于具有restartPolicy:Never)的podSpec,作业控制器将尝试创建backoffLimit数量的POD,然后将作业标记为失败,因此,我预计将有6个POD处于错误状态 这是实际作业的状态: status: conditions: - lastProbeTime: 201
Cronjob
,带有计划(8****
),作业的backoffLimit
默认为6,pod的RestartPolicy
默认为Never
,pod被故意配置为失败。据我所知,(对于具有restartPolicy:Never
)的podSpec,作业控制器将尝试创建backoffLimit
数量的POD,然后将作业标记为失败
,因此,我预计将有6个POD处于错误
状态
这是实际作业的状态:
status:
conditions:
- lastProbeTime: 2019-02-20T05:11:58Z
lastTransitionTime: 2019-02-20T05:11:58Z
message: Job has reached the specified backoff limit
reason: BackoffLimitExceeded
status: "True"
type: Failed
failed: 5
为什么只有5个失败的吊舱而不是6个?或者我对
backoffLimit
的理解正确吗?简言之:您可能看不到所有创建的POD,因为cronjob中的计划周期太短了
如中所述:
作业将重新创建与作业关联的失败吊舱
具有指数后退延迟(10s、20s、40s…)上限的控制器
六分钟。如果没有新的失败POD,则重置退避计数
在作业的下一次状态检查之前显示
如果在作业控制器有机会重新创建pod之前安排了新作业(记住上次失败后的延迟),作业控制器将再次从一开始计数
我使用以下.yaml
,在GKE中复制了您的问题:
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: hellocron
spec:
schedule: "*/3 * * * *" #Runs every 3 minutes
jobTemplate:
spec:
template:
spec:
containers:
- name: hellocron
image: busybox
args:
- /bin/cat
- /etc/os
restartPolicy: Never
backoffLimit: 6
suspend: false
此作业将失败,因为文件/etc/os
不存在
以下是其中一个作业的kubectl descripe
输出:
Name: hellocron-1551194280
Namespace: default
Selector: controller-uid=b81cdfb8-39d9-11e9-9eb7-42010a9c00d0
Labels: controller-uid=b81cdfb8-39d9-11e9-9eb7-42010a9c00d0
job-name=hellocron-1551194280
Annotations: <none>
Controlled By: CronJob/hellocron
Parallelism: 1
Completions: 1
Start Time: Tue, 26 Feb 2019 16:18:07 +0100
Pods Statuses: 0 Running / 0 Succeeded / 6 Failed
Pod Template:
Labels: controller-uid=b81cdfb8-39d9-11e9-9eb7-42010a9c00d0
job-name=hellocron-1551194280
Containers:
hellocron:
Image: busybox
Port: <none>
Host Port: <none>
Args:
/bin/cat
/etc/os
Environment: <none>
Mounts: <none>
Volumes: <none>
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulCreate 26m job-controller Created pod: hellocron-1551194280-4lf6h
Normal SuccessfulCreate 26m job-controller Created pod: hellocron-1551194280-85khk
Normal SuccessfulCreate 26m job-controller Created pod: hellocron-1551194280-wrktb
Normal SuccessfulCreate 26m job-controller Created pod: hellocron-1551194280-6942s
Normal SuccessfulCreate 25m job-controller Created pod: hellocron-1551194280-662zv
Normal SuccessfulCreate 22m job-controller Created pod: hellocron-1551194280-6c6rh
Warning BackoffLimitExceeded 17m job-controller Job has reached the specified backoff limit
名称:hellocron-1551194280
名称空间:默认值
选择器:控制器uid=b81cdfb8-39d9-11e9-9eb7-42010a9c00d0
标签:控制器uid=b81cdfb8-39d9-11e9-9eb7-42010a9c00d0
作业名称=hellocron-1551194280
注释:
控制人:CronJob/hellocron
平行度:1
完成情况:1
开始时间:2019年2月26日星期二16:18:07+0100
Pods状态:0运行/0成功/6失败
Pod模板:
标签:控制器uid=b81cdfb8-39d9-11e9-9eb7-42010a9c00d0
作业名称=hellocron-1551194280
容器:
hellocron:
图片:busybox
端口:
主机端口:
Args:
/垃圾箱/猫
/etc/os
环境:
挂载:
卷数:
活动:
从消息中键入原因年龄
---- ------ ---- ---- -------
正常成功创建26m作业控制器创建pod:hellocron-1551194280-4lf6h
正常成功创建26m作业控制器创建pod:hellocron-1551194280-85khk
正常成功创建26m作业控制器创建pod:hellocron-1551194280-wrktb
正常成功创建26m作业控制器创建pod:hellocron-1551194280-6942s
正常成功创建25m作业控制器创建pod:hellocron-1551194280-662zv
正常成功创建22m作业控制器创建pod:hellocron-1551194280-6c6rh
警告BackoffLimit已超过17m作业控制器作业已达到指定的退避限制
注意创建POD
hellocron-1551194280-662zv
和hellocron-1551194280-6c6rh
之间的延迟使用spec.backoffLimit
指定作业失败前的重试次数。默认情况下,后退限制设置为6 已编辑的问题包括时间表,只是关于backoffLimit的澄清,因此backoffLimit`指定作业控制器将执行的POD/重新启动的持续时间,而不是数量。我创建了一个小的,我的理解正确吗?backoffLimit
指定作业控制器放弃之前的重试次数。@MZW我在GKE中复制了您的问题我看到您的yaml创建了6个POD,在我的情况下,只创建了5个POD,我是否遗漏了什么?