【发布时间】:2020-04-20 19:28:08
【问题描述】:
我正在 Kubernetes Deployment yaml 中寻找与 Docker Compose 的 SPRING_APPLICATION_JSON 环境变量等效的东西。
我知道我们可以将单个配置作为名称-值对传递。但是必须有一些东西可以通过它在Kubernetes中以json或yaml格式传递所有env变量。
【问题讨论】:
我正在 Kubernetes Deployment yaml 中寻找与 Docker Compose 的 SPRING_APPLICATION_JSON 环境变量等效的东西。
我知道我们可以将单个配置作为名称-值对传递。但是必须有一些东西可以通过它在Kubernetes中以json或yaml格式传递所有env变量。
【问题讨论】:
您可以使用以下命令:
kubectl create cm env --from-file=SPRING_APPLICATION_JSON=./<your-json>.json
【讨论】:
您可以使用 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
【讨论】:
您可以通过配置映射来完成,如上所示,或者您可以将环境变量值作为字符串读取并解组。为此,您必须使用|——一个允许您嵌入更多“复杂”结构的 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 以这种方式传递。我会留给你来决定它的利弊。 :)
【讨论】: