我有一个Job资源文件,如下所示。我需要使用此定义运行多个实例,并为每个实例使用单独的参数。
apiVersion: batch/v1
kind: Job
metadata:
generateName: abc-
spec:
template:
spec:
containers:
- name: abc
image: index.docker.io/some/image:latest
imagePullPolicy: Always
imagePullSecrets:
- name: some_secret
restartPolicy: Never
backoffLimit: 4
Run Code Online (Sandbox Code Playgroud)
我可以使用kubectl create -f my-job.yml
But 成功运行此作业资源,
但我不确定如何传递与命令相对应的参数
:['arg1','arg2']
我认为为每个请求使用我的动态参数更新文件只是一团糟。
我试过了kubectl patch -f my-job.yml --type='json' -p='[{"op": "add", "path": "/spec/template/spec/containers/0/", "value": {"command": ["arg1","arg2"] } }]',这对Deployment类很有效,但对Job却不起作用
我尝试了
sudo kubectl run explicitly-provide-name-which-i-dont-want-to --image=index.docker.io/some/image:latest --restart=Never -- arg1 arg2,但是为此我无法通过imagePullSecrets。
这里是一个通用答案,只是想指导你。一般来说,您表达的是需要“参数化”您的 kubernetes 部署描述符。有不同的方法,有些很简单,有些则有点hacky,最后是github.com/kubernetes/helm。
就我个人而言,我强烈建议您在集群上安装 Helm,然后将您的作业或任何普通 kubernetes 部署描述符“迁移”到 Helm Chart 中。这最终将为您提供以不同方式和不同配置旋转作业所需的“参数化”功能。
但是,如果这听起来对您来说太多了,我可以推荐一些我在发现 Helm 之前正在做的事情。使用“bash”/“envsubst”之类的东西,我最终使用占位符(例如 env 变量)手动模板化 yaml 文件的各个部分,然后我将 yaml 提供给“envsubst”等工具,它们在其中替换占位符与环境的价值观。丑陋的?是的。可维护吗?也许举几个简单的例子。这里是 envsubst 的例子。
apiVersion: batch/v1
kind: Job
metadata:
spec:
template:
spec:
containers:
- name: abc
image: index.docker.io/some/image:latest
imagePullPolicy: Always
imagePullSecrets:
- name: $SOME_ENV_VALUE
restartPolicy: Never
backoffLimit: 4
Run Code Online (Sandbox Code Playgroud)
希望这会有所帮助......但认真地说,如果您有时间,请考虑检查“Helm”。
| 归档时间: |
|
| 查看次数: |
2628 次 |
| 最近记录: |