ConfigMap 配置错误导致pod持续处于Error状态的排查记录

遇到一个奇怪的情况。在做实验的时候( Kubernetes(K8s)笔记Day09 configmap 4.3 章节),cm正常启动,启动pod也没有报错,但是一看,pod却是这个情况:

赶忙查看详细信息:

[root@hd1 ~]# kubectl describe pod nginx

虽然状态是Faild,但是事件的显示也正常

按步骤来吧。先看pod日志:

日志最后一行清晰地暴露了问题:

2026/08/0511:44:19[emerg]1#1: unexpected end of file, expecting ";" or "}" in /etc/nginx/nginx.conf:1nginx:[emerg]unexpected end of file, expecting";"or"}"in/etc/nginx/nginx.conf:1

大致意思是,Nginx 在启动时读取 /etc/nginx/nginx.conf 文件,发现第 1 行(:1)出现了语法错误——文件内容不完整或格式被破坏,导致 Nginx 无法解析并直接崩溃退出(状态码变为 Error)

经过排查,发现是我的configmap文件写错了!

我的文件:

apiVersion:v1kind:ConfigMapmetadata:name:nginx-cmlabels:app:nginxdata:nginx.conf:./nginx.conf

配置中的./nginx.conf 是一个文件的路径。但是configmap的yaml文件不能引入文件路径!只能引入文件内容!

修改一下,这才是正确的cm yaml文件引入内容的配置:

apiVersion: v1 kind: ConfigMap metadata: name: nginx-cm labels: app: nginx data: nginx.conf:|# 注意这里的竖线和缩进user nginx;worker_processes auto;events{worker_connections1024;}http{include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout65;server{listen800;server_name www.a.com;location /{root /usr/share/nginx/html;index index.html index.htm;}}}

先删除配置错误的cm:

[root@hd1 ~]# kubectl delete -f my_nginx.yamlconfigmap"nginx-cm"deleted

再删除错误的pod:

[root@hd1 ~]# kubectl delete pod nginxpod"nginx"deleted

接下来我们再进行创建就行了

[root@hd1 ~]# kubectl apply -f my_nginx.yamlconfigmap/nginx-cm created[root@hd1 ~]# kubectl apply -f nginx_cm.yamlpod/nginx created

再次查看pod情况:

[root@hd1 ~]# kubectl get podNAME READY STATUS RESTARTS AGE nginx1/1 Running032s

这个pod已经创建成功

总结

这次排错让我深入学习到configmap的一些特性:
ConfigMap 的 YAML 文件中的data字段只能接受直接的键值对数据,不能通过文件路径引用的方式来加载内容。
因此,想要将整个文件的内容直接导入 ConfigMap,最便捷的方式就是使用kubectl create configmap命令行的--from-file参数

简单说,就是ConfigMap的yaml不能引入文件路径,只能引入文件内容,想要直接导入整个文件,最好用命令行的方式创建cm