Обратитесь к официальной документации сайта Kubernetes: Containers.
Контейнер — это легковесный исполняемый пакет программного обеспечения, который включает всё необходимое для запуска приложения: код, среду выполнения, системные инструменты, системные библиотеки и настройки. Хотя Pods являются наименьшими развертываемыми единицами, контейнеры — это основные компоненты внутри Pods.
Отладка контейнеров с помощью
Обратитесь к официальной документации сайта Kubernetes: Ephemeral Containers
Функция Kubernetes Ephemeral Containers предоставляет надёжный способ отладки запущенных контейнеров путём внедрения специализированных инструментов отладки (системных, сетевых и дисковых утилит) в существующий Pod.
Хотя часто можно выполнять команды непосредственно внутри запущенного контейнера с помощью kubectl exec, многие производственные образы контейнеров намеренно минимальны и могут не содержать необходимых утилит для отладки (например, bash, net-tools, tcpdump), чтобы уменьшить размер образа и поверхность атаки. Эфемерные контейнеры решают эту проблему, предоставляя предварительно настроенную среду с богатым набором инструментов отладки, что делает их идеальными для следующих сценариев:
Функциональность отладки реализована с помощью эфемерных контейнеров. Эфемерный контейнер — это специальный тип контейнера, предназначенный для интроспекции и отладки. Он разделяет сетевое пространство имён Pod и пространство имён процессов (если включено) с существующими основными containers
, что позволяет ему напрямую взаимодействовать и наблюдать процессы приложения.
Вы можете динамически добавить эфемерный контейнер (например, my-app-debug
) в запущенный Pod и использовать его предустановленные инструменты отладки. Результаты диагностики из этого эфемерного контейнера напрямую относятся к поведению и состоянию основных приложений containers
в том же Pod.
В Kubernetes 1.25+ доступна команда kubectl debug
для создания эфемерных контейнеров. Этот метод предоставляет мощную альтернативу командной строки для отладки.
Команда
Пример: Отладка nginx
в my-nginx-pod
Сначала убедитесь, что Pod запущен:
Теперь создайте эфемерный контейнер отладки с именем debugger
внутри my-nginx-pod
, нацеленный на my-nginx-container, используя образ busybox
:
Эта команда подключит вас к shell внутри эфемерного контейнера debugger. Теперь вы можете использовать инструменты busybox для отладки my-nginx-container.
Чтобы просмотреть эфемерные контейнеры, присоединённые к Pod:
Найдите раздел Ephemeral Containers
в выводе.
Перейдите в Container Platform, затем в левом меню выберите Workloads > Pods.
Найдите нужный Pod и нажмите ⋮ > Debug.
Выберите конкретный контейнер внутри Pod, который хотите отлаживать.
(Опционально) Если интерфейс запросит инициализацию (например, для настройки необходимой среды отладки), нажмите Initialize.
После инициализации функции Debug, пока Pod не будет пересоздан, вы можете напрямую войти в эфемерный контейнер (например, Container A-debug) для отладки.
Дождитесь готовности окна терминала отладки и начните операции отладки.
Подсказка: нажмите опцию «Command Query» в правом верхнем углу терминала, чтобы увидеть список распространённых инструментов отладки и примеры их использования.
Нажмите «Command Query» в правом верхнем углу, чтобы просмотреть распространённые инструменты и их использование.
По завершении отладки закройте окно терминала.
Вы можете напрямую взаимодействовать с внутренним экземпляром запущенного контейнера с помощью команды kubectl exec
, что позволяет выполнять произвольные операции в командной строке. Кроме того, Kubernetes предоставляет удобные возможности для загрузки и скачивания файлов из контейнеров и в контейнеры.
Для выполнения команды внутри конкретного контейнера в Pod (полезно для получения shell, запуска диагностических команд и т.д.):
Пример: Получение Bash shell в nginx
из my-nginx-pod
Пример: Просмотр файлов в /tmp
контейнера
Чтобы скопировать файлы с локальной машины в контейнер внутри Pod:
Чтобы скопировать файлы из контейнера внутри Pod на локальную машину:
Вы можете войти во внутренний экземпляр контейнера с помощью команды kubectl exec
, что позволяет выполнять операции в командной строке в окне веб-консоли. Также можно легко загружать и скачивать файлы внутри контейнера с помощью функции передачи файлов.
Перейдите в Container Platform, затем в левом меню выберите Application > Applications.
Нажмите на Application Name.
Найдите связанный workload (например, Deployment, StatefulSet), нажмите EXEC, затем выберите конкретный Pod Name, в который хотите войти. EXEC > Container Name.
Введите команду, которую хотите выполнить.
Нажмите OK для входа в окно веб-консоли и выполнения командной строки.
Нажмите File Transfer.
Перейдите в Container Platform, затем в левом меню выберите Workloads > Pods.
Найдите нужный Pod, нажмите вертикальное многоточие (⋮) рядом с ним, выберите EXEC, затем выберите конкретный Container Name внутри этого Pod, в который хотите войти.
Введите команду, которую хотите выполнить.
Нажмите OK для входа в окно веб-консоли и выполнения командной строки.
Нажмите File Transfer.