【问题标题】:Kubernetes: Set environment variable in all podsKubernetes:在所有 pod 中设置环境变量
【发布时间】:2022-01-27 23:48:29
【问题描述】:

是否可以提供将在所有 pod 中设置的环境变量,而不是在每个 pod 规范中进行配置?

如果 Kubernetes 本身无法实现,那么实现它的有效方法是什么?我们有 Helm,但这仍然需要大量重复。

这个旧答案建议“PodPreset”不再是 Kubernetes 的一部分:Kubernetes - Shared environment variables for all Pods

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    您可以使用 mutating admission webhook 将环境变量注入到 pod 清单中。

    还有更多关于实现 webhook here 的细节。

    【讨论】:

    【解决方案2】:

    我不确定您是否可以为集群中的每个 pod 执行此操作(如果这是您的意思),但您可以为应用程序或服务中的每个 pod 执行此操作。

    例如,通过 Deployment,您可以在 pod 模板中设置一个变量,所有副本都将携带该值。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      ...
    spec:
      replicas: 5
      template:
        metadata:
          ...
        spec:
          containers:
          - image: nginx
            name: nginx
            ...
            env:
            - name: VAR_NAME      # <---
              value: "var_value"  # <---
            ...
    

    在这个(经过编辑的)示例中,所有 5 个 nginx 副本都将环境变量 VAR_NAME 设置为值 var_value。

    您还可以使用配置映射 (https://kubernetes.io/docs/concepts/configuration/configmap/) 或机密 (https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-environment-variables) 从共享位置设置环境变量,具体取决于您的要求。

    【讨论】:

    • 谢谢。这就是我们正在做的事情。但是我们希望为所有部署都这样做,因为我们有一些大多数部署使用的常见配置。
    • 那么我的建议是一个基本图表(或部署),它具有这些值作为 configmap 或秘密,然后您可以在所有其他图表中使用它,并使用 helm 或维护基本值您选择的 CI/CD。但是有一个重要的警告,那就是如果你不小心删除了部署或 helm release,所有依赖于该挂载的 pod 都将无法启动,因为它们试图挂载不再存在的东西。
    • 你好@sean。如果可以解决您的问题,请考虑accepting the answer。
    猜你喜欢
    • 2019-06-30
    • 1970-01-01
    • 1970-01-01
    • 2022-11-20
    • 1970-01-01
    • 2021-09-21
    • 2020-03-30
    • 2023-03-13
    • 2019-05-08
    相关资源
    最近更新 更多