为容器定义环境变量
本页介绍如何为 Kubernetes Pod 中的容器定义环境变量。
准备工作
你需要拥有一个 Kubernetes 集群,并且必须配置 kubectl 命令行工具以便与集群通信。建议在至少有两个不充当控制平面主机节点的集群上运行本教程。如果你还没有集群,可以使用 minikube 创建一个,或者你可以使用以下 Kubernetes 演练场之一:
为容器定义环境变量
创建 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
将在容器上运行。
接下来
- 了解更多关于环境变量的信息。
- 了解如何使用 Secret 作为环境变量。
- 参阅EnvVarSource。