首页 文章

使用共享环境变量进行K8S部署

提问于
浏览
1

我们有一组使用相同docker镜像的部署(pod集) . 例子:

  • web api

  • 网站管理员

  • web任务工作节点

  • 数据任务工作节点

  • ......

它们都需要一组常见的环境变量,例如数据库主机的位置,外部服务的密钥等 . 它们还有一组不常见的环境变量 .

无论如何,有人可以:

  • 重用定义环境变量的模板

  • 从文件加载环境变量并将其设置在pod上

最佳解决方案是名称空间感知的解决方案,因为我们使用kubernetes名称空间分隔测试,阶段和prod环境 .

类似于dockers env_file的东西会很好 . 但我找不到与此相关的任何示例或参考 . 我唯一能找到的是通过秘密设置env,但这不是干净的,详细的方式,因为我仍然需要为每个部署编写所有环境变量 .

1 回答

  • 1

    你可以create a ConfigMap与所有常见的 kye:value 对env变量 .

    然后,您可以重用configmap将 configMap 的所有值声明为 Deployment 中的环境 .

    以下是kubernetes official docs的示例 .

    创建包含多个键值对的ConfigMap .

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: special-config
      namespace: default
    data:
      SPECIAL_LEVEL: very
      SPECIAL_TYPE: charm
    

    使用envFrom将所有ConfigMap的数据定义为Pod环境变量 . ConfigMap中的键成为Pod中的环境变量名称 .

    apiVersion: v1
    kind: Pod
    metadata:
      name: test-pod
    spec:
      containers:
        - name: test-container
          image: k8s.gcr.io/busybox
          command: [ "/bin/sh", "-c", "env" ]
          envFrom:
          - configMapRef:
              name: special-config # All the key-value pair will be taken as environment key-value pair
          env:
          - name: uncommon
            value: "uncommon value"
      restartPolicy: Never
    

    您可以在 env 字段中指定不常见的env变量 .

    现在,要验证环境变量是否实际可用,请参阅日志 .

    $ kubectl logs -f test-pod 
    KUBERNETES_PORT=tcp://10.96.0.1:443
    SPECIAL_LEVEL=very
    uncommon=uncommon value
    SPECIAL_TYPE=charm
    ...
    

    在这里,可以看到所有提供的环境都可用 .

相关问题