web-dev-qa-db-ja.com

ジョブが完了したときに通知する

Kubernetesジョブが完了したことを(スクリプト内から)通知する方法を探しています。その後、コンテナからログを取得してクリーンアップを実行します。

これを行うにはどうすればよいでしょうか? kubectl describe job <job_name>を実行して1 Succeededなどのgrepを実行するのが最善の方法でしょうか?

37
russt

バージョン1.11以降、次のことができます。

kubectl wait --for=condition=complete job/myjob

また、タイムアウトを設定することもできます。

kubectl wait --for=condition=complete --timeout=30s job/myjob
60
abagshaw

次のコマンドを使用して、ジョブのステータスを視覚的に監視できます。

kubectl get jobs myjob -w

-wオプションは、変更を監視します。 1を表示するSUCCESSFUL列を探しています。

シェルスクリプトで待機するには、次のコマンドを使用します。

until kubectl get jobs myjob -o jsonpath='{.status.conditions[? 
    (@.type=="Complete")].status}' | grep True ; do sleep 1 ; done
22
Eric Tune

公式のPython kubernetes-clientを使用できます。

https://github.com/kubernetes-client/python

新規作成Python virtualenv:

virtualenv -p python3 kubernetes_venvで有効化

source kubernetes_venv/bin/activate

kubernetesクライアントをインストールします:

pip install kubernetes

新しいPythonスクリプトを作成して実行:

from kubernetes import client, config

config.load_kube_config()

v1 = client.BatchV1Api()
ret = v1.list_namespaced_job(namespace='<YOUR-JOB-NAMESPACE>', watch=False)
for i in ret.items:
    print(i.status.succeeded)

~/.kube/configに特定のkubeconfigとジョブ名前空間の有効な値を設定することを忘れないでください-> '<YOUR-JOB-NAMESPACE>'

2
user9008857

私は使うだろう -w または --watch

kubectl get jobs.batch --watch

名前の補完の期間python 0/1 3m4s 3m4s

0