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?
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
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
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>'
J'utiliserais -w
ou --watch
:
kubectl get jobs.batch --watch
NOM FINITIONS DUREE ÂGE python 0/1 3m4s 3m4s