web-dev-qa-db-ja.com

Kubernetes-ジョブを1回だけ実行する方法

Kubernetes Webサイトの例に基づいたジョブ定義があります。

apiVersion: batch/v1
kind: Job
metadata:
  name: pi-with-timeout-6
spec:
  activeDeadlineSeconds: 30
  completions: 1
  paralleism: 1
  template:
    metadata:
      name: pi
    spec:
      containers:
      - name: pi
        image: Perl
        command: ["exit", "1"]
      restartPolicy: Never

このジョブを1回実行し、失敗した場合は再起動しないようにします。 comand exit 1 kubernetesは、新しいPodを実行して、activeDeadlineSecondsタイムアウトに達するまでexit 0コードを取得しようとします。どうすればそれを回避できますか? kubernetesでビルドコマンドを実行してコンパイルを確認します。コンパイルが失敗した場合、0以外の終了コードが返されます。再度コンパイルを実行したくありません。

出来ますか?どうやって?

15
esio

1回限りのコマンドランナーが必要な場合は、ジョブが成功するかアクティブな期限に達するまでジョブがコマンドを実行しようとするため、おそらく裸のポッドを作成する必要があります。

テンプレートからポッドを作成するだけです:

apiVersion: v1
kind: Pod
metadata:
  name: pi
spec:
  containers:
  - name: pi
    image: Perl
    command: ["exit", "1"]
  restartPolicy: Never
17
Nebril

backoffLimit: 0これは、コントローラーに0回の再試行を指示します。デフォルトは6

7
pHiL

残念ながら、現在、ジョブポッドが失敗したときに新しいポッドを再スポーンすることを防ぐ方法はありませんが、kubernetesコミュニティは解決策に取り組んでいます。

「バックオフポリシーと失敗したポッドの制限」 https://github.com/kubernetes/community/pull/58

2
ithkuil