繁体   English   中英

如何使用 Helm 覆盖 Go 环境变量

[英]How to override Go environment variables with Helm

如何使用 Helm 覆盖 Go 的 .env 文件中的环境变量?

使用 C# 我执行以下操作:

appsettings.json

{
    "Animals":{
        "Pig": "Squeek"
    },
}

values.yaml

animals:
  pig: "Oink"

configmap.yaml中:

apiVersion: v1
kind: ConfigMap
metadata:
  name: animal-configmap
pig: {{ .Values.animals.pig }}

最后在deployment.yaml中。yaml :

spec:
  ...
  template:
    ...
    spec:
      ...
      containers:
          ...
          env:
            - name: Animals__Pig
              valueFrom:
                configMapKeyRef:
                  name: animal-configmap  
                  key: pig

不是双__ go 如何更新 Go 的环境值?

这是 Go .env文件示例:

PIG=SQUEEK

如果您的 Go 代码正在检索普通环境变量

pig := os.Getenv("PIG")

那么 Kubernetes 清单应该使用该名称作为环境变量name:

env:
  - name: PIG
    valueFrom: {...}

双下划线在 Unix 环境变量或 Kubernetes 清单中没有任何特殊含义,在您的初始示例中,它看起来就像 C# 框架将组件映射到应用程序变量时的方式。 如果您直接使用环境变量,则不需要做任何特别的事情。

您可以使用"github.com/joho/godotenv" github.com/joho/godotenv”package 来读取.env文件。 由于您不想将现有环境变量与.env文件中的环境变量混合,您可以创建一个 map 并将变量设置为它。

如果您有这样的.env文件:

HELLO=word

你可以这样读:

package main

import (
    "fmt"
    "log"

    "github.com/joho/godotenv"
)

func main() {
    var envs map[string]string
    envs, err := godotenv.Read(".env")

    if err != nil {
        panic("Error loading .env file")
    }

    name := envs["HELLO"]

    fmt.Println(name)
}

如果你设置了一个 var env,你仍然可以访问文件中定义的值:

$ HELLO=ping go run main.go

world

然后您从envs var 访问文件 vars。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM