soa*_*gem 8 kubernetes kubectl
特别是,我想设置环境变量。我有一个CronJob
按计划运行的定义,但我经常想在指定略有不同的环境变量时手动调用它。
我可以使用以下命令手动调用 cron 作业:
kubectl create job --from=cronjob/my-cron-job my-manual-run
Run Code Online (Sandbox Code Playgroud)
但这会复制资源定义中指定的所有相同环境变量。如何使用此create job
命令添加其他新的环境变量?
小智 8
我根据 @Rico 的答案,首先在 kubectl 中将作业创建为 a --dry-run
,然后使用 修改作业jq
,然后应用。这消除了对基础 JSON 文件和管理其他作业元数据字段的需要。
例如:
$ kubectl create job --from=cronjob/my-cron-job my-manual-run --dry-run -o "json" \
| jq ".spec.template.spec.containers[0].env += [{ \"name\": \"envname1\", value:\"$envvalue1\" }]" \
| kubectl apply -f -
Run Code Online (Sandbox Code Playgroud)
IMO 最简单的方法是拥有一个基本 JSON 文件并对其进行修改。的输出kubectl get cronjob jobname
有很多您不需要的其他信息。
例如:
{
"apiVersion": "batch/v1",
"kind": "Job",
"metadata": {
"name": "changeme"
},
"spec": {
"template": {
"metadata": {
"labels": {
"job-name": "changeme"
}
},
"spec": {
"restartPolicy": "Never",
"containers": [
{
"command": [
"perl",
"-Mbignum=bpi",
"-wle",
"print bpi(2000)"
],
"image": "perl",
"name": "pi"
}
]
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后运行这样的事情:
$ cat yourjobtemplate.json \
| jq '. + {metadata: {name: "mynewjobname"}}' \
| jq '.spec.template.metadata.labels |= . + {"job-name": "mynewjobname"}' \
| jq '.spec.template.spec.containers[0] |= . + {"env": [{name: "envname1", value: "envvalue1"}, {name: "envname2", value: "envvalue2"}]}' \
| kubectl apply -f -
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2859 次 |
最近记录: |