Frage Ist es möglich, kubernetes job erneut zu betreiben?


Ich habe die folgende Kubernetes Job Konfiguration:

---
apiVersion: batch/v1
kind: Job
metadata:
  name: dbload
  creationTimestamp: 
spec:
  template:
    metadata:
      name: dbload
    spec:
      containers:
      - name: dbload
        image: sdvl3prox001:7001/pbench/tdload
        command: ["/opt/pbench/loadTpcdsData.sh",  "qas0063", "dbc", "dbc", "1"]
      restartPolicy: Never
      imagePullSecrets: 
        - name: pbenchregkey
status: {}

Wenn ich es tue kubectl create -f dbload-deployment.yml --record der Job und ein Pod werden erstellt, der Docker-Container wird vollständig ausgeführt und ich erhalte diesen Status:

$ kubectl get job dbload
NAME      DESIRED   SUCCESSFUL   AGE
dbload    1         1            1h
$ kubectl get pods -a
NAME           READY     STATUS      RESTARTS   AGE
dbload-0mk0d   0/1       Completed   0          1h

Dieser Job ist ein einmaliger Deal und ich muss ihn wiederholen können. Wenn ich versuche, es mit zu wiederholen kubectl create Befehl bekomme ich diesen Fehler

$ kubectl create -f dbload-deployment.yml --record
Error from server: error when creating "dbload-deployment.yml": jobs.batch "dbload" already exists

Natürlich kann ich tun kubectl delete job dbload und dann rennen kubectl create aber ich frage mich, ob ich den Job, der bereits existiert, irgendwie wiedererwecken kann?


19
2017-10-17 23:35


Ursprung




Antworten:


Nein, es gibt definitiv keine Möglichkeit, einen Kubernetes-Job erneut zu machen. Sie müssen es zuerst löschen.


15
2018-04-24 18:10



Yep, vor einer Weile herausgefunden, danke! - Bostone


Sie können den angegebenen Fehler auch vermeiden, indem Sie angeben

metadata: generateName: dbload

statt einfach name

In diesem Fall hat jeder Job, den Sie mit dieser Yaml-Datei senden, einen eindeutigen Namen, der ungefähr so ​​aussieht dbloada1b2c. Dann können Sie entscheiden, ob Sie die alten Jobs löschen müssen, aber Sie nicht haben es zu tun.


8
2017-08-15 21:39



Ich glaube generateName gilt nur für art = pod und NOT job. - user518066
Nein, es ist ein Standardteil von ObjectMeta und gilt sowohl für den Pod als auch für den Job: k8s Referenz. Ich benutze es die ganze Zeit, es ist der Kern dessen, was ich mache. - vp124
Vielen Dank für diesen Trick. Nur zur Dokumentation funktioniert das nur mit kubectl create - Ohmen


Sie können eine Wiederholung simulieren, indem Sie den Job durch sich selbst ersetzen:

  • kubectl get job "your-job" -o json | kubectl replace --force -f -

Wenn Sie aufgrund von automatisch generierten Labels oder Selektoren Fehler erhalten, können Sie sie mit jq löschen oder bearbeiten:

  • kubectl get job "your-job" -o json | jq 'del(.spec.selector)' | jq 'del(.spec.template.metadata.labels)' | kubectl replace --force -f -

7
2017-12-19 09:20