Kubernetes ConfigMap挂载带下划线单文件时被创建为目录问题咨询
原因说明
文件名中的下划线本身不会触发该异常,该行为是Kubernetes的已知挂载逻辑导致的,常见触发原因如下:
- 最核心的触发原因:
subPath指定的文件名在对应ConfigMap的键列表中不存在
Kubernetes使用subPath从ConfigMap挂载单个文件时,如果匹配不到对应键名,不会抛出Pod创建失败的错误,会默认将mountPath指定的路径创建为空目录。
你替换为连字符后恢复正常,大概率是你创建ConfigMap时使用的键名本身就是连字符格式的static-files.conf,和你之前写的下划线格式static_files.conf不匹配,导致Kubernetes找不到对应文件,触发了目录创建逻辑。
你可以执行以下命令验证ConfigMap的键名是否匹配:
kubectl get configmap static-files-conf-config -o jsonpath='{.data.keys()}'
如果输出中没有static_files.conf,即可确认是键名不匹配导致的问题。
次要触发原因:容器镜像内已存在同名目录
如果你使用的镜像根路径下已经预先存在名为static_files.conf的目录,Kubernetes执行挂载时会将subPath的内容挂载到该已有目录下,最终呈现为目录格式。替换为连字符后正常,是因为镜像内不存在同名的static-files.conf目录,所以可以正常挂载为文件。额外兼容风险提示
你当前使用的apps/v1beta2版本Deployment API属于已废弃版本(Kubernetes 1.9版本起标记废弃,1.16版本后正式移除),建议尽快替换为apps/v1版本API,避免版本兼容导致的非常规挂载问题。
内容的提问来源于stack exchange,提问作者jer-k
相关产品推荐
相关产品推荐

