为容器定义环境变量

本页面展示了如何为 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)