Kubernetes ConfigMap 配置管理
Kubernetes ConfigMap 配置管理
什么是 ConfigMap
ConfigMap 是 Kubernetes 中用于存储非机密配置数据的 API 对象。它允许将配置与容器镜像解耦,使应用配置更加灵活和可维护。ConfigMap 可以存储键值对、配置文件或完整的目录结构。
创建 ConfigMap
从字面值创建
kubectl create configmap app-config \
--from-literal=DB_HOST=mysql \
--from-literal=DB_PORT=3306 \
--from-literal=DB_NAME=mydb
从文件创建
# 单个文件
kubectl create configmap app-config --from-file=config.properties
# 多个文件
kubectl create configmap app-config \
--from-file=config1.properties \
--from-file=config2.properties
# 指定键名
kubectl create configmap app-config --from-file=app-config=config.properties
从目录创建
kubectl create configmap app-config --from-file=config-dir/
通过 YAML 文件创建
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
namespace: default
data:
DB_HOST: "mysql"
DB_PORT: "3306"
DB_NAME: "mydb"
config.properties: |
database.url=jdbc:mysql://mysql:3306/mydb
database.pool.size=10
log.level=INFO
kubectl apply -f configmap.yaml
查看 ConfigMap
# 列出所有 ConfigMap
kubectl get configmap
# 查看详情
kubectl describe configmap app-config
# 查看内容
kubectl get configmap app-config -o yaml
kubectl get configmap app-config -o json
# 输出指定键值
kubectl get configmap app-config -o jsonpath='{.data.DB_HOST}'
使用 ConfigMap
作为环境变量
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: my-app
env:
- name: DB_HOST
valueFrom:
configMapKeyRef:
name: app-config
key: DB_HOST
- name: DB_PORT
valueFrom:
configMapKeyRef:
name: app-config
key: DB_PORT
envFrom:
- configMapRef:
name: app-config
作为文件挂载
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: my-app
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: app-config
挂载单个文件
volumes:
- name: config-volume
configMap:
name: app-config
items:
- key: "config.properties"
path: "config.properties"
更新 ConfigMap
# 编辑 ConfigMap
kubectl edit configmap app-config
# 替换配置文件
kubectl create configmap app-config --from-file=config.properties --dry-run=client -o yaml | kubectl apply -f -
ConfigMap 与 Secret 的区别
ConfigMap 适合存储非机密配置,Secret 适合存储敏感数据(如密码、密钥)。Secret 的值以 Base64 编码存储。
实践案例
Spring Boot 应用配置
apiVersion: v1
kind: ConfigMap
metadata:
name: spring-config
data:
application.yml: |
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://mysql:3306/mydb
username: root
password: ${DB_PASSWORD}
Nginx 配置
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-config
data:
nginx.conf: |
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
最佳实践
- 将配置与代码分离,便于维护
- 使用环境变量或挂载文件方式使用 ConfigMap
- 定期备份重要配置
- 使用版本控制管理 ConfigMap 的 YAML 文件
总结
ConfigMap 是 Kubernetes 配置管理的核心工具,通过将配置与应用解耦,实现了配置的灵活管理和动态更新。合理使用 ConfigMap 可以显著提升应用的可维护性。