kubectl exec: Выполнить команду внутри контейнера, зайти в shell
Выполнить команду внутри контейнера, зайти в shell
Базовый синтаксис
kubectl exec -it <pod-name> -- bash
Эта команда запускает интерактивный shell в контейнере.
-it— включает интерактивный терминал (важно для работы с командной строкой).<pod-name>— имя пода, в котором нужно выполнить команду.-- bash— запускает bash-оболочку внутри контейнера.
Пример:
kubectl exec -it my-app-pod -- bash
Если контейнер использует /bin/sh, замените bash на sh.
Полезные флаги
–container
Когда в поде несколько контейнеров, нужно уточнить, в какой именно.
Пример:
kubectl exec -it my-pod --container sidecar -- sh
Здесь sidecar — имя контейнера, в который нужно зайти.
–
Разделяет флаги kubectl от команды внутри контейнера. Без этого символа shell может интерпретировать bash как флаг.
Пример:
kubectl exec -it my-pod -- /bin/bash
Если убрать --, команда выполнится, но shell не запустится.
Типичные сценарии
-
Проверка логов в крашнутом поде
Нужно найти поды, которые крашнутся больше 5 раз:kubectl get pods | grep -E 'Error|CrashLoopBackOff'Затем зайти в контейнер:
kubectl exec -it broken-pod -- shПроверить содержимое
/var/log/или запуститьdmesg. -
Тестирование подключения к БД
Зайти в контейнер приложения и выполнить:curl http://db-service:3306Или проверить настройки подключения в конфигах.
Частые ошибки
-
Забытый
--
Команда:kubectl exec -it my-pod bashЗапустится, но shell не будет интерактивным.
-
Неправильное имя контейнера
Если в поде два контейнера (appиsidecar), команда:kubectl exec -it my-pod --container app -- shЗайти в нужный контейнер.