В версии Kubernetes 1.25 стала стабильной функция эффемерных контейнеров (ephemeral containers).
Она позволяет добавлять временные контейнеры прямо в уже работающий под для целей отладки — без его перезапуска и изменения оригинальной спецификации.
Это решает проблему дебага пода, когда в контейнере отсутствует даже базовый shell, а запуск отладочного пода рядом не даёт доступа к пространствам имён проблемного контейнера.
🤔 Как это работает?
Эффемерный контейнер добавляется через специальный ресурс
EphemeralContainers или командой kubectl debug. Kubelet создаёт новый контейнер в том же поде, не перезапуская уже работающие контейнеры. Он разделяет с подом:— Сеть (network namespace)
— Пространство имён PID (чтобы видеть процессы)
— Межпроцессное взаимодействие
— Тома
После завершения отладки контейнер остаётся в статусе
Completed (или удаляется при использовании --rm), но не перезапускается.🤔 Пример использования
kubectl debug my-app -it --image=nicolaka/netshoot -- bash
Эта команда запускает временный контейнер с образом
nicolaka/netshoot (набор сетевых утилит) внутри работающего пода my-app. Благодаря общим namespace'ам контейнер получает доступ к процессам, файловой системе и сетевым интерфейсам оригинального пода — даже если его собственный образ собран на scratch. После завершения отладки контейнер останавливается, не влияя на работу приложения.🤔 Когда это особенно полезно?
— Приложения на distroless/scratch — нет shell.
— Диагностика сети из контекста пода (curl, ping, tcpdump).
— Проверка состояния томов (например, emptyDir или ConfigMap).
— Анализ потребления ресурсов процессами (через / proc).
#заметкиИнженера
