ConfigMap 简介
学习目标
- 理解 ConfigMap 的作用和使用场景
- 掌握 ConfigMap 与 Pod 的关系
- 了解配置管理的最佳实践
核心概念
一句话解释
ConfigMap 是 Kubernetes 中用于存储非敏感配置数据的 API 对象,以键值对形式存储。
为什么需要 ConfigMap
没有 ConfigMap 的问题:
┌─────────────────────────────────────┐
│ Pod │
│ ┌─────────────────────────────┐ │
│ │ 应用代码 │ │
│ │ - 数据库地址: db.prod.com │ │
│ │ - 端口: 3306 │ │
│ │ - 日志级别: info │ │
│ └─────────────────────────────┘ │
└─────────────────────────────────────┘
问题:
1. 配置硬编码在镜像中
2. 环境切换困难
3. 配置变更需要重新构建镜像
使用 ConfigMap:
┌─────────────────────────────────────┐
│ Pod │
│ ┌─────────────────────────────┐ │
│ │ 应用代码 │ │
│ │ 读取配置文件/环境变量 │ │
│ └─────────────────────────────┘ │
└─────────────────────────────────────┘
↓ 读取配置
┌─────────────────────────────────────┐
│ ConfigMap │
│ - 数据库地址: db.prod.com │
│ - 端口: 3306 │
│ - 日志级别: info │
└─────────────────────────────────────┘
ConfigMap vs Secret
| 特性 | ConfigMap | Secret |
|---|---|---|
| 数据类型 | 非敏感数据 | 敏感数据 |
| 存储方式 | 明文 | Base64 编码 |
| 典型用途 | 配置文件、环境变量 | 密码、Token、证书 |
| 大小限制 | 1MB | 1MB |
ConfigMap 的使用方式
| 方式 | 说明 | 示例 |
|---|---|---|
| 环境变量 | 注入到容器环境变量 | DATABASE_HOST |
| 命令行参数 | 作为容器启动参数 | --db-host=$(DATABASE_HOST) |
| 卷挂载 | 挂载为文件 | /etc/config/app.conf |
ConfigMap 的数据来源
1. 字面量
- 直接定义键值对
- 适合简单的配置项
2. 文件
- 从文件读取内容
- 适合配置文件
3. 目录
- 从目录读取所有文件
- 适合多个配置文件
实际应用场景
场景 1:数据库配置
- 数据库地址、端口、用户名(非密码)
场景 2:应用配置
- 日志级别、缓存大小、超时时间
场景 3:配置文件
- Nginx 配置、应用配置文件
场景 4:多环境管理
- 开发、测试、生产环境的配置
实践练习
练习 1:理解 ConfigMap
回答以下问题:
- ConfigMap 和 Secret 有什么区别?
- ConfigMap 有哪几种使用方式?
- 为什么要把配置和代码分离?
练习 2:设计配置
为以下应用设计 ConfigMap:
- Web 应用
- 需要:数据库地址、端口、日志级别、缓存大小
- 区分开发和生产环境
小结
| 要点 | 说明 |
|---|---|
| ConfigMap | 存储非敏感配置数据 |
| 数据格式 | 键值对 |
| 使用方式 | 环境变量、命令行参数、卷挂载 |
| 核心价值 | 配置与代码分离 |
| 大小限制 | 1MB |
练习编辑器
bash
Loading...