遇到一个奇怪的情况。在做实验的时候( 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