温馨提示×

centos k8s ConfigMap配置管理

小樊
40
2025-10-01 01:12:50
栏目: 智能运维

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.ymllogback.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. 作为环境变量注入

通过envFromenv字段,将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_HOSTprintenv查看环境变量。

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会报错)。

五、注意事项

  1. 命名空间限制:ConfigMap仅能被同一命名空间的Pod引用;
  2. 键名规范:键名需符合DNS子域名规范(如my.config.key,不能以数字开头);
  3. 大小写敏感:键名区分大小写(DB_HOSTdb_host视为不同键);
  4. 敏感信息处理:ConfigMap不适合存储敏感信息(如密码、密钥),此类信息应使用Secret资源;
  5. 容量限制:单个ConfigMap的data大小不超过1MB(避免性能问题)。

通过以上步骤,可在CentOS环境下高效使用Kubernetes ConfigMap实现应用配置管理,提升部署灵活性和环境适应性。

0