Tell when Job is Complete

前端 未结 4 951
花落未央
花落未央 2020-11-27 16:51

I\'m looking for a way to tell (from within a script) when a Kubernetes Job has completed. I want to then get the logs out of the containers and perform cleanup.

Wh

相关标签:
4条回答
  • 2020-11-27 17:15

    You can visually watch a job's status with this command:

    kubectl get jobs myjob -w
    

    The -w option watches for changes. You are looking for the SUCCESSFUL column to show 1.

    For waiting in a shell script, I'd use this command:

    until kubectl get jobs myjob -o jsonpath='{.status.conditions[? 
        (@.type=="Complete")].status}' | grep True ; do sleep 1 ; done
    
    0 讨论(0)
  • 2020-11-27 17:19

    I would use -w or --watch:

    $ kubectl get jobs.batch --watch
    NAME     COMPLETIONS   DURATION   AGE
    python   0/1           3m4s       3m4s
    
    0 讨论(0)
  • 2020-11-27 17:38

    Since version 1.11, you can do:

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

    and you can also set a timeout:

    kubectl wait --for=condition=complete --timeout=30s job/myjob
    
    0 讨论(0)
  • 2020-11-27 17:41

    You can use official Python kubernetes-client.

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

    Create new Python virtualenv:

    virtualenv -p python3 kubernetes_venv activate it with

    source kubernetes_venv/bin/activate

    and install kubernetes client with:

    pip install kubernetes

    Create new Python script and run:

    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)
    

    Remember to set up your specific kubeconfig in ~/.kube/config and valid value for your job namespace -> '<YOUR-JOB-NAMESPACE>'

    0 讨论(0)
提交回复
热议问题