Docker
是否可以重新執行 kubernetes 作業?
我有以下 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
這項工作並創建了一個 pod 時,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
,但我想知道我是否可以以某種方式重新喚醒已經存在的工作?
不,絕對沒有辦法重新執行 Kubernetes 作業。您需要先將其刪除。
通過將作業替換為自身來模擬重新執行:
- 備份您的工作:
kubectl get job "your-job" -o json > your-job.json
- 替換工作到位:
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 -
更新了Jeremy Huiskamp的建議