在 Kubernetes 部署 yaml 中的环境变量中传递 json 字符串

Inf*_*hie 3 spring-boot kubernetes

我正在寻找相当于 Kubernetes 部署 yaml 中 Docker Compose 的 SPRING_APPLICATION_JSON 环境变量的内容。

我知道我们可以将单独的配置作为名称-值对传递。但在 Kubernetes 中必须有某种东西可以让所有 env 变量以 json 或 yaml 格式传递。

小智 5

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

例如在您的 K8s 部署.yaml 中:

 ...
 env:
 - name: FOO
   value: |
   {"foo":"bar"}
Run Code Online (Sandbox Code Playgroud)

然后在你的代码中

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"
}
Run Code Online (Sandbox Code Playgroud)

我不确定如果你尝试使用 yaml 来做到这一点,效果如何,但是 json 对象绝对可以通过 k8s 中的环境变量 API 以这种方式传递。我会让你决定它的利弊。:)