1. ホーム
  2. kubernetes

[解決済み] KubernetesのジョブにおけるbackoffLimitの理解

2022-02-05 15:12:06

質問

を作成しました。 Cronjob を、kubernetesでschedule( 8 * * * * ) で、ジョブの backoffLimit はデフォルトで6、ポッドの RestartPolicy から Never の場合、Podは意図的にFAILになるように設定されています。私の理解では、(PodSpecに restartPolicy : Never ) ジョブコントローラは backoffLimit の数のポッドを作成し、そのジョブを Failed で6ポッドになると予想していました。 Error の状態になります。

実際のJobの状態です。

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

失敗したポッドが6つではなく、5つしかなかったのはなぜですか?それとも、私の理解では backoffLimit が間違っているのでしょうか?

解決方法は?

要するに、cronjobのスケジュール期間が短すぎるため、作成されたすべてのポッドが表示されない可能性があります。

で説明したように ドキュメント :

ジョブに関連付けられている失敗したPodは、ジョブによって再作成されます。 コントローラは、指数関数的なバックオフ遅延(10秒、20秒、40秒...)を上限として 6分です。バックオフカウントは、新しい故障したPodがない場合、リセットされます。 次のステータスチェックまでに表示されます。

ジョブコントローラがポッドを再作成する前に新しいジョブがスケジュールされた場合(前回の失敗後の遅延を考慮して)、ジョブコントローラは再び1からカウントを開始します。

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 を、1つのジョブに対して実行しました。

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-662zvhellocron-1551194280-6c6rh .