2017-07-06 13 views
1

私はKubernetesの仕事を開始し、終了期限を決めました。期限が来てもポッドがまだ稼働していれば、自動的にその仕事が殺されるようにしたい。Kubernetesジョブの時間制限を設定するにはどうすればよいですか?

このようなことはありますか? (最初は私はJob仕様書のactiveDeadlineSecondsがこのユースケースをカバーしていると思っていましたが、activeDeadlineSecondsは、ジョブを再試行したときに限度を設定するだけで、遅く/暴走するジョブを積極的に殺しません)

+0

生存プローブの活用はどうですか?必要な時間だけ成功を返すプローブを作成し、期限に達するとfailure(1)を返してコンテナを破棄します。 livenessプローブの詳細:https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/ –

答えて

3

コンテナのentrypointコマンドでGNU timeoutユーティリティを使用してタイムアウトを自己申告できます。

apiVersion: batch/v1 
kind: Job 
metadata: 
    name: pi 
spec: 
    template: 
    metadata: 
     name: pi 
    spec: 
     containers: 
     - name: pi 
     image: perl 
     command: ["/usr/bin/timeout", "10", "perl", "-Mbignum=bpi", "-wle", "print bpi(4000)"] 
     restartPolicy: Never 

あなたは数字で遊ぶことができます

(マニフェストがhttps://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#running-an-example-jobから採用)とそれにタイムアウトを参照してください。

例えば、PIの最初の4000個の数字を計算し、次の仕事は、10秒後にタイムアウトしますか否か。一般的に、私のワークステーションでは、約4000桁のpiの計算には約23秒かかるので、5秒に設定すると常に失敗します.120秒に設定すると、常に動作します。

+0

ありがとう!ポッドテンプレートは画像を単に実行するのではなく、画像のデフォルトコマンドを知っておく必要がありますが、これはたくさんあります。それは少し残念ですが、確かに実行可能な解決策です。 – Bosh

+0

あなたは常に引数の変数を作成できます。 '$ TIMEOUT'を実行し、その値がConfigMapマウントから来ているので、ハードコードする必要はありません。これにより、ConfigMapで変更することができ、新しいジョブで新しい値が使用されます。 –

+0

これは良い点ですが、スペックはまだ画像のデフォルトコマンドを知る必要があります。 – Bosh

関連する問題