簡體   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