首页 > 解决方案 > 有没有办法将作业 id 作为环境变量注入到 kubernetes 的容器中?

问题描述

下面的 yaml 将 pod 的名称作为 RUN_ID 注入到容器中。如果此 cron 作业启动 10 个 pod(并行度 = 10),则 10 个 pod 中的每一个都将具有不同的运行 ID。但我希望所有 10 个 pod 都具有相同的运行 ID。DownwardApi 似乎不支持检索作业 ID。还有其他方法吗?

在我的情况下,它不需要是工作 ID。当新作业启动时,可以在所有 10 个 pod 中设置的任何随机 id 都可以。因此,对此的任何想法也会有所帮助。

apiVersion: batch/v1
kind: CronJob
metadata:
  name: ${CRONJOB_NAME}
  namespace: ${NAMESPACE_NAME}
spec:
  schedule: "0 8 * * *"
  successfulJobsHistoryLimit: 1
  failedJobsHistoryLimit: 1
  jobTemplate:
    spec:
      backoffLimit: 4
      parallelism: ${PARALLEL_JOBS_COUNT}
      completions: ${PARALLEL_JOBS_COUNT}
      template:
        spec:
          containers:
          - name: ${CONTAINER_NAME}
            image: ${DOCKER_IMAGE_NAME}
            imagePullPolicy: IfNotPresent
            env:
            - name: RUN_ID
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name ---> this gets the pod's name
    .
    .

标签: kuberneteskubernetes-cronjob

解决方案


RUN_ID=${POD_NAME%\-*}在命令中执行了从 pod 名称中提取作业名称的命令。这解决了我的用例。

 spec:
      containers:
      - name: ${CONTAINER_NAME}
        image: ${ACR_DNS}/${JMETER_DOCKER_IMAGE}
        imagePullPolicy: IfNotPresent
        command:
        - /bin/sh
        - -c
        - 'export RUN_ID=${POD_NAME%\-*}; cd /config; /entrypoint.sh -n -Jserver.rmi.ssl.disable=true -Ljmeter.engine=debug -Jjmeterengine.force.system.exit=true -t \$(JMETER_JMX_FILE)'
        env:
        - name: RUN_ID
          valueFrom:
            fieldRef:
              fieldPath: metadata.name

推荐阅读