Все Pod стали CreateContainerConfigError после изменения конфигурации — найдите причину.
После изменения конфигурации каждый новый под застревает в CreateContainerConfigError и не стартует. Объясните, что это за состояние (и чем оно отличается от падения), прочитайте артефакт и дайте фикс.
$ kubectl get pod api-77b
NAME READY STATUS RESTARTS AGE
api-77b 0/1 CreateContainerConfigError 0 1m
$ kubectl describe pod api-77b | sed -n '/State/,/Events/p ; /Warning/p'
State: Waiting
Reason: CreateContainerConfigError
Events:
Warning Failed kubelet Error: couldn't find key DB_PASSWORD in Secret default/api-secrets
Диагностируйте и исправьте.
CreateContainerConfigError — ошибка создания, не падение: kubelet не может собрать контейнер, потому что нужного ConfigMap/Secret или ключа нет. Здесь env берёт DB_PASSWORD из Secret, но изменение удалило ключ — верните его или поправьте ссылку.
- ✗Читать
CreateContainerConfigErrorкак падение с логами для чтения - ✗Упускать, что удалённый ключ Secret/ConfigMap блокирует создание
- ✗Не считать это Waiting-состоянием как
ImagePullBackOff
- →Как пометка env
valueFromкакoptional: trueменяет этот сбой? - →Почему переименование Secret и удаление ключа дают один и тот же симптом?
Решение
1. Что это за состояние
CreateContainerConfigError — контейнер не создан, потому что kubelet не смог подготовить его конфигурацию: env.valueFrom/envFrom/volume ссылается на ConfigMap, Secret или ключ, которого нет. Это Waiting-состояние (как ImagePullBackOff), а не падение: процесс не запускался, поэтому логов приложения нет.
2. Читаем причину
Error: couldn't find key DB_PASSWORD in Secret default/api-secrets
Изменение конфигурации удалило/переименовало ключ DB_PASSWORD, а Deployment всё ещё маппит его в env. Отсюда все новые поды в ошибке.
3. Фикс
- вернуть ключ
DB_PASSWORDв Secretapi-secrets; или - поправить ссылку (правильное имя ключа/Secret); или
- если переменная не критична —
optional: trueуsecretKeyRef.
После правки новые поды создаются нормально; старые (если были) продолжали работать.