使用 Init 容器定義環境變數值

功能狀態: Kubernetes v1.34 [alpha] (預設停用)

本頁面展示瞭如何透過檔案為 Pod 中的容器配置環境變數。

準備工作

你需要擁有一個 Kubernetes 叢集,並且 kubectl 命令列工具已配置為與你的叢集通訊。建議在本教程中,在至少兩個不充當控制平面主機的節點組成的叢集上執行。如果你還沒有叢集,可以使用 minikube 建立一個,或者使用這些 Kubernetes 遊樂場之一

你的 Kubernetes 伺服器版本必須是 v1.34。

要檢查版本,請輸入 kubectl version

設計工作原理

在本練習中,你將建立一個 Pod,它從檔案中獲取環境變數,並將這些值投影到正在執行的容器中。

apiVersion: v1
kind: Pod
metadata:
  name: envfile-test-pod
spec:
  initContainers:
    - name: setup-envfile
      image:  nginx
      command: ['sh', '-c', 'echo "DB_ADDRESS=address\nREST_ENDPOINT=endpoint" > /data/config.env']
      volumeMounts:
        - name: config
          mountPath: /data
  containers:
    - name: use-envfile
      image: nginx
      command: [ "/bin/sh", "-c", "env" ]
      env:
        - name: DB_ADDRESS
          valueFrom:
            fileKeyRef:
              path: config.env
              volumeName: config
              key: DB_ADDRESS
              optional: false
  restartPolicy: Never
  volumes:
    - name: config
      emptyDir: {}

在此清單中,你可以看到 `initContainer` 掛載了一個 `emptyDir` 卷,並將環境變數寫入其中的檔案,而常規容器透過 `fileKeyRef` 欄位引用檔案和環境變數鍵,而無需掛載卷。當 `optional` 欄位設定為 false 時,`fileKeyRef` 中指定的 `key` 必須存在於環境變數檔案中。

該卷將僅掛載到寫入檔案的容器 (`initContainer`),而消耗環境變數的使用者容器將不會掛載該卷。

環境檔案格式遵循 Kubernetes 環境檔案標準

在容器初始化期間,kubelet 從 `emptyDir` 卷中指定的檔案中檢索環境變數,並將其暴露給容器。

建立 Pod

kubectl apply -f https://k8s.io/examples/pods/inject/envars-file-container.yaml

驗證 Pod 中的容器是否正在執行

# If the new Pod isn't yet healthy, rerun this command a few times.
kubectl get pods

檢查容器日誌中的環境變數

kubectl logs dapi-test-pod -c use-envfile | grep DB_ADDRESS

輸出顯示了選定環境變數的值

DB_ADDRESS=address

環境變數檔案語法

Kubernetes 環境變數檔案的格式源自 `.env` 檔案。

在 shell 環境中,`.env` 檔案通常使用 `source .env` 命令載入。

對於 Kubernetes,定義的環境變數檔案格式遵循更嚴格的語法規則

  • 空行:空行將被忽略。

  • 前導空格:所有行上的前導空格都將被忽略。

  • 變數宣告:變數必須宣告為 `VAR=VAL`。 `=` 周圍的空格和尾隨空格將被忽略。

    VAR=VAL → VAL
    
  • 註釋:以 # 開頭的行被視為註釋並被忽略。

    # comment
    VAR=VAL → VAL
    
    VAR=VAL # not a comment → VAL # not a comment
    
  • 行繼續:變數宣告行末尾的反斜槓 (\) 表示值在下一行繼續。這些行將用一個空格連線。

    VAR=VAL \
    VAL2
    → VAL VAL2
    

下一步

上次修改時間:2025 年 8 月 6 日太平洋標準時間晚上 11:39: 最佳化 envfile 文件 最佳化 envfile 文件 (82cf07f997)