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

我有一个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运行显式提供名称-i-dont-want-to -image = index.docker.io / some / image:latest –restart = Never – arg1 arg2,但为此我不会能够传递imagePullSecrets.

最佳答案 这里有一个通用的答案,只是想引导你.通常,您表达的是需要“参数化”您的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’.

点赞