Please enable Javascript to view the contents

在 Kubernetes Pod 中注入环境变量及优先级

 ·  ☕ 1 分钟

1. Kubernetes Pod 引用环境变量的几种方式

1.1 直接 Key/Value

可以直接设置 Value 值,也可以将当前 Pod 的信息作为 Value 值。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
apiVersion: v1
kind: Pod
metadata:
  name: envar-demo
  labels:
    purpose: demonstrate-envars
spec:
  containers:
  - name: envar-demo-container
    image: gcr.io/google-samples/node-hello:1.0
    env:
    - name: DEMO_GREETING
      value: "Hello from the environment"
    - name: DEMO_FAREWELL
      value: "Such a sweet sorrow"
    - name: MY_NODE_NAME
      valueFrom:
        fieldRef:
          fieldPath: spec.nodeName
    - name: MY_POD_NAME
      valueFrom:
        fieldRef:
          fieldPath: metadata.name

1.2 从 Secret 引用

有两种方式引用 Secret 中的变量:

  • 通过 envFrom 引用 Secret 中全部变量
  • 通过 valueFrom 引用 Secret 中指定变量
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
apiVersion: v1
kind: Pod
metadata:
  name: secret-env-pod
spec:
  containers:
  - name: mycontainer
    image: redis
    envFrom:
      - secretRef:
          name: secret-config
    env:
      - name: SECRET_USERNAME
        valueFrom:
          secretKeyRef:
            name: secret-config
            key: username
      - name: SECRET_PASSWORD
        valueFrom:
          secretKeyRef:
            name: secret-config
            key: password

1.3 从 ConfigMap 引用

有两种方式引用 ConfigMap 中的变量:

  • 通过 envFrom 引用 ConfigMap 中全部变量
  • 通过 valueFrom 引用 ConfigMap 中指定变量
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
    - name: test-container
      image: k8s.gcr.io/busybox
      envFrom:
        - configMapRef:
            name: configmap-config
      env:
        - name: SPECIAL_LEVEL_KEY
          valueFrom:
            configMapKeyRef:
              name: special-config
              key: special.how
        - name: LOG_LEVEL
          valueFrom:
            configMapKeyRef:
              name: env-config
              key: log_level

2. 变量引用的优先级

初始化一个 Map 存放环境变量:

  1. 按顺序遍历 envFrom 引用的 ConfigMap 和 Secret 的 Key/Value
  2. 按顺序遍历 env 中的设置的 Key/Value
  3. 由于 Pod 默认开启了 EnableServiceLinks,最后还需要将 Service 相关变量注入

优先级是,Service 变量 > Env > EnvFrom。

3. 参考


微信公众号
作者
微信公众号