Commands
Kubernetes

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 не запустится.

Типичные сценарии

  1. Проверка логов в крашнутом поде
    Нужно найти поды, которые крашнутся больше 5 раз:

    kubectl get pods | grep -E 'Error|CrashLoopBackOff'  
    

    Затем зайти в контейнер:

    kubectl exec -it broken-pod -- sh  
    

    Проверить содержимое /var/log/ или запустить dmesg.

  2. Тестирование подключения к БД
    Зайти в контейнер приложения и выполнить:

    curl http://db-service:3306  
    

    Или проверить настройки подключения в конфигах.

Частые ошибки

  1. Забытый --
    Команда:

    kubectl exec -it my-pod bash  
    

    Запустится, но shell не будет интерактивным.

  2. Неправильное имя контейнера
    Если в поде два контейнера (app и sidecar), команда:

    kubectl exec -it my-pod --container app -- sh  
    

    Зайти в нужный контейнер.