ConfigMap是Kubernetes的核心配置管理资源,用于存储非敏感配置数据(如应用参数、环境变量、配置文件内容),实现配置与容器镜像解耦。其核心价值在于:
在CentOS主机上,可通过命令行或YAML文件创建ConfigMap,以下是常见方法:
--from-literal
)适用于简单键值对(如数据库端口、应用模式):
kubectl create configmap my-config --from-literal=db_port=3306 --from-literal=app_mode=production
--from-file
)适用于单个配置文件(如Nginx配置、应用YAML):
echo "server { listen 80; }" > nginx.conf
kubectl create configmap nginx-config --from-file=nginx.conf
--from-file
)适用于批量管理多个配置文件(如Spring Boot的application.yml
、logback.xml
):
mkdir -p /opt/app/config
echo "spring.application.name=myapp" > /opt/app/config/application.yml
echo "logging.level.root=INFO" >> /opt/app/config/application.yml
kubectl create configmap app-config --from-file=/opt/app/config
--from-env-file
)适用于.env
格式的环境变量文件:
echo "DB_HOST=mysql-service DB_PORT=3306" > .env
kubectl create configmap env-config --from-env-file=.env
适用于复杂配置(如需要注释、多键值对),步骤如下:
my-config.yaml
)apiVersion: v1
kind: ConfigMap
metadata:
name: my-config # ConfigMap名称
namespace: default # 所属命名空间(默认default)
data:
db_host: mysql-service # 键值对1(应用连接数据库的主机名)
db_port: "3306" # 键值对2(端口需为字符串)
log_level: INFO # 键值对3(日志级别)
kubectl apply -f my-config.yaml
创建后,可通过以下命令检查:
# 查看ConfigMap列表
kubectl get configmaps
# 查看ConfigMap详情(包含所有键值对)
kubectl describe configmap my-config
# 查看ConfigMap的YAML格式内容
kubectl get configmap my-config -o yaml
ConfigMap创建后,需通过Pod的spec
字段将其配置注入容器,主要有三种方式:
通过envFrom
或env
字段,将ConfigMap的键值对转换为容器的环境变量:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx:latest
envFrom: # 直接引用整个ConfigMap的所有键值对
- configMapRef:
name: my-config # ConfigMap名称
# 或通过env字段引用单个键(需指定key)
# env:
# - name: DB_PORT # 容器内环境变量名
# valueFrom:
# configMapKeyRef:
# name: my-config
# key: db_port
容器内可通过echo $DB_HOST
或printenv
查看环境变量。
通过volumes
字段,将ConfigMap的内容挂载到容器的指定路径(每个键对应一个文件,值为文件内容):
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx:latest
volumeMounts:
- name: config-volume # 卷名称(与volumes中的name一致)
mountPath: /etc/app/config # 容器内挂载路径
readOnly: true # 只读挂载
volumes:
- name: config-volume
configMap:
name: my-config # ConfigMap名称
# 可选:仅挂载部分键(避免挂载不必要的配置)
# items:
# - key: db_host
# path: db_host.conf # 容器内文件名(自定义)
容器内可通过cat /etc/app/config/db_host
查看文件内容。
通过args
字段,将ConfigMap的值作为命令行参数传递给应用:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: busybox
command: ["sh", "-c", "echo 'Database Host: $(DB_HOST), Port: $(DB_PORT)'"]
envFrom:
- configMapRef:
name: my-config
容器启动后,会输出Database Host: mysql-service, Port: 3306
。
kubectl apply -f my-config.yaml # 修改YAML中的data字段后重新apply
kubectl edit
)kubectl edit configmap my-config # 直接编辑ConfigMap内容
修改后,集群会自动更新ConfigMap的etcd存储。
kubectl rollout status
检查);kubectl delete pod my-pod
)使新配置生效;kubectl delete configmap my-config # 删除指定ConfigMap
删除前需确保无Pod依赖该ConfigMap(否则Pod会报错)。
my.config.key
,不能以数字开头);DB_HOST
与db_host
视为不同键);Secret
资源;通过以上步骤,可在CentOS环境下高效使用Kubernetes ConfigMap实现应用配置管理,提升部署灵活性和环境适应性。