我有一个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
我可以成功运行此作业资源
kubectl create -f my-job.yml
但是,我不确定我是如何传递我的论据对应的
的命令:[ 'ARG1', 'ARG2']
我认为每个请求使用动态args更新文件都很麻烦。
我尝试了kubectl patch -f my-job.yml --type='json' -p='[{"op": "add", "path": "/spec/template/spec/containers/0/", "value": {"command": ["arg1","arg2"] } }]'
,这适用于部署类型但是对于Job它不起作用
我试过了
sudo kubectl run explicitly-provide-name-which-i-dont-want-to --image=index.docker.io/some/image:latest --restart=Never -- arg1 arg2
,但为此我将无法通过 imagePullSecrets 。
答案 0 :(得分:1)
这里有一个通用的答案,只是想引导你。通常,您表达的是需要“参数化”您的kubernetes部署描述符。有些方法有些简单,有些方面有点hacky,最后有github.com/kubernetes/helm。
我个人强烈建议您在群集上安装Helm,然后将您的工作或任何vanilla kubernetes部署描述符“迁移”到掌舵图表中。这将最终为您提供以不同方式和不同配置旋转作业所需的“参数化”能力。
但是,如果这听起来对你来说太多了,我可以在发现Helm之前推荐一些我正在做的事情。使用像'bash'/'envsubst'这样的东西我最终 - 手动模板化yaml文件的各个部分,使用占位符(例如env变量)然后我将yaml提供给像'envsubst'这样的工具,在那里他们替换了占位符与环境的价值观。丑陋?是。 Maintenable?也许只是为了几个简单的例子。 envsubst here的示例。
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
希望有所帮助..但如果你有时间,请认真考虑检查'Helm'。
答案 1 :(得分:0)
我还会考虑从环境变量中获取命令参数。然后这些变量由javapapo提到的helm提供。