為容器定義環境變數
此頁面說明如何在 Kubernetes Pod 中為容器定義環境變數。
準備開始
您需要有一個 Kubernetes 叢集,並且必須將 kubectl 命令列工具設定為與您的叢集通訊。建議在至少有兩個非控制平面主機節點的叢集上執行本教學課程。如果您還沒有叢集,可以使用 minikube 建立一個,或者您可以使用以下 Kubernetes playground 之一
為容器定義環境變數
當您建立 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 引數。
環境變數名稱由字母、數字、底線、點或連字號組成,但第一個字元不能是數字。如果啟用 RelaxedEnvironmentVariableValidation
功能閘道,則所有 可列印的 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
會在容器上執行。
接下來
- 深入了解環境變數。
- 了解將密鑰用作環境變數。
- 請參閱 EnvVarSource。