為容器定義環境變數

本頁面展示瞭如何為 Kubernetes Pod 中的容器定義環境變數。

準備工作

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

為容器定義環境變數

當你建立一個 Pod 時,你可以為執行在該 Pod 中的容器設定環境變數。要設定環境變數,請在配置檔案中包含 `env` 或 `envFrom` 欄位。

`env` 和 `envFrom` 欄位具有不同的效果。

env
允許你為容器設定環境變數,直接為每個你命名的變數指定一個值。
envFrom
允許你透過引用 ConfigMap 或 Secret 為容器設定環境變數。當你使用 `envFrom` 時,所引用的 ConfigMap 或 Secret 中的所有鍵值對都將設定為容器的環境變數。你還可以指定一個公共字首字串。

你可以閱讀更多關於 ConfigMapSecret 的資訊。

本頁面解釋瞭如何使用 `env`。

在本練習中,你將建立一個執行一個容器的 Pod。該 Pod 的配置檔案定義了一個名為 `DEMO_GREETING` 且值為 `"Hello from the environment"` 的環境變數。下面是該 Pod 的配置清單:

apiVersion: v1
kind: Pod
metadata:
  name: envar-demo
  labels:
    purpose: demonstrate-envars
spec:
  containers:
  - name: envar-demo-container
    image: gcr.io/google-samples/hello-app:2.0
    env:
    - name: DEMO_GREETING
      value: "Hello from the environment"
    - name: DEMO_FAREWELL
      value: "Such a sweet sorrow"
  1. 根據該清單建立一個 Pod

    kubectl apply -f https://k8s.io/examples/pods/inject/envars.yaml
    
  2. 列出正在執行的 Pod

    kubectl get pods -l purpose=demonstrate-envars
    

    輸出類似於:

    NAME            READY     STATUS    RESTARTS   AGE
    envar-demo      1/1       Running   0          9s
    
  3. 列出 Pod 容器的環境變數

    kubectl exec envar-demo -- printenv
    

    輸出類似於:

    NODE_VERSION=4.4.2
    EXAMPLE_SERVICE_PORT_8080_TCP_ADDR=10.3.245.237
    HOSTNAME=envar-demo
    ...
    DEMO_GREETING=Hello from the environment
    DEMO_FAREWELL=Such a sweet sorrow
    

在你的配置中使用環境變數

你在 Pod 配置中 `.spec.containers[*].env[*]` 下定義的環境變數可以在配置的其他地方使用,例如在為 Pod 容器設定的命令和引數中。在下面的示例配置中,`GREETING`、`HONORIFIC` 和 `NAME` 環境變數分別設定為 `Warm greetings to`、`The Most Honorable` 和 `Kubernetes`。環境變數 `MESSAGE` 組合了所有這些環境變數的集合,然後將其用作傳遞給 `env-print-demo` 容器的 CLI 引數。

環境變數名稱可以由除了“=”之外的任何可列印 ASCII 字元組成。

apiVersion: v1
kind: Pod
metadata:
  name: print-greeting
spec:
  containers:
  - name: env-print-demo
    image: bash
    env:
    - name: GREETING
      value: "Warm greetings to"
    - name: HONORIFIC
      value: "The Most Honorable"
    - name: NAME
      value: "Kubernetes"
    - name: MESSAGE
      value: "$(GREETING) $(HONORIFIC) $(NAME)"
    command: ["echo"]
    args: ["$(MESSAGE)"]

建立後,命令 `echo Warm greetings to The Most Honorable Kubernetes` 將在容器上執行。

下一步

上次修改於 2025 年 6 月 28 日晚上 11:52 PST:將 RelaxedEnvironmentVariableValidation 特性門晉升為 GA (68225ef489)