【问题标题】:Inject host's environment variable into K8s Pod将主机的环境变量注入 K8s Pod
【发布时间】:2022-01-11 04:43:03
【问题描述】:

我想在我的一个 IoT 设备上运行一个 pod。 这些设备中的每一个都包含一个我希望这个 pod 使用的环境变量。 有没有办法使用helm/kubectl 的内置模板将此环境变量注入 pod? 我在我的deployment.yaml 文件上尝试了以下操作:

env: 
  - name: XXX
    value: $ENV_FROM_HOST

但是在执行 pod 并尝试获取 XXX 值时,我从主机获取字符串 $ENV_FROM_HOST 而不是它的值:

$ echo $XXX
$ENV_FROM_HOST

谢谢。

【问题讨论】:

  • 嗨。这个环境变量会保存任何敏感信息吗?
  • @EmidioNeto 嗨,绝对不是。对于我的用例来说,使用 k3s 机密将是一个巨大的过度杀伤。
  • 环境变量一般设置在哪里? pod 实际运行在哪个节点上是否重要?
  • 我在所有节点上使用ansible 设置了这个环境。所以不,没关系,因为每个 pod 都会在其主机上拥有这个环境。
  • 我的问题更多,主机没有环境变量,进程有。那么您是想从特定进程中获取环境变量,还是像/etc/profile 这样的shell 点文件,或其他来源?你能把它注入到像 ConfigMap 这样的 Kubernetes 原生存储中吗?如果您为 Pod 配置了一个变量值,但它被调度到具有不同值的节点上,这对您的处理有影响吗?

标签: kubernetes environment-variables kubernetes-helm


【解决方案1】:

说到Kubernetes,一个假设是pod只有sharing resources between containers in the pod

Pod(如鲸鱼荚或豌豆荚)是一组由一个或多个 containers 组成的组,具有共享存储和网络资源,以及如何运行容器的规范. Pod 的内容始终是共同定位和共同调度的,并且在共享上下文中运行。

这意味着一个 pod 与运行在(节点)上的主机是隔离的,所以你不能直接从节点上读取你想要的环境变量。

但是,我想到了一些解决方法。

如果所有节点的环境变量都相同:

  • 如果您使用 CI/CD,那么您可以实现以下代码。 在部署定义中 - deployment.yaml

    env: 
      - name: XXX
        value: ENV_TO_CHANGE
    

    命令:

    sed "s/ENV_TO_CHANGE/{YOUR_VALUE}/g" deployment.yaml | kubectl apply -f -
    

    它不会编辑现有文件;它将输出编辑后的deployment.yaml 文件并通过管道传递给kubectl apply 命令

如果每个节点的环境变量不同:

  • 将您的环境变量设置为节点标签,然后将它们注入 pod - this thread 中提供了一些解决方案。
  • (不推荐) - 将节点上的环境变量保存为特定目录中的文件,然后使用 hostPath volume 在 pod 上读取它。请记住,hostPath 存在许多安全风险,最好避免。

【讨论】:

    【解决方案2】:

    无法将主机的环境变量直接传递给 pod。我经常通过创建 ConfigMap 来做到这一点。

    1. 使用from-lireral 选项创建一个 ConfigMap:

      kubectl create configmap testcm --from-literal=hostname=$HOSTNAME
      
    2. 参考 Pod 清单中的内容:

      - name: TEST
        valueFrom:
          configMapKeyRef:
            name: testcm
            key: hostname
      

    这会将主机的 $HOSTNAME 注入 Pod 的 $TEST。

    如果是敏感信息,可以使用 Secrets 代替 ConfigMap。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-20
      • 1970-01-01
      • 2020-06-28
      • 2023-01-10
      • 2019-11-16
      • 1970-01-01
      • 1970-01-01
      • 2013-05-26
      相关资源
      最近更新 更多