設置環境變量
更新時間 2024-01-05 16:04:21
最近更新時間: 2024-01-05 16:04:21
分享文章
本文主要介紹 設置環境變量。
操作場景
環境變量是指容器運行環境中設定的一個變量,環境變量可以在工作負載部署后修改,為工作負載提供極大的靈活性。
CCE中設置的環境變量與Dockerfile中的“ENV”效果相同。
注意
容器啟動后,容器中的內容不應修改。如果修改配置項(例如將容器應用的密碼、證書、環境變量配置到容器中),當容器重啟(例如節點異常重新調度Pod)后,會導致配置丟失,業務異常。
配置信息應通過入參等方式導入容器中,以免重啟后配置丟失。
環境變量支持如下幾種方式設置。
- 自定義
- 配置項導入 :將配置項中所有鍵值都導入為環境變量。
- 配置項鍵值導入 :將配置項中某個鍵的值導入作為某個環境變量的值。例如將configmap-example這個配置項中configmap_key的值configmap_value導入為環境變量key1的值,導入后容器中有一個名為key1的環境變量,其值為configmap_value。
- 密鑰導入 :將密鑰中所有鍵值都導入為環境變量。
- 密鑰鍵值導入 :將密鑰中某個鍵的值導入作為某個環境變量的值。例如將secret-example這個配置項中secret_key的值secret_value導入為環境變量key2的值,導入后容器中有一個名為key2的環境變量,其值為secret_value。
- 變量/變量引用 :用Pod定義的字段作為環境變量的值,例如Pod的名稱。
- 資源引用 :用Container定義的字段作為環境變量的值,例如容器的CPU限制。
添加環境變量
步驟 1 登錄CCE控制臺,在創建工作負載時,配置容器信息,選擇“環境變量”。
步驟 2 設置環境變量。

YAML樣例
apiVersion: apps/v1
kind: Deployment
metadata:
name: env-example
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: env-example
template:
metadata:
labels:
app: env-example
spec:
containers:
- name: container-1
image: nginx:alpine
imagePullPolicy: Always
resources:
requests:
cpu: 250m
memory: 512Mi
limits:
cpu: 250m
memory: 512Mi
env:
- name: key # 自定義
value: value
- name: key1 # 配置項鍵值導入
valueFrom:
configMapKeyRef:
name: configmap-example
key: key1
- name: key2 # 密鑰鍵值導入
valueFrom:
secretKeyRef:
name: secret-example
key: key2
- name: key3 # 變量引用,用Pod定義的字段作為環境變量的值
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
- name: key4 # 資源引用,用Container定義的字段作為環境變量的值
valueFrom:
resourceFieldRef:
containerName: container1
resource: limits.cpu
divisor: 1
envFrom:
- configMapRef: # 配置項導入
name: configmap-example
- secretRef: # 密鑰導入
name: secret-example
imagePullSecrets:
- name: default-secret
環境變量查看
如果configmap-example和secret-example的內容如下。
$ kubectl get configmap configmap-example -oyaml
apiVersion: v1
data:
configmap_key: configmap_value
kind: ConfigMap
...
$ kubectl get secret secret-example -oyaml
apiVersion: v1
data:
secret_key: c2VjcmV0X3ZhbHVl # c2VjcmV0X3ZhbHVl為secret_value的base64編碼
kind: Secret
...
則進入Pod中查看的環境變量結果如下。
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
env-example-695b759569-lx9jp 1/1 Running 0 17m
$ kubectl exec env-example-695b759569-lx9jp -- printenv
/ # env
key=value # 自定義環境變量
key1=configmap_value # 配置項鍵值導入
key2=secret_value # 密鑰鍵值導入
key3=env-example-695b759569-lx9jp # Pod的metadata.name
key4=1 # container1這個容器的limits.cpu,單位為Core,向上取整
configmap_key=configmap_value # 配置項導入,原配置項中的鍵值直接會導入結果
secret_key=secret_value # 密鑰導入,原密鑰中的鍵值直接會導入結果