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实现应用配置管理,提升部署灵活性和环境适应性。