为容器定义环境变量
此页面展示了如何在 Kubernetes Pod 中为容器定义环境变量。
开始之前
您需要拥有一个 Kubernetes 集群,并且 kubectl 命令行工具必须配置为与您的集群通信。建议在至少有两个节点的集群上运行本教程,这些节点不充当控制平面主机。如果您还没有集群,可以使用 minikube 创建一个,或者您可以使用以下 Kubernetes 游乐场之一
为容器定义环境变量
创建 Pod 时,可以为在 Pod 中运行的容器设置环境变量。要设置环境变量,请在配置文件中包含 env
或 envFrom
字段。
env
和 envFrom
字段具有不同的效果。
env
- 允许您为容器设置环境变量,直接为您命名的每个变量指定一个值。
envFrom
- 允许您通过引用 ConfigMap 或 Secret 为容器设置环境变量。当您使用
envFrom
时,引用 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
将在容器上运行。
下一步
- 详细了解 环境变量。
- 了解 如何将密钥用作环境变量。
- 查看 EnvVarSource。