Kubernetes的ConfigMap和Secret通过以下方式简化应用程序配置管理:
-
解耦配置与镜像
将环境变量、配置文件等从容器镜像中分离,避免因配置变更需重新构建镜像,提升部署灵活性。 -
统一管理配置
- ConfigMap:存储非敏感配置(如端口、日志级别),支持YAML/JSON文件或命令行创建。
apiVersion: v1 kind: ConfigMap metadata: name: app-config data: app.properties: | LOG_LEVEL=INFO MAX_THREADS=10
- Secret:加密存储敏感数据(如密码、密钥),默认使用Base64编码。
apiVersion: v1 kind: Secret metadata: name: db-secret type: Opaque data: username: YWRtaW4= # admin password: MWYyZDFlMmU= # 1f2d1e2e
- ConfigMap:存储非敏感配置(如端口、日志级别),支持YAML/JSON文件或命令行创建。
-
动态注入配置
- 环境变量注入:在Pod定义中直接引用ConfigMap/Secret的键值。
env:
- name: LOG_LEVEL valueFrom: configMapKeyRef: name: app-config key: LOG_LEVEL
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: db-secret
key: password
- 文件挂载:将整个配置文件挂载到容器指定路径。
volumes:
- name: config-volume configMap: name: app-config
- name: secret-volume
secret:
secretName: db-secret
- 环境变量注入:在Pod定义中直接引用ConfigMap/Secret的键值。
-
安全与权限控制
- Secret数据在etcd中加密存储(需启用加密功能)。
- 通过RBAC限制对ConfigMap/Secret的访问权限,避免敏感信息泄露。
-
配置热更新
- 修改ConfigMap/Secret后,使用卷挂载的Pod会自动同步更新(需应用支持热加载)。
- 环境变量方式需重启Pod生效,可通过Deployment滚动更新实现无宕机。
常用操作示例
- 快速创建ConfigMap:
kubectl create configmap redis-config --from-file=redis.conf
- 查看Secret明文(需权限):
kubectl get secret db-secret -o jsonpath='{.data.password}' | base64 -d