【问题标题】:passing json string in environment variable in Kubernetes deployment yaml在 Kubernetes 部署 yaml 中的环境变量中传递 json 字符串
【发布时间】:2020-04-20 19:28:08
【问题描述】:

我正在 Kubernetes Deployment yaml 中寻找与 Docker Compose 的 SPRING_APPLICATION_JSON 环境变量等效的东西。

我知道我们可以将单个配置作为名称-值对传递。但是必须有一些东西可以通过它在Kubernetes中以json或yaml格式传递所有env变量。

【问题讨论】:

    标签: spring-boot kubernetes


    【解决方案1】:

    您可以使用以下命令:

    kubectl create cm env --from-file=SPRING_APPLICATION_JSON=./<your-json>.json
    

    【讨论】:

      【解决方案2】:

      您可以使用 ConfigMap 做到这一点。例如,创建一个 configmap:

      kind: ConfigMap
      apiVersion: v1
      metadata:
        name: appconfig
      data:
        ENV_KEY1: val1
        ENV_KEY2: val2
      

      然后在你的部署容器中,使用

      spec:
        containers:
        - image: <image>
          name: <name>
          envFrom:
          - configMapRef:
              name: appconfig
      

      【讨论】:

        【解决方案3】:

        您可以通过配置映射来完成,如上所示,或者您可以将环境变量值作为字符串读取并解组。为此,您必须使用|——一个允许您嵌入更多“复杂”结构的 yaml 运算符。

        例如在您的 K8s deployment.yaml 中:

         ...
         env:
         - name: FOO
           value: |
           {"foo":"bar"}
        

        然后在你的代码中

        type v struct {
            Key string `json:"foo"`
        }
            
        func main() {
            foo := os.Getenv("FOO")
            var t v
            if err := json.Unmarshal([]bytes(foo), &t); err != nil {
                // log error
            }
            
            fmt.Println("Foo %s", t.Foo) // should print out "bar"
        }
        

        我不确定如果您尝试使用 yaml 执行此操作效果如何,但 json 对象绝对可以通过 k8s 中的环境变量 API 以这种方式传递。我会留给你来决定它的利弊。 :)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-09-24
          • 2015-12-30
          • 2015-11-19
          • 2022-01-03
          • 1970-01-01
          • 2022-10-25
          相关资源
          最近更新 更多