J'ai la configuration de travail Kubernetes suivante:
---
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: {}
Quand je fais kubectl create -f dbload-deployment.yml --record
le travail et un pod sont créés, le conteneur Docker se termine et j'obtiens ce statut:
$ 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
Ce travail est unique et je dois pouvoir le relancer. Si j'essaye de le relancer avec kubectl create
commande j'obtiens cette erreur
$ kubectl create -f dbload-deployment.yml --record
Error from server: error when creating "dbload-deployment.yml": jobs.batch "dbload" already exists
Bien sûr, je peux faire kubectl delete job dbload
puis exécutez kubectl create
mais je me demande si je peux en quelque sorte réveiller le travail qui existe déjà?
Non. Il n'y a certainement aucun moyen de réexécuter un travail kubernetes. Vous devez d'abord le supprimer.
Vous pouvez simuler une réexécution en remplaçant le travail par lui-même:
kubectl get job "your-job" -o json | kubectl replace --force -f -
Si vous obtenez des erreurs en raison d'étiquettes ou de sélecteurs générés automatiquement, vous pouvez les supprimer ou les modifier avec jq:
kubectl get job "your-job" -o json | jq 'del(.spec.selector)' | jq 'del(.spec.template.metadata.labels)' | kubectl replace --force -f -
Vous pouvez également éviter l'erreur que vous avez mentionnée en spécifiant
metadata: generateName: dbload
au lieu de simplement name
Dans ce cas, chaque travail que vous soumettez avec ce fichier yaml aura un nom unique qui ressemblera à quelque chose comme dbloada1b2c
. Ensuite, vous pouvez décider si vous devez supprimer les anciens travaux, mais vous n'aurez pas ayez pour le faire.