有没有办法将作业 ID 作为 env 变量注入到 kubernetes 中的容器中?

Is there a way to inject job id as an env variable into a container in kubernetes?

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

在我的例子中,它不必是工作 ID。当启动新作业时,可以在所有 10 pods 中设置的任何随机 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
    .
    .

我在命令中执行了 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