【问题标题】:Kubernetes Pod Dynamic Environment VariablesKubernetes Pod 动态环境变量
【发布时间】:2019-07-10 00:30:27
【问题描述】:

我需要能够将自定义环境变量分配给 pod 的每个副本。一个变量应该是一些随机的 uuid,另一个唯一的数字。怎么可能实现?我宁愿继续使用带有副本的“部署”。如果开箱即用不可行,如何通过自定义复制控制器/控制器管理器来实现?有没有可用的钩子来实现这一点?

【问题讨论】:

    标签: controller kubernetes environment-variables


    【解决方案1】:

    您可以使用向下 API 将 pod 的 metadata.uid 作为 envvar 注入,每个 pod 都是唯一的

    【讨论】:

      【解决方案2】:

      如果开箱即用不可行,如何通过自定义复制控制器/控制器管理器来实现?有没有可用的钩子来实现这一点?

      您最好的选择是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
      

      【讨论】:

      • 容器内发生的事情超出了我的能力范围。所以“/usr/bin/generate-some-awesome-sauce”并不是真的可用。
      • 它永远不会超出您的能力范围,因为 kubernetes 是一个容器编排器。但是,你会发现我也提到了initContainers:,所以用那个来运行image: super-sekrit-generator:1,并在两个容器之间卷挂载一个emptyDir: {},然后用那个注入到主容器的环境中.也就是说,如果您 100% 反对覆盖 command:,那么您将面临很多痛苦
      • 谢谢,明天我会调查的!通过任何方式,有状态集可以使这更容易吗?看起来他们有自动生成的法令索引。
      • 使用 StatefulSet,您仍然需要从 pod 中提取法令索引,这可以在 initContainer 中完成。
      • 如何将法令索引从 initContainer 传递到计算容器?我想避免使用卷。我可以写入环境变量吗?我使用“导出”命令进行验证,但它没有用。
      【解决方案3】:
      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

      【讨论】:

        猜你喜欢
        • 2021-05-15
        • 2020-03-30
        • 2019-06-30
        • 2021-08-19
        • 2021-08-26
        • 2019-08-02
        • 1970-01-01
        • 2021-09-29
        • 2020-10-11
        相关资源
        最近更新 更多