kubernetesジョブを再実行することは可能ですか?


35

次のKubernetesジョブ構成があります。

---
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: {}

kubectl create -f dbload-deployment.yml --recordジョブを実行してポッドが作成されると、Dockerコンテナーが完了するまで実行され、次のステータスが表示されます。

$ 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

この仕事は一度きりであり、再実行できるようにする必要があります。kubectl createコマンドで再実行しようとすると、このエラーが発生します

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

もちろんkubectl delete job dbload、実行してから実行できますkubectl createが、既に存在するジョブを何らかの形で再起動できるかどうか疑問に思っていますか?

回答:


22

いいえ。kubernetesジョブを再実行する方法はありません。最初に削除する必要があります。


23

ジョブをそれ自体で置き換えることにより、再実行をシミュレートできます。

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

自動生成されたラベルまたはセレクターによってエラーが発生した場合は、jqでそれらを削除または編集できます。

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

1
最初にジョブjsonのコピーをファイルに保存することを強くお勧めします。 kubectl replace再作成するエラーが発生する前にジョブを削除します。
ジェレミーフイスカンプ

最初にjsonを保存してから再作成してください!!
深海ダイビング

14

また、指定したエラーを回避することもできます

metadata: generateName: dbload

単にではなく name

その場合、このyamlファイルで送信する各ジョブには、のような一意の名前が付けられますdbloada1b2c。そして、あなたは、古いジョブを削除する必要があるかどうかを決めることができますが、ではないだろう持ってそれを行うこと。


generateNameはkind = podにのみ適用され、ジョブには適用されないと考えています。
user518066

2
いいえ、ObjectMetaの標準部分であり、ポッドとジョブの両方に適用されます:k8s reference。私はいつもそれを使ってきました、それは私がやっていることの中核です。
vp124

1
この回避をありがとうございました。文書化のためだけにこれはkubectl create
-Ohmen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.