Apakah mungkin untuk menjalankan kembali pekerjaan kubernetes?


35

Saya memiliki konfigurasi Pekerjaan Kubernetes berikut:

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

Ketika saya melakukan kubectl create -f dbload-deployment.yml --recordpekerjaan dan pod dibuat, wadah Docker berjalan ke selesai dan saya mendapatkan status ini:

$ 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

Pekerjaan ini adalah satu kali perjanjian dan saya harus bisa memutarnya kembali. Jika saya mencoba menjalankannya kembali dengan kubectl createperintah saya mendapatkan kesalahan ini

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

Tentu saja saya bisa melakukannya kubectl delete job dbloaddan kemudian berlari kubectl createtetapi saya bertanya-tanya apakah saya dapat membangunkan kembali pekerjaan yang sudah ada?

Jawaban:


22

Tidak. Jelas tidak ada cara untuk menjalankan kembali pekerjaan kubernetes. Anda harus menghapusnya terlebih dahulu.


23

Anda dapat mensimulasikan tayangan ulang dengan mengganti pekerjaan itu sendiri:

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

Jika Anda mendapatkan kesalahan karena label atau penyeleksi yang dibuat secara otomatis, Anda dapat menghapus atau mengeditnya dengan jq:

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

1
Akan sangat menyarankan menyimpan salinan pekerjaan json ke file terlebih dahulu. kubectl replacemenghapus pekerjaan sebelum mengalami kesalahan saat membuatnya kembali.
Jeremy Huiskamp

Simpan json pertama dan kemudian buat kembali !!
deepdive

14

Anda juga dapat menghindari kesalahan yang Anda sebutkan dengan menentukan

metadata: generateName: dbload

bukannya sederhana name

Dalam hal ini, setiap pekerjaan yang Anda kirimkan dengan file yaml ini akan memiliki nama unik yang akan terlihat seperti dbloada1b2c. Kemudian Anda dapat memutuskan apakah Anda perlu menghapus pekerjaan lama, tetapi Anda tidak harus melakukannya.


Saya percaya generateName hanya berlaku untuk jenis = pod dan BUKAN pekerjaan.
user518066

2
Tidak, ini adalah bagian standar ObjectMeta dan berlaku untuk pod dan referensi pekerjaan: k8s . Saya telah menggunakannya sepanjang waktu, itu inti dari apa yang saya lakukan.
vp124

1
Terima kasih banyak untuk menghindar ini. Hanya untuk dokumentasi, ini hanya bekerja dengankubectl create
Ohmen
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.