配置管理
ConfigMap
ConfigMap 用于存储非敏感的配置信息,比如配置文件、命令行参数、环境变量等。
作用:
- 解耦配置和容器镜像。
- 在不重建镜像的情况下更新应用配置。
使用方式:
- 以环境变量的形式注入容器。
- 挂载为 Volume 文件。
- 通过 CLI 或 YAML 创建并引用。
示例:
yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
APP_ENV: "production"
LOG_LEVEL: "debug"yaml
envFrom:
- configMapRef:
name: app-configSecret
Secret 用于存储敏感数据,例如密码、API Token、证书等。
特点:
data字段使用 Base64 编码,这只是编码而不是加密。- 可作为环境变量或 Volume 使用。
- 支持 RBAC 权限控制。
Secret 默认可能以可还原的形式存储在 etcd 中。生产环境还应启用静态数据加密(encryption at rest)、限制 get/list/watch secrets 权限,并优先使用短期 ServiceAccount Token。需要集中管理和轮换凭据时,可结合外部 Secret 管理系统。
创建方式:
- CLI 方式:
bash
kubectl create secret generic my-secret --from-literal=password=123456- YAML 文件方式(需 base64 编码):
yaml
apiVersion: v1
kind: Secret
metadata:
name: my-secret
type: Opaque
data:
password: MTIzNDU2SubPath
SubPath 用于将某个卷中的子路径挂载到容器指定路径。
使用
subPath挂载 ConfigMap 或 Secret 的单个文件时,容器不会自动收到后续配置更新。需要热更新时,应挂载整个卷并让应用监听文件变化,或通过滚动重启加载新配置。
用途:
- 多个容器共享一个卷但只访问不同子目录。
- 让配置文件独占某个挂载路径。
示例:
yaml
volumeMounts:
- name: config
mountPath: /etc/config/app.conf
subPath: app.conf