理解Kubernetes作业中的回退限制

理解Kubernetes作业中的回退限制,kubernetes,Kubernetes,我在kubernetes中创建了一个Cronjob,带有计划(8****),作业的backoffLimit默认为6,pod的RestartPolicy默认为Never,pod被故意配置为失败。据我所知,(对于具有restartPolicy:Never)的podSpec,作业控制器将尝试创建backoffLimit数量的POD,然后将作业标记为失败,因此,我预计将有6个POD处于错误状态 这是实际作业的状态: status: conditions: - lastProbeTime: 201

我在kubernetes中创建了一个
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,我是否遗漏了什么?