当前位置: 首页 > news >正文

K8s——配置管理(1)

目录

基本概念

‌核心特性‌

‌核心原理‌

‌核心使用方式‌

1. ‌环境变量注入‌

2. ‌挂载为文件‌

3. ‌引用单个文件

4. ‌作为命令行参数‌

‌ConfigMap 的意义‌

‌最佳实践与注意事项‌

‌示例场景‌

总结


基本概念

    ConfigMap 是 Kubernetes 中用于存储‌非敏感配置数据‌(如环境变量、配置文件、命令行参数等)的 API 对象。它将配置与容器镜像解耦,实现应用的灵活配置管理。


核心特性
  1. 键值对存储

    • 数据以 key: value 形式存储(支持纯文本、JSON、XML等)。
    • 示例:log_level: debug 或整个配置文件内容。
  2. 多数据来源
    支持从多种方式创建:

    • 文件‌:kubectl create configmap <name> --from-file=<file-path>
    • 目录‌:自动合并目录内所有文件。
    • 字面值‌:kubectl create configmap <name> --from-literal=key=value
  3. 命名空间隔离
    ConfigMap 属于特定命名空间(Namespace),仅同命名空间的 Pod 可引用。

  4. 动态更新支持

    • 挂载为文件时‌:更新 ConfigMap 后,Kubernetes 自动同步到已挂载的 Pod(需应用支持重载)。
    • 环境变量注入时‌:‌不支持‌动态更新,需重启 Pod。
  5. 大小限制
    单个 ConfigMap 最大 ‌1 MiB‌(受 etcd 限制)。


核心原理
  1. 存储机制

    • ConfigMap 数据存储在 Kubernetes 的 ‌etcd‌ 数据库中。
    • 通过 API Server 提供创建/读取/更新接口。
  2. 数据注入到 Pod

    • 环境变量‌:直接注入到容器环境。
    • 文件挂载‌:将 ConfigMap 内容挂载为容器内的文件或目录。
    • 命令行参数‌:通过 $(KEY) 语法引用。
  3. 更新传播

    • 文件挂载‌:kubelet 定期检查更新(默认同步周期约 1 分钟),将新内容写入容器文件系统。
    • 环境变量‌:仅 Pod 启动时注入,运行时不可变。

核心使用方式
1. ‌环境变量注入
env:- name: LOG_LEVELvalueFrom:configMapKeyRef:name: app-config # ConfigMap 名称key: log_level # 键名 
2. ‌挂载为文件
volumes:- name: config-volumeconfigMap:name: app-config # 整个 ConfigMap 挂载为目录 volumeMounts:- name: config-volumemountPath: /etc/config # 容器内挂载路径 
3. ‌引用单个文件
volumes:- name: config-volumeconfigMap:name: app-configitems:- key: "nginx.conf" # ConfigMap 中的键path: "nginx.conf" # 容器内文件名 volumeMounts:- name: config-volumemountPath: /etc/nginx/conf.d 
4. ‌作为命令行参数
args:- "--db-host=$(DB_HOST)" 
env:- name: DB_HOSTvalueFrom:configMapKeyRef:name: app-configkey: db_host 

ConfigMap 的意义
  1. 解耦配置与代码

    • 无需重构镜像即可修改配置(如切换开发/生产环境)。
    • 提升镜像复用性和安全性(避免硬编码敏感路径)。
  2. 统一配置管理

    • 集中管理多环境配置(通过不同 ConfigMap 区分)。
    • 与 CI/CD 流水线集成,实现配置版本化。
  3. 动态配置更新

    • 文件挂载方式支持‌不重启容器‌更新配置(适合 Nginx、微服务等场景)。
  4. 降低运维复杂度

    • 替代传统方案(如手动修改容器内文件或重建镜像)。

最佳实践与注意事项
  1. 敏感数据用 Secret
    ConfigMap ‌明文存储数据‌,敏感信息(密码、密钥)应使用 Secret。

  2. 设置默认值与可选引用

    envFrom:- configMapRef:name: app-configoptional: true # 即使 ConfigMap 不存在,Pod 也能启动 
  3. 文件更新策略

    • 应用需监听文件变化(如 inotify)或定期重载配置。
    • 避免符号链接:挂载 ConfigMap 会覆盖整个目录。
  4. 资源命名规范
    使用明确名称(如 redis-config),避免通用名引起冲突。


示例场景

场景‌:为 Nginx 配置动态更新

  1. 创建 ConfigMap:
    kubectl create configmap nginx-conf --from-file=default.conf 
  2. Pod 挂载配置:
    volumeMounts:- name: nginx-configmountPath: /etc/nginx/conf.d 
    volumes:- name: nginx-configconfigMap:name: nginx-conf 
  3. 修改配置后更新 ConfigMap:
    kubectl create configmap nginx-conf --from-file=default.conf --dry-run=client -o yaml | kubectl replace -f - 
    Nginx 会自动加载新配置(需配置 nginx -s reload)。

总结

ConfigMap 是 Kubernetes 配置管理的基石‌,通过分离配置与镜像:

  •  提升应用可移植性和可维护性。
  •  支持动态更新(文件挂载)。
  •  规避明文存储敏感数据。
  • ️ 注意环境变量需重启生效。
http://www.dtcms.com/a/269810.html

相关文章:

  • 构建高效分布式系统:bRPC组合Channels与HTTP/H2访问指南
  • 从单体到微服务:Spring Cloud 开篇与微服务设计
  • 微前端框架对比
  • 无缝矩阵支持音频分离带画面分割功能的全面解析
  • ​AI赋能的自动驾驶革命:从安全架构到世界模型的系统性突破
  • 【操作系统】磁盘调度
  • hmall学习
  • 2025年模型与机器学习国际会议 (ICMML 2025)
  • BM9 删除链表的倒数第n个节点
  • 计算机网络4层架构怎么理解,分别把协议和对应的层用一些生活的例子形象说明一下
  • MyBatis完全学习指南
  • 算法题练习3-判定链表是否是回文串
  • 【踩坑随笔】PlatformIO导入Arduino项目出现的问题
  • STM32第十八天 ESP8266-01S和电脑实现串口通信
  • HTTP/3.x协议详解:基于QUIC的下一代Web传输协议
  • 小红书APP品牌升级,启用新品牌口号“你的生活兴趣社区”
  • 2025年社会学与安全科学国际会议 (ICSSS 2025)
  • 【AI News | 20250707】每日AI进展
  • C++ dijkstra 最短路径算法
  • c语言学习_函数递归
  • 数学建模:非线性规划:凸规划问题
  • 【AI智能体】智能音视频-基于乐鑫 ESP32 实现音视频通话
  • ICML 2025 | TimeBridge : 巧妙化解非平稳性难题,精准预测长短结合!
  • Redis:高性能内存数据库与缓存利器
  • 验证KANO问题时合适的行为指标(如点击率、转化率等)来匹配问卷目标的一些尝试
  • 【论文翻译】用于大感受野的小波卷积 Wavelet Convolutions for Large Receptive Fields
  • 一天一道Sql题(day01)
  • Java武林:虚拟机之道 第二章:心法传承 - 类加载机制
  • three案例 Three.js波纹效果演示
  • “Jmeter中 xxx.jtl:1:1: Fatal Error! 前言中不允许有内容”的解决办法