为容器定义环境变量

此页面展示了如何在 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 PST:允许环境变量中使用几乎所有可打印的 ASCII 字符 (0c1b3e3d03)