Понимание backoffLimit в работе Kubernetes - PullRequest
0 голосов
/ 22 февраля 2019

Я создал Cronjob в кубернетах с расписанием (8 * * * *), с заданием по умолчанию backoffLimit, равным 6, и модулем RestartPolicy до Never, когда модули специально настроены на FAIL.Как я понимаю, (для podSpec с restartPolicy : Never) контроллер заданий попытается создать backoffLimit количество модулей, а затем пометит задание как Failed, поэтому я ожидал, что в состоянии Error будет 6 модулей.

Это фактический статус задания:

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 неверно?

1 Ответ

0 голосов
/ 26 февраля 2019

Короче говоря: вы можете не видеть все созданные модули, потому что период расписания в cronjob слишком короткий.

Как описано в документации :

Неисправные блоки, связанные с заданием, воссоздаются контроллером задания с экспоненциальной задержкой отката (10 с, 20 с,40-е годы…) ограничено шестью минутами.Счетчик отсрочки сбрасывается, если перед следующей проверкой состояния задания не появилось новых неисправных модулей.

Если новое задание запланировано до того, как контроллер задания сможет воссоздать модуль (учитывая задержкупосле предыдущего сбоя) контроллер заданий снова начинает считать с одного.

Я воспроизвел вашу проблему в GKE, используя следующую команду: .yaml:

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 describe для одного из заданий:

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-662zv и hellocron-1551194280-6c6rh.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...