Можно ли перезапустить работу Куберне?

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но мне интересно, смогу ли я как-то пробудить работу, которая уже существует?

Bostone
источник

Ответы:

22

Нет. Определенно нет способа возобновить работу в kubernetes. Вы должны сначала удалить его.

cohadar
источник
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. Затем вы можете решить, нужно ли вам удалять старые задания, но вам не придется это делать.

vp124
источник
Я считаю, что generateName относится только к kind = pod, а НЕ к заданию.
user518066
2
Нет, это стандартная часть ObjectMeta и применяется как к pod, так и к job: k8s reference . Я использовал это все время, это суть того, что я делаю.
vp124
1
Большое спасибо за этот уклонение. Просто для документации это работает только сkubectl create
Ohmen