為容器定義環境變數
本頁面展示瞭如何為 Kubernetes Pod 中的容器定義環境變數。
準備工作
你需要擁有一個 Kubernetes 叢集,並且 kubectl 命令列工具已配置為與你的叢集通訊。 建議在至少有兩個不充當控制平面主機的節點的叢集上執行本教程。 如果你還沒有叢集,你可以使用 minikube 建立一個,或者使用這些 Kubernetes 遊樂場之一:
為容器定義環境變數
當你建立一個 Pod 時,你可以為執行在該 Pod 中的容器設定環境變數。要設定環境變數,請在配置檔案中包含 `env` 或 `envFrom` 欄位。
`env` 和 `envFrom` 欄位具有不同的效果。
env
- 允許你為容器設定環境變數,直接為每個你命名的變數指定一個值。
envFrom
- 允許你透過引用 ConfigMap 或 Secret 為容器設定環境變數。當你使用 `envFrom` 時,所引用的 ConfigMap 或 Secret 中的所有鍵值對都將設定為容器的環境變數。你還可以指定一個公共字首字串。
你可以閱讀更多關於 ConfigMap 和 Secret 的資訊。
本頁面解釋瞭如何使用 `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"
根據該清單建立一個 Pod
kubectl apply -f https://k8s.io/examples/pods/inject/envars.yaml
列出正在執行的 Pod
kubectl get pods -l purpose=demonstrate-envars
輸出類似於:
NAME READY STATUS RESTARTS AGE envar-demo 1/1 Running 0 9s
列出 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
注意
使用 `env` 或 `envFrom` 欄位設定的環境變數會覆蓋容器映象中指定的任何環境變數。注意
環境變數可以相互引用,但順序很重要。使用在同一上下文中定義的其他變數的變數必須在列表中靠後。同樣,避免迴圈引用。在你的配置中使用環境變數
你在 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` 將在容器上執行。
下一步
- 瞭解更多關於環境變數的資訊。
- 瞭解將 Secret 用作環境變數。
- 參見EnvVarSource。