如何将参数传递给Kubernetes中的Job资源

时间:2018-04-03 18:17:55

标签: kubernetes

我有一个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

2 个答案:

答案 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提供。