Kubernetlerin işini tekrar başlatmak mümkün müdür?


35

Aşağıdaki Kubernet'lerin İş yapılandırmasına sahibim:

---
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İşi yaptığımda ve bir bakla oluşturulduğunda Docker kabı tamamlanmaya çalışıyor ve şu durumu alıyorum:

$ 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

Bu iş bir seferlik bir anlaşma ve yeniden çalıştırmam gerekiyor. Komutla tekrar çalıştırmayı denersem kubectl createbu hatayı alıyorum

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

Tabii ki yapabilirim kubectl delete job dbloadve sonra koşabilirim, kubectl createama zaten var olan işi bir şekilde uyandırabilir miyim acaba?

Yanıtlar:


22

Hayır. Kesinlikle bir kubernet işini yeniden başlatmanın bir yolu yok. Önce silmeniz gerekir.


23

İşi kendisiyle değiştirerek tekrar çalıştırma simülasyonu yapabilirsiniz:

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

Otomatik oluşturulan etiketler veya seçiciler nedeniyle hata alırsanız, bunları jq ile silebilir veya düzenleyebilirsiniz:

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

1
Öncelikle job json'un bir kopyasını bir dosyaya kaydetmenizi şiddetle tavsiye ederim. kubectl replaceişi yeniden yaratan hatalarla karşılaşmadan önce siler.
Jeremy Huiskamp

Önce json'u kurtar ve sonra yeniden yarat !!
derin dalış

14

Belirterek belirttiğiniz hatayı da önleyebilirsiniz.

metadata: generateName: dbload

basitçe name

Bu durumda, bu yaml dosyası ile birlikte gönderdiğiniz her işin, benzeyen benzersiz bir adı olacaktır dbloada1b2c. Sonra eski işleri silmek isteyip istemediğinize karar verebilirsiniz, ancak bunu yapmak zorunda kalmazsınız .


ConstrucName öğesinin yalnızca kind = pod ve NOT işi için geçerli olduğuna inanıyorum.
user518066

2
Hayır, bu ObjectMeta'nın standart bir parçasıdır ve hem kapsül hem de iş için geçerlidir: k8s referansı . Her zaman kullanıyorum, yaptığım şeyin özü.
vp124 11

1
Bu dodge için çok teşekkür ederim. Sadece belgeler için bu sadece işe kubectl create
yarar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.