Kubernetes ConfigMap 查看与修改操作文档(运维版)

AI摘要
本文是一篇关于Kubernetes ConfigMap操作的技术指南,属于知识分享。文章系统性地介绍了ConfigMap的查看、修改、更新生效及问题排查方法,重点说明了通过`kubectl`命令行工具进行管理、使用`subPath`挂载时需重启Pod的注意事项,并给出了运维最佳实践建议。

Kubernetes ConfigMap 查看与修改操作指南

一、背景说明

在 Kubernetes 环境中,应用程序的配置通常通过 ConfigMap 进行管理。
ConfigMap 可以将配置文件、环境变量等信息与容器镜像解耦,使应用配置可以在 不重新构建镜像的情况下进行修改和更新

例如 Nginx 配置:

ConfigMap
   ↓
Volume
   ↓
Pod
   ↓
容器内部配置文件

典型挂载示例:

ConfigMap: ape-web
      ↓
volume: conf
      ↓
subPath
      ↓
/etc/nginx/nginx.conf
/etc/nginx/vhosts/ape-web.conf

二、查看 ConfigMap

1 查看当前 Namespace 下所有 ConfigMap

kubectl get configmap

示例输出:

NAME            DATA   AGE
ape-web         2      30d
kube-root-ca    1      180d

2 查看指定 ConfigMap 内容

kubectl get configmap ape-web -o yaml

示例:

apiVersion: v1
kind: ConfigMap
metadata:
  name: ape-web
data:
  nginx.conf: |
    worker_processes 1;

  ape-web.conf: |
    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend;
        }
    }

3 查看指定 Namespace 的 ConfigMap

如果资源不在 default namespace:

kubectl get configmap -n <namespace>

例如:

kubectl get configmap -n ape

查看内容:

kubectl get configmap ape-web -n ape -o yaml

三、查看 ConfigMap 被哪个 Pod 使用

1 查看 Pod 配置

kubectl get pod <pod-name> -o yaml

查找:

volumeMounts
volumes

示例:

volumeMounts:
- mountPath: /etc/nginx/nginx.conf
  name: conf
  subPath: nginx.conf

- mountPath: /etc/nginx/vhosts/ape-web.conf
  name: conf
  subPath: ape-web.conf

volumes:
- name: conf
  configMap:
    name: ape-web

说明:

ConfigMap ape-web
     ↓
volume conf
     ↓
容器配置文件

2 快速查看 Pod 挂载信息

kubectl describe pod <pod-name>

查看:

Mounts
Volumes

四、修改 ConfigMap

方法一:在线编辑(推荐)

直接编辑 ConfigMap:

kubectl edit configmap ape-web

系统会打开默认编辑器:

vi
nano

示例:

data:
  ape-web.conf: |
    server {
        listen 80;
        server_name new.example.com;
    }

保存退出即可。


方法二:导出 YAML 修改后重新应用

1 导出 ConfigMap

kubectl get configmap ape-web -o yaml > ape-web-configmap.yaml

2 修改 YAML 文件

例如:

data:
  ape-web.conf: |
    server {
        listen 80;
        server_name new.example.com;
    }

3 重新应用配置

kubectl apply -f ape-web-configmap.yaml

五、配置更新后重启 Pod

注意:

如果 ConfigMap 使用 subPath 挂载:

subPath: nginx.conf

Kubernetes 不会自动刷新配置

必须重启 Pod。


方法一:重启 Deployment

kubectl rollout restart deployment <deployment-name>

示例:

kubectl rollout restart deployment ape-web

方法二:删除 Pod(自动重建)

kubectl delete pod <pod-name>

Deployment 会自动创建新 Pod。


六、验证配置是否生效

进入容器检查配置:

kubectl exec -it <pod-name> -- bash

查看文件:

cat /etc/nginx/nginx.conf
cat /etc/nginx/vhosts/ape-web.conf

测试 nginx 配置:

nginx -t

重新加载 nginx:

nginx -s reload

七、常见问题

1 修改 ConfigMap 后配置没有生效

原因:

subPath 挂载不会自动更新

解决:

重启 Pod

2 找不到 ConfigMap

可能原因:

Namespace 不一致

查看:

kubectl get configmap -A

3 ConfigMap 被 Helm 管理

如果资源包含:

meta.helm.sh

说明是 Helm 发布,需要通过 Helm 修改。


八、推荐运维排查命令

查看 Pod 使用的 ConfigMap

kubectl describe pod <pod-name> | grep -A 10 Mounts

查看所有 ConfigMap

kubectl get configmap -A

查看 ConfigMap 内容

kubectl get configmap <name> -o yaml

九、最佳实践

建议:

  1. 所有配置通过 ConfigMap 管理

  2. 使用 Git 版本管理 ConfigMap YAML

  3. 修改配置后通过 CI/CD 自动发布

  4. 避免直接在生产环境手动编辑


本作品采用《CC 协议》,转载必须注明作者和本文链接
每天一点小知识,到那都是大佬,哈哈
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!