Kubernetes中如何管理配置_ConfigMap使用说明
技术百科
P粉602998670
发布时间:2026-01-27
浏览: 次 ConfigMap 创建后 Pod 里没生效是因为它不会自动注入,必须在 Pod 的 envFrom、env 或 volumes 中显式引用;更新后也不会自动刷新,挂载为 volume 的文件内容约1分钟内同步但进程不重读,env 注入的值则完全静态,需滚动更新 Pod 或应用热加载。
ConfigMap 创建后为什么 Pod 里没生效?
ConfigMap 本身只是存储配置的键值对,不会自动注入到 Pod。必须在 Pod 的 spec.containers.envFrom、env 或 volumes 中显式引用,否则 Pod 启动时根本读不到。
常见错误是只创建了 ConfigMap,却忘了在 Pod 模板里加 envFrom 或挂载 volumeMounts。检查方法:进容器执行 env | grep KEY_NAME 或 ls /etc/config/ 看文件是否存在。
- 用
envFrom注入全部键值对:envFrom:
- configMapRef:
name: my-config - 用
env单独映射某个键:env:
- name: DB_HOST
valueFrom:
configMapKeyRef:
name: my-config
key: db.host - 用
volumeMount挂载为文件(适合多行配置或非环境变量场景):volumes:
- name: config-volume
configMap:
name: my-config
volumeMounts:
- name: config-volume
mountPath: /etc/config
从文件或目录创建 ConfigMap 时路径和 key 名怎么对应?
用 kubectl create config 从文件创建时,key 默认是文件名;从目录创建时,key 是目录下每个文件的文件名(不含路径)。注意:文件名不能含 
. 开头(如 .env),否则会被忽略。
如果想自定义 key 名,用 --from-file=key1=path/to/file1 显式指定。比如 --from-file=app.conf=./conf/app.conf 会让 key 变成 app.conf,而不是原始文件名 app.conf —— 看似一样,但能绕过自动推导逻辑,避免意外。
- 从单个文件创建:
kubectl create configmap my-cm --from-file=config.json→ key 是config.json - 从目录创建:
kubectl create configmap my-cm --from-file=./configs/→ key 是db.yaml、log.ini等 - 重命名 key:
--from-file=database.yml=./prod/db.yaml→ key 是database.yml
ConfigMap 更新后 Pod 里的配置会不会自动刷新?
不会。ConfigMap 被挂载为 volume 时,文件内容会定期同步(默认 1 分钟内),但已有进程不会重新读取;通过 env 注入的值则完全静态,Pod 启动那一刻就固定了,后续 ConfigMap 怎么改都无效。
所以别指望“改完 ConfigMap 就立刻生效”。真正可靠的方案只有两个:滚动更新 Pod(触发重建),或应用自己实现配置热加载(比如监听 /etc/config 文件变化)。
- 挂载为 volume 的文件:可被应用轮询或 inotify 监听,但需代码支持
- 环境变量方式:必须重启容器才生效,CI/CD 流程中要触发
rollout restart deployment - 使用
kubectl patch或apply更新 ConfigMap 后,记得检查 Pod 的restartCount是否增加,确认是否真的重建了
ConfigMap 和 Secret 混用时要注意什么?
ConfigMap 和 Secret 结构几乎一样,但 Secret 会 Base64 编码且有更严格的权限控制。千万别把密码写进 ConfigMap——哪怕只是临时测试。Kubernetes 不会对 ConfigMap 做任何加密或访问限制,etcd 里明文可查。
另外,Secret 默认挂载权限是 0644,而 ConfigMap 是 0644(可被所有容器内用户读),如果你挂载到容器里又没做权限隔离,敏感信息等于裸奔。
- 密码、token、私钥等一律走
Secret,哪怕开发环境也别偷懒 - ConfigMap 适合放
log.level=debug、feature.flag=true这类无害配置 - 用
kubectl get cm my-cm -o yaml能直接看到明文内容,而secret需要加--decode才能看,这就是设计意图的差别
ConfigMap 看似简单,但关键点全在“怎么连上”和“怎么更新”这两个动作上;多数线上问题不是创建失败,而是引用漏了、挂载错了、或者误当 Secret 用了。
# ai
# 加载
# 如果你
# 用了
# 里加
# 已有
# 这就是
# 会不会
# 这两个
# app
# js
# json
# golang
# 环境变量
# 编码
# 为什么
# igs
# 键值对
# Token
# 错了
# 键值
# 开发环境
# database
# kubernetes
# etcd
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Win11怎么关闭透明效果_Windows11个性
- Ajax提交表单PHP怎么接收_处理Ajax发送的
- Go语言中正确反序列化多个同级XML元素为结构体切
- c++如何实现一个高性能的环形队列(Ring Bu
- Windows服务持续崩溃怎样修复_系统服务保护机
- Win11如何设置文件权限 Win11 NTFS文
- 如何使用Golang实现容器自动化运维_Golan
- windows 10应用商店区域怎么改_windo
- Win11如何设置省电模式 Win11开启电池节电
- Win11怎么设置屏保_Windows 11屏幕保
- c++如何连接Redis c++ hiredis库
- VSC怎么创建PHP项目_从零开始搭建项目的步骤【
- Win10如何更改网络连接_Windows10以太
- C++ STL算法库怎么用?C++常用算法函数(s
- Python音视频处理高级项目教程_FFmpegP
- 如何在Golang中使用log包输出不同级别日志_
- Win11怎么设置默认邮件应用_Windows11
- 如何在Golang中处理模块冲突_解决依赖版本不兼
- c++如何打印函数堆栈信息_c++ backtra
- VSC里PHP变量未定义报错怎么解决_错误抑制技巧
- Python文本编码与解码_跨平台解析说明【指导】
- Win11怎么设置多显示器任务栏 Win11扩展任
- Windows10系统服务优化指南_Win10禁用
- Python函数参数高级用法_默认值与可变参数解析
- Win10怎样清理C盘Steam游戏缓存_Win1
- ACF 教程:如何正确更新嵌套在多层 Group
- Mac怎么开启“任何来源”_Mac安装未签名应用的
- XSLT怎么生成动态的HTML属性名和标签名
- Python邮件系统自动化教程_批量发送解析与模板
- c++ reinterpret_cast怎么用 c
- php怎么操作Redis_Redis扩展连接与基本
- Python装饰器复用技巧_通用能力解析【教程】
- c++中如何对数组进行排序_c++数组排序算法汇总
- Windows10系统怎么查看设备管理器_Win1
- Win11怎么更改盘符_Win11磁盘管理修改驱动
- php内存溢出怎么排查_php内存限制调试与优化方
- windows系统如何安装cab更新补丁_wind
- Win11怎样安装企业微信_Win11安装企业微信
- 短链接怎么用php还原_从基础原理到代码实现教学【
- Win11怎么设置组合键快捷方式_Windows1
- Win11怎么开启剪贴板历史记录_Windows1
- 如何在 Pandas 中按元素交集合并两列字符串
- php下载安装后swoole扩展怎么安装_异步框架
- Python爬虫项目实战教程_Scrapy抓取与存
- Win11摄像头无法使用怎么办_Win11相机隐私
- Win11声音太小怎么办_Windows 11开启
- Win11怎么设置DNS服务器_Windows11
- Win11怎么连接蓝牙耳机_Win11蓝牙设备配对
- C#如何在一个XML文件中查找并替换文本内容
- Win10如何卸载预装Edge扩展_Win10卸载

QQ客服