首页/云/Kubernetes 速查/CreateContainerConfigError
集群运维与排障54 条

CreateContainerConfigError

kubelet 组装容器配置时引用的 ConfigMap、Secret 或其中的键不存在:容器根本没被创建,所以也没有容器日志可看。

Kubernetes 速查云更新于 2026-10-13

现象定位

CreateContainerConfigError 表示 kubelet 在组装容器配置阶段就失败了:引用的 ConfigMap、Secret 不存在,或其中的键名对不上。它最关键的特征是容器根本没有被创建,所以 kubectl logs 不会有任何输出,只能从 describe 的事件里找原文。适用平台是 Kubernetes,属于配置类故障里最常见的一种,通常发生在换命名空间、改键名或删了配置对象之后。

基本信息

状态表现Pod STATUS 显示 CreateContainerConfigError,RESTARTS 通常为 0
报错位置kubectl describe pod 的 Events 与 status.containerStatuses[].state.waiting.message
典型触发env/envFrom 引用的 ConfigMap 或 Secret 不存在、键被改名、跨命名空间引用
恢复方式补齐配置对象或修正键名后,kubelet 会自动重试创建容器

典型使用场景

  • 新建命名空间部署失败:配置对象建在了 default,工作负载却部署到别处
  • 改名引发故障:ConfigMap 键从 APP_MODE 改成 app.mode,env 引用没同步
  • 权限受限时误判:RBAC 限制导致别人删掉了 Secret,工作负载随即起不来
  • 环境迁移复核:把清单搬到新集群时漏建 Secret,先报这个错再排查
  • 确认是否为配置问题:Pod 状态异常但没有任何容器日志,第一时间看这个错误

定位命令

定位命令
kubectl describe pod web-x -n prod | sed -n '/Events:/,$p'        # 事件原文最关键
kubectl get pod web-x -n prod -o jsonpath='{.status.containerStatuses[0].state.waiting.message}'
kubectl get cm app-config -n prod                                  # 配置对象是否存在
kubectl get secret app-secret -n prod                              # Secret 是否存在
kubectl get pod web-x -n prod -o jsonpath='{.spec.containers[0].env[*].valueFrom}'   # 引用了什么
kubectl get cm app-config -n prod -o jsonpath='{.data}'            # 核对键名是否被改过

事件原文与含义

事件原文片段含义处理
configmap "app-config" not foundConfigMap 不存在或不在同一命名空间补齐对象或修正引用
could not find key APP_MODE in secret app-secret对象在但键名不存在核对 data 里的键名大小写与拼写
secret "db-pass" not foundSecret 被删或名字写了别名重建 Secret 并固化到清单
permission deniedkubelet 无权读取该对象检查 RBAC 与准入策略
修正配置后 kubelet 会按退避策略自动重试创建容器,通常不需要删 Pod;若改的是卷引用,也可能仍需重建 Pod 才能刷新。
用 optional: true 声明的 ConfigMap 或 Secret 缺失时不会报这个错,对象不存在只是不注入。排查时要分清哪些引用是可选的。
ConfigMap 与 Secret 是命名空间级资源,跨命名空间引用不被支持;多环境部署时务必按命名空间成套创建,避免「测试好、生产挂」。

易错点

  • 只看 Pod 日志:容器未创建前没有任何日志输出,必须读 describe 的事件,方向错了会白花时间
  • 改完 ConfigMap 没重建 Pod:env 注入只在容器创建时读取一次,运行中的容器不会更新,需 rollout restart
  • 排查时忽略键名大小写:ConfigMap 的键是大小写敏感的,APP_MODE 与 app_mode 是两回事
  • 跨命名空间引用配置对象:Secret 与 ConfigMap 不能用 namespace/name 写进 envFrom,只能在同一命名空间准备一份

数据来源与参考

  • Kubernetes 官方文档 · 配置 Pod 使用 ConfigMap
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌