Kubectl 从 cronjob 创建作业并覆盖参数

问题描述 投票:0回答:3

Kubectl
允许您根据现有的 crons 创建临时作业。

这很有效,但在文档中没有在创建作业时传递参数的规范。

示例:

kubectl -n my-namespace create job --from=cronjob/myjob my-job-clone

我有什么办法可以在创建时将争论传递给这项工作吗?

amazon-web-services kubernetes cron devops kubectl
3个回答
15
投票

虽然

kubectl
目前不允许您使用 --from 标志并在同一子句中指定命令,但您可以通过从试运行中获取 yaml 并使用
yq
应用补丁来解决此限制它。

例如:

# get the original yaml file
kubectl create job myjob --from cronjob/mycronjob --dry-run=client --output yaml > original.yaml

# generate a patch with your new arguments
yq new 'spec.template.spec.containers[0].args[+]' '{INSERT NEW ARGS HERE}' > patch.yaml

# apply the patch
yq merge --arrays update patch.yaml original.yaml > final.yaml

# create job from the final yaml 
kubectl create -f final.yaml

9
投票

好吧,事实证明

kubectl
不允许您使用
--from
并在同一子句中指定命令。

您将收到以下错误

cannot specify --from and command

例如:

kubectl create job --from=cronjob/my-job.yaml my-job-test -- node run.js --date '2021-04-04'

error: cannot specify --from and command

所以简而言之,你不能使用现有的 cron 模板并指定命令。

您可以获得的最接近的结果是使用

--image
标志并手动传入文件所需的图像,然后指定命令和参数。

kubectl create job --image=<YOUR IMAGE NAME> my-job-test -- node run.js --date '2021-04-04'
 
job.batch/my-job-test created

0
投票

这是我的一些试运行的解决方法和

kubectl patch

kubectl create job --from=cronjob/cronjob-name new-job-name --dry-run=client -o yaml | kubectl patch --dry-run=client -o yaml --type json --patch '[{ "op": "replace", "path": "/spec/template/spec/containers/0/args", "value": ["new", "args"] }]' -f - | kubectl apply -f -
© www.soinside.com 2019 - 2024. All rights reserved.