【发布时间】:2019-07-10 00:30:27
【问题描述】:
我需要能够将自定义环境变量分配给 pod 的每个副本。一个变量应该是一些随机的 uuid,另一个唯一的数字。怎么可能实现?我宁愿继续使用带有副本的“部署”。如果开箱即用不可行,如何通过自定义复制控制器/控制器管理器来实现?有没有可用的钩子来实现这一点?
【问题讨论】:
标签: controller kubernetes environment-variables
我需要能够将自定义环境变量分配给 pod 的每个副本。一个变量应该是一些随机的 uuid,另一个唯一的数字。怎么可能实现?我宁愿继续使用带有副本的“部署”。如果开箱即用不可行,如何通过自定义复制控制器/控制器管理器来实现?有没有可用的钩子来实现这一点?
【问题讨论】:
标签: controller kubernetes environment-variables
您可以使用向下 API 将 pod 的 metadata.uid 作为 envvar 注入,每个 pod 都是唯一的
【讨论】:
如果开箱即用不可行,如何通过自定义复制控制器/控制器管理器来实现?有没有可用的钩子来实现这一点?
您最好的选择是initContainer: 和/或自定义(可能被覆盖)入口点command: 的混合。除了它们的名称和其他一些微不足道的变化之外,Pod 都将是彼此的复本。任何每个 Pod 的特定行为都是 Pod 中的容器本身的责任。
containers:
- image: whatever
command:
- bash
- -c
- |
export RANDOM_UUID=`uuidgen`
export UNIQ=/usr/bin/generate-some-awesome-sauce
exec /usr/local/bin/dockerfile-entrypoint.sh or whatever else
【讨论】:
initContainers:,所以用那个来运行image: super-sekrit-generator:1,并在两个容器之间卷挂载一个emptyDir: {},然后用那个注入到主容器的环境中.也就是说,如果您 100% 反对覆盖 command:,那么您将面临很多痛苦
kubectl run hello --restart Never --image busybox -- /bin/sh -c "while true; do echo \$RANDOM; sleep 1;done"
或
kubectl run busybox --image busybox --env=random=$RANDOM --restart 从不 -- /bin/sh -c "echo \$random"
这很好用
[root@master 41-jobs]# kubectl logs hello
3298
16447
9517
3082
32611
19179
21098
12943
【讨论】: