创建配置对象是什么
配置对象用来存放非敏感的配置数据,本质是一组键值对,值可以是短字符串,也可以是整份配置文件的内容。创建方式有两条路:命令行从字面量、单个文件或整个目录生成,适合快速构造与临时验证;直接用 YAML 声明,适合纳入版本管理与评审。两条路的产物是同一个对象。
键名与容量的边界
键名有字符集限制,只允许字母数字与少数几个符号。整个对象还有容量上限,超过之后必须改用存储卷或者其他存储服务。此外要牢记它是明文存放的:任何有读取权限的对象都能看到内容,与其相关的边界是把凭据类数据放到专门的密钥对象里。
基本信息
| 适用环境 | 任何 Kubernetes 发行版 |
|---|---|
| 存放内容 | 非敏感的配置数据,键值或整份文件 |
| 创建方式 | 命令行从字面量、文件、目录生成,或 YAML 声明 |
| 键名限制 | 只允许字母数字与连字符、下划线、点号 |
| 容量上限 | 对象整体有大小限制,大文件需换存储方案 |
| 敏感数据 | 不应放在这里,改为使用密钥类对象 |
典型使用场景
- 应用参数:日志级别、超时时间、功能开关这类需要区分环境的配置
- 配置文件整体挂载:把一份配置文件的完整内容作为一个键存起来
- 批量导入:把目录下的多个配置文件一次性转成对象
- 从环境变量文件导入:把已有的键值文件直接转成对象
- 生成草稿:用演练模式导出 YAML 后纳入版本库
- 环境差异化:同一份模板配合不同的对象实现多环境配置
命令行创建
命令行创建
kubectl create cm app-config --from-literal=LOG_LEVEL=info --from-literal=MAX_CONN=100 # 字面量
kubectl create cm nginx-conf --from-file=nginx.conf # 单文件,键名为文件名
kubectl create cm env-file --from-env-file=app.env # 从键值文件导入
kubectl create cm web-files --from-file=./conf.d # 整个目录导入
kubectl create cm app-config --from-literal=LOG_LEVEL=debug --dry-run=client -o yaml > cm.yamlYAML 声明
YAML 声明
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
namespace: prod
data:
LOG_LEVEL: info
app.properties: |
retries=3
timeout=30s两种创建方式的取舍
| 方式 | 优点 | 代价 |
|---|---|---|
| 命令行生成 | 快,适合临时验证与生成草稿 | 内容不在版本库里,无法评审 |
| YAML 声明 | 可评审、可追溯、可复用 | 需要手工维护内容 |
| 从文件导入 | 复用已有配置文件 | 文件变更不会自动同步到对象 |
| 目录批量导入 | 一次生成多个键 | 键名冲突时会被覆盖 |
从文件或目录导入时键名默认取文件名,多个文件同名会造成键名冲突并相互覆盖,导入后应核对实际键列表。
配置对象更新后,以文件方式挂载的用法通常会自动更新,以环境变量或子路径方式注入的不会,需要重建实例才生效。