為容器定義環境變數

此頁面說明如何在 Kubernetes Pod 中為容器定義環境變數。

準備開始

您需要有一個 Kubernetes 叢集,並且必須將 kubectl 命令列工具設定為與您的叢集通訊。建議在至少有兩個非控制平面主機節點的叢集上執行本教學課程。如果您還沒有叢集,可以使用 minikube 建立一個,或者您可以使用以下 Kubernetes playground 之一

為容器定義環境變數

當您建立 Pod 時,可以為在 Pod 中執行的容器設定環境變數。若要設定環境變數,請在組態檔中包含 envenvFrom 欄位。

envenvFrom 欄位具有不同的效果。

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 容器設定的命令和引數中。在以下範例組態中,GREETINGHONORIFICNAME 環境變數分別設定為 Warm greetings toThe Most HonorableKubernetes。環境變數 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 會在容器上執行。

接下來

上次修改時間 2024 年 3 月 1 日 太平洋標準時間 (PST) 早上 5:32: Allow almost all printable ASCII characters in environment variables (0c1b3e3d03)