kubernetes - 有没有办法将作业 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
.
.
解决方案
我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
推荐阅读
- entity-framework-core - 尝试使用 EF Power 工具添加数据库上下文图时无法找到系统正在寻找的依赖项
- .net-core - RabbitMQ 分片队列与一个消费者
- javascript - 同步 chrome 扩展数据而不发布
- java - 如何使用递归来解析 Java 中组内的组?
- git - 如何使用 gitignore 排除范围内的文件夹
- macos - 在带有 Appium 和 MacOS 驱动程序的 WebDriverIO 中使用什么选择器?
- c++11 - 与 C++11 中另一个文件中定义的函数模板成为朋友?
- string - 字符串函数中的 Haskell 字符
- javascript - 如何使用正则表达式仅获取包含在字符串括号中的内容?
- sbt - sbt 1.5.5 安装挂在 Windows 10 上