У меня есть следующая конфигурация работы 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
но мне интересно, смогу ли я как-то пробудить работу, которая уже существует?
источник
kubectl replace
удаляет задание перед тем, как столкнуться с ошибками, создавая его зановоВы также можете избежать ошибки, которую вы упомянули, указав
metadata: generateName: dbload
вместо просто
name
В этом случае каждое задание, которое вы отправляете с этим файлом yaml, будет иметь уникальное имя, которое будет выглядеть примерно так
dbloada1b2c
. Затем вы можете решить, нужно ли вам удалять старые задания, но вам не придется это делать.источник
kubectl create