为容器定义环境变量

本页介绍如何为 Kubernetes Pod 中的容器定义环境变量。

准备工作

你需要拥有一个 Kubernetes 集群,并且必须配置 kubectl 命令行工具以便与集群通信。建议在至少有两个不充当控制平面主机节点的集群上运行本教程。如果你还没有集群,可以使用 minikube 创建一个,或者你可以使用以下 Kubernetes 演练场之一:

为容器定义环境变量

创建 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 日太平洋标准时间上午 5:32:允许在环境变量中使用几乎所有可打印 ASCII 字符 (0c1b3e3d03)