You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kubernetes中设置/更新运行Pod及Deployment下所有Pod的环境变量

更新Deployment下所有Pod环境变量的两种方法

一、直接使用kubectl命令更新

你之前的命令格式有误,正确写法应该是:

kubectl set env deployment/<deployment-name> -n <namespace> foo=bar

注意是deployment/<deployment-name>,不是env/<deployment-name>。

执行命令后,Deployment的Pod模板会被更新,Kubernetes会自动滚动重启该Deployment下的所有Pod,用新模板创建实例。你需要等新Pod完全启动、旧Pod被替换后,再进入容器执行printenv | grep foo才能查到新变量——如果还在旧Pod里操作,自然看不到更新后的内容。

可以用kubectl get pods -n <namespace>查看Pod状态,等所有Pod都处于Running状态且重启次数更新后,再去验证。

二、用ConfigMap管理环境变量(更推荐,适合多变量或需复用场景)

1. 创建包含键值对的ConfigMap

直接用命令快速创建:

kubectl create configmap my-env-config -n <namespace> --from-literal=foo=bar --from-literal=baz=qux

或者用YAML文件定义(比如configmap.yaml):

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-env-config
  namespace: <namespace>
data:
  foo: "bar"
  baz: "qux"

执行kubectl apply -f configmap.yaml完成创建。

2. 修改Deployment,让Pod引用ConfigMap

有两种引用方式:

方式一:注入ConfigMap所有键值对作为环境变量

修改Deployment的Pod模板部分,在containers[].envFrom中添加ConfigMap引用:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: <deployment-name>
  namespace: <namespace>
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: your-image:tag
        envFrom:
        - configMapRef:
            name: my-env-config # 填写你创建的ConfigMap名称

方式二:只引用ConfigMap中的特定键

如果只需要部分变量,用env.valueFrom指定单个键:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: <deployment-name>
  namespace: <namespace>
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: your-image:tag
        env:
        - name: foo # 容器内的环境变量名
          valueFrom:
            configMapKeyRef:
              name: my-env-config # ConfigMap名称
              key: foo # ConfigMap里的对应键名

3. 应用更新并验证

执行kubectl apply -f deployment.yaml(或用kubectl edit deployment/<deployment-name> -n <namespace>直接在线编辑),等Pod滚动重启后,进入容器执行printenv | grep foo就能看到对应的变量。

后续如果需要更新环境变量,只需修改ConfigMap,再执行kubectl rollout restart deployment/<deployment-name> -n <namespace>触发滚动更新,新变量就会自动生效。

内容的提问来源于stack exchange,提问作者souparno majumder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 07:15:56