Kubernetes偶现CreateContainerConfigError:容器volumeMount的subPath准备失败
你遇到的这个偶发性CreateContainerConfigError: failed to prepare subPath for volumeMount "myVolumeMount" of container "myContainer"错误,确实是Kubernetes v1.22版本中与subPath挂载相关的已知问题。
问题原因
在v1.22的早期补丁版本中,kubelet处理subPath挂载时存在逻辑缺陷:当subPath指向的路径尚未在存储卷中创建,或者底层远程存储(如NFS、EBS等)存在元数据同步延迟时,kubelet的路径检查逻辑会直接失败,没有重试机制。这种情况在存储卷初始化较慢、网络波动时就会偶发触发,你的配置里subPath: files/.cores刚好符合这个场景。
解决办法
- 提前创建
subPath路径:通过初始化容器在主容器启动前确保目标路径存在,示例配置如下:
initContainers: - name: prepare-subpath image: busybox:1.35 command: ["mkdir", "-p", "/mnt/volume/files/.cores"] volumeMounts: - name: myVolumeMount mountPath: /mnt/volume
主容器启动时,subPath对应的路径已经存在,可避免kubelet挂载时的路径检查失败。
升级到v1.22.6及以上补丁版本:该问题在Kubernetes v1.22.6的修复中被解决,升级后kubelet会对
subPath挂载增加重试逻辑,容忍短暂的存储元数据延迟。调整挂载策略(可选):如果业务不需要严格的
subPath隔离,可以直接将mountPath设为/var/data/crash对应的目标路径,或者改用subPathExpr(需动态路径场景),绕过subPath的路径检查逻辑。
另外注意:你提到的客户端版本v0.22应该是笔误,建议kubectl版本与服务端保持一致(v1.22.x),版本不匹配可能引发额外的不可预期问题。
内容的提问来源于stack exchange,提问作者Sakeeb Hossain

