CentOS环境下Kubernetes ConfigMap配置管理指南
一、ConfigMap概述
ConfigMap是Kubernetes的核心配置管理资源,用于存储非敏感配置数据(如应用参数、环境变量、配置文件内容),实现配置与容器镜像解耦。其核心价值在于:
- 动态配置:无需重新构建镜像即可修改配置;
- 多环境适配:通过不同ConfigMap支持开发、测试、生产等环境;
- 集中管理:所有配置集中存储在集群中,便于审计和维护。
二、ConfigMap创建方式
在CentOS主机上,可通过命令行或YAML文件创建ConfigMap,以下是常见方法:
1. 命令行创建
(1)从字面值创建(--from-literal)
适用于简单键值对(如数据库端口、应用模式):
kubectl create configmap my-config --from-literal=db_port=3306 --from-literal=app_mode=production
(2)从文件创建(--from-file)
适用于单个配置文件(如Nginx配置、应用YAML):
echo "server { listen 80; }" > nginx.conf
kubectl create configmap nginx-config --from-file=nginx.conf
(3)从目录创建(--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
(4)从环境文件创建(--from-env-file)
适用于.env格式的环境变量文件:
echo "DB_HOST=mysql-service DB_PORT=3306" > .env
kubectl create configmap env-config --from-env-file=.env
2. YAML文件创建
适用于复杂配置(如需要注释、多键值对),步骤如下:
(1)编写YAML文件(如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(日志级别)
(2)应用YAML文件
kubectl apply -f my-config.yaml
3. 验证ConfigMap
创建后,可通过以下命令检查:
# 查看ConfigMap列表
kubectl get configmaps
# 查看ConfigMap详情(包含所有键值对)
kubectl describe configmap my-config
# 查看ConfigMap的YAML格式内容
kubectl get configmap my-config -o yaml
三、ConfigMap在Pod中的使用方式
ConfigMap创建后,需通过Pod的spec字段将其配置注入容器,主要有三种方式:
1. 作为环境变量注入
通过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查看环境变量。
2. 挂载为文件/目录
通过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查看文件内容。
3. 作为命令行参数
通过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。
四、ConfigMap更新与管理
1. 更新ConfigMap
(1)修改YAML文件后重新应用
kubectl apply -f my-config.yaml # 修改YAML中的data字段后重新apply
(2)命令行修改(kubectl edit)
kubectl edit configmap my-config # 直接编辑ConfigMap内容
修改后,集群会自动更新ConfigMap的etcd存储。
2. 更新生效方式
- Volume挂载:若ConfigMap以文件形式挂载,Kubernetes会自动同步更新(默认延迟约1分钟,可通过
kubectl rollout status检查); - 环境变量:环境变量不会自动更新,需重启Pod(
kubectl delete pod my-pod)使新配置生效; - 命令行参数:同环境变量,需重启Pod。
3. 删除ConfigMap
kubectl delete configmap my-config # 删除指定ConfigMap
删除前需确保无Pod依赖该ConfigMap(否则Pod会报错)。
五、注意事项
- 命名空间限制:ConfigMap仅能被同一命名空间的Pod引用;
- 键名规范:键名需符合DNS子域名规范(如
my.config.key,不能以数字开头); - 大小写敏感:键名区分大小写(
DB_HOST与db_host视为不同键); - 敏感信息处理:ConfigMap不适合存储敏感信息(如密码、密钥),此类信息应使用
Secret资源; - 容量限制:单个ConfigMap的data大小不超过1MB(避免性能问题)。
通过以上步骤,可在CentOS环境下高效使用Kubernetes ConfigMap实现应用配置管理,提升部署灵活性和环境适应性。
以上就是关于“centos k8s ConfigMap配置管理”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm