web-dev-qa-db-fra.com

Dire quand le travail est terminé

Je cherche un moyen de dire (depuis un script) quand un travail Kubernetes est terminé. Je veux ensuite extraire les journaux des conteneurs et effectuer le nettoyage.

Quel serait un bon moyen de faire cela? Le meilleur moyen serait-il de courir kubectl describe job <job_name> et grep pour 1 Succeeded Ou quelque chose de tel?

37
russt

Depuis la version 1.11, vous pouvez faire:

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

et vous pouvez également définir un délai d'attente:

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

Vous pouvez visuellement observer le statut d'un travail avec cette commande:

kubectl get jobs myjob -w

Le -w Option surveille les modifications. Vous recherchez la colonne SUCCESSFUL à afficher 1.

Pour attendre dans un script Shell, j'utiliserais cette commande:

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

Vous pouvez utiliser officiel Python kubernetes-client.

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

Créez un nouveau Python virtualenv:

virtualenv -p python3 kubernetes_venv l'activer avec

source kubernetes_venv/bin/activate

et installez le client kubernetes avec:

pip install kubernetes

Créez un nouveau script Python) et exécutez:

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)

N'oubliez pas de configurer votre kubeconfig dans ~/.kube/config et une valeur valide pour votre espace de nom de travail -> '<YOUR-JOB-NAMESPACE>'

2
user9008857

J'utiliserais -w ou --watch:

kubectl get jobs.batch --watch

NOM FINITIONS DUREE ÂGE python 0/1 3m4s 3m4s

0
Laith Leo Alobaidy