Bos*_*one 80 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: {}
Run Code Online (Sandbox Code Playgroud)
当我完成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
Run Code Online (Sandbox Code Playgroud)
这项工作是一次性交易,我需要能够重新运行它。如果我尝试使用kubectl create
命令重新运行它,我会收到此错误
$ kubectl create -f dbload-deployment.yml --record
Error from server: error when creating "dbload-deployment.yml": jobs.batch "dbload" already exists
Run Code Online (Sandbox Code Playgroud)
当然我可以做kubectl delete job dbload
然后跑,kubectl create
但我想知道我是否可以以某种方式重新唤醒已经存在的工作?
F. *_*ago 62
您可以通过将作业替换为自身来模拟重新运行:
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的建议
coh*_*dar 47
不,绝对没有办法重新运行 kubernetes 作业。您需要先将其删除。
vp1*_*124 38
您还可以通过指定来避免您提到的错误
generateName: dbload
Run Code Online (Sandbox Code Playgroud)
而不是简单地 name
在这种情况下,您使用此 yaml 文件提交的每个作业都将具有一个唯一名称,类似于dbloada1b2c
. 然后,你可以决定你是否需要删除旧的工作,但你不会有这样做。
这是一个有效的 yaml 示例:
apiVersion: batch/v1
kind: Job
metadata:
generateName: netutils-
spec:
parallelism: 1
template:
spec:
containers:
- image: amouat/network-utils
name: netutil
restartPolicy: Never
Run Code Online (Sandbox Code Playgroud)
这是kubectl get job
两个kubectl create -f example.yaml
命令后的输出:
NAME COMPLETIONS DURATION AGE
netutils-5bs2s 0/1 14s 14s
netutils-dsvfk 0/1 10s 10s
Run Code Online (Sandbox Code Playgroud)
小智 7
作为@F 的改进。"kubectl.kubernetes.io/last-applied-configuration"
圣地亚哥的想法是,您可以简单地使用存储在保存初始应用配置的注释中的值,而无需任何自动生成的字段:
kubectl get job <jobname> -o json | \
jq -r '.metadata.annotations."kubectl.kubernetes.io/last-applied-configuration"' | \
kubectl replace --save-config --force -f -
Run Code Online (Sandbox Code Playgroud)
注意:对于kubectl replace
,请记住传递,--save-config
以便它使用最后应用的配置更新注释字段。
归档时间: |
|
查看次数: |
69241 次 |
最近记录: |