Tengo la siguiente configuración de trabajo de 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: {}
Cuando hago kubectl create -f dbload-deployment.yml --record
el trabajo y se crea un pod, el contenedor Docker se ejecuta hasta su finalización y obtengo este estado:
$ 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
Este trabajo es un contrato de una sola vez y necesito poder volver a ejecutarlo. Si intento volver a ejecutarlo con el kubectl create
comando, aparece este error
$ kubectl create -f dbload-deployment.yml --record
Error from server: error when creating "dbload-deployment.yml": jobs.batch "dbload" already exists
Por supuesto que puedo hacer kubectl delete job dbload
y luego correr, kubectl create
pero me pregunto si de alguna manera puedo volver a despertar el trabajo que ya existe.
fuente
kubectl replace
elimina el trabajo antes de encontrarse con los errores que lo recrean.También puede evitar el error que mencionó especificando
metadata: generateName: dbload
en lugar de simplemente
name
En ese caso, cada trabajo que envíe con este archivo yaml tendrá un nombre único que tendrá un aspecto similar
dbloada1b2c
. Luego puede decidir si necesita eliminar los trabajos anteriores, pero no tendrá que hacerlo.fuente
kubectl create