2016-10-06 11 views
8

私はkubernetesウェブサイトの例に基づいて仕事の定義をしています。Kubernetes - 一度だけジョブを実行する方法

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がexit 0コードを取得するために新しいポッドを実行しようとすると、activeDeadlineSecondsのタイムアウトに達する。それを避けるにはコンパイルを確認するためにkubernetesでビルドコマンドを実行したいと思います。コンパイルが失敗した場合、0以外の終了コードが表示されます。コンパイルを再度実行したくないです。

可能ですか?どうやって?

答えて

10

ワンタッチコマンドランナーが必要な場合は、ジョブが成功するか、有効期限が切れるまでジョブを実行しようとするため、おそらくベアポッドを作成する必要があります。

ちょうどあなたのテンプレートからポッドを作成します。

apiVersion: v1 
kind: Pod 
metadata: 
    name: pi 
spec: 
    containers: 
    - name: pi 
    image: perl 
    command: ["exit", "1"] 
    restartPolicy: Never 
+0

「バックオフ方針とは、ポッド限界に失敗しました」しかし、どのように/停止コマンドが完了すると、ポッドを殺すために?ジョブの場合、実行中のポッドは停止します。 –

+1

@ rishabh.bhardwaj 'restartPolicy'を' Never'に設定した場合、私の答えのように、ポッドを終了した後に停止します。 – Nebril

+1

ジョブの代わりにポッドを使用する際の問題は、ノードが強制終了されたり、ユーザーの制御下にない他の問題のような偽の理由でポッドが失敗することです。 – ithkuil

1

は、悲しいことに、彼らが失敗したときにちょうど新しいポッドを再出現するジョブコントローラを防止するための方法はありませんが、kubernetesコミュニティは解決に取り組んでいる、見ます:

https://github.com/kubernetes/community/pull/583

関連する問題