簡體   English   中英

在 Kubernetes 部署 yaml 的環境變量中傳遞 json 字符串

[英]passing json string in environment variable in Kubernetes deployment yaml

我正在尋找與 Docker 的 SPRING_APPLICATION_JSON 環境變量等效的東西,在 Kubernetes 部署 yaml 中編寫。

我知道我們可以將單個配置作為名稱-值對傳遞。 但是必須有一些東西可以通過 json 或 Kubernetes 格式的 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 部署中。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 以這種方式傳遞。 我會留給你來決定它的利弊。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM