centos

centos k8s ConfigMap配置管理

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

CentOS环境下Kubernetes ConfigMap配置管理指南

一、ConfigMap概述

ConfigMap是Kubernetes的核心配置管理资源,用于存储非敏感配置数据(如应用参数、环境变量、配置文件内容),实现配置与容器镜像解耦。其核心价值在于:

二、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. 更新生效方式

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
看了该问题的人还看了