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

syk*_*kik 6 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
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

jav*_*apo 5

这里是一个通用答案,只是想指导你。一般来说,您表达的是需要“参数化”您的 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”。

  • Helm 似乎是为长期应用程序而构建的,有没有办法从 helm 获得类似“工作”的东西? (4认同)