Контейнеры
Содержание
Понимание контейнеровПонимание эфемерных контейнеровПринцип реализации: использование эфемерных контейнеровОтладка эфемерных контейнеров с помощью CLIОтладка эфемерных контейнеров через веб-консольВзаимодействие с контейнерамиВзаимодействие с контейнерами через CLIExecПередача файловВзаимодействие с контейнерами через веб-консольВход в контейнер через ApplicationsВход в контейнер через PodПонимание контейнеров
Обратитесь к официальной документации сайта Kubernetes: Containers.
Контейнер — это легковесный исполняемый пакет программного обеспечения, который включает всё необходимое для запуска приложения: код, среду выполнения, системные инструменты, системные библиотеки и настройки. Хотя Pods являются наименьшими развертываемыми единицами, контейнеры — это основные компоненты внутри Pods.
Понимание эфемерных контейнеров
Отладка контейнеров с помощью
Обратитесь к официальной документации сайта Kubernetes: Ephemeral Containers
Функция Kubernetes Ephemeral Containers предоставляет надёжный способ отладки запущенных контейнеров путём внедрения специализированных инструментов отладки (системных, сетевых и дисковых утилит) в существующий Pod.
Хотя часто можно выполнять команды непосредственно внутри запущенного контейнера с помощью kubectl exec, многие производственные образы контейнеров намеренно минимальны и могут не содержать необходимых утилит для отладки (например, bash, net-tools, tcpdump), чтобы уменьшить размер образа и поверхность атаки. Эфемерные контейнеры решают эту проблему, предоставляя предварительно настроенную среду с богатым набором инструментов отладки, что делает их идеальными для следующих сценариев:
- Диагностика неисправностей: когда основной контейнер приложения испытывает проблемы (например, неожиданные сбои, ухудшение производительности, проблемы с сетевым подключением), помимо проверки стандартных событий и логов Pod, часто требуется более глубокая интерактивная отладка непосредственно в среде выполнения Pod.
- Настройка конфигурации и эксперименты: если текущая конфигурация приложения демонстрирует неоптимальное поведение, можно временно изменить настройки компонентов или протестировать новые конфигурации непосредственно в запущенном контейнере, чтобы наблюдать немедленные эффекты и разработать улучшенные решения.
Принцип реализации: использование эфемерных контейнеров
Функциональность отладки реализована с помощью эфемерных контейнеров. Эфемерный контейнер — это специальный тип контейнера, предназначенный для интроспекции и отладки. Он разделяет сетевое пространство имён Pod и пространство имён процессов (если включено) с существующими основными containers, что позволяет ему напрямую взаимодействовать и наблюдать процессы приложения.
Вы можете динамически добавить эфемерный контейнер (например, my-app-debug) в запущенный Pod и использовать его предустановленные инструменты отладки. Результаты диагностики из этого эфемерного контейнера напрямую относятся к поведению и состоянию основных приложений containers в том же Pod.
:::Notes
* Нельзя добавить эфемерный контейнер, напрямую изменяя статический манифест Pod (PodSpec). Функция эфемерных контейнеров предназначена для динамического внедрения в запущенные Pods, обычно через API-вызовы (например, kubectl debug).
* **Эфемерные контейнеры**, созданные через функцию отладки, не имеют гарантий ресурсов (CPU/память) или планирования (то есть они не блокируют запуск Pod и не получают собственный класс QoS) и не будут автоматически перезапускаться при выходе. Поэтому избегайте запуска в них постоянных бизнес-приложений; они предназначены исключительно для отладки.
* Будьте осторожны при использовании функции отладки, если узел (Node), на котором находится Pod, испытывает высокую загрузку ресурсов или близок к исчерпанию ресурсов. Внедрение эфемерного контейнера, даже с минимальным потреблением ресурсов, может способствовать эвакуации Pod при сильном давлении на ресурсы.
:::
Отладка эфемерных контейнеров с помощью CLI
В 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.
INFOПосле инициализации функции Debug, пока Pod не будет пересоздан, вы можете напрямую войти в эфемерный контейнер (например, Container A-debug) для отладки.
-
Дождитесь готовности окна терминала отладки и начните операции отладки.
Подсказка: нажмите опцию «Command Query» в правом верхнем углу терминала, чтобы увидеть список распространённых инструментов отладки и примеры их использования.INFOНажмите «Command Query» в правом верхнем углу, чтобы просмотреть распространённые инструменты и их использование.
-
По завершении отладки закройте окно терминала.
Взаимодействие с контейнерами
Вы можете напрямую взаимодействовать с внутренним экземпляром запущенного контейнера с помощью команды kubectl exec, что позволяет выполнять произвольные операции в командной строке. Кроме того, Kubernetes предоставляет удобные возможности для загрузки и скачивания файлов из контейнеров и в контейнеры.
Взаимодействие с контейнерами через CLI
Exec
Для выполнения команды внутри конкретного контейнера в Pod (полезно для получения shell, запуска диагностических команд и т.д.):
-
Пример: Получение Bash shell в
nginxизmy-nginx-pod -
Пример: Просмотр файлов в
/tmpконтейнера
Передача файлов
-
Чтобы скопировать файлы с локальной машины в контейнер внутри Pod:
-
Чтобы скопировать файлы из контейнера внутри Pod на локальную машину:
Взаимодействие с контейнерами через веб-консоль
Вход в контейнер через Applications
Вы можете войти во внутренний экземпляр контейнера с помощью команды kubectl exec, что позволяет выполнять операции в командной строке в окне веб-консоли. Также можно легко загружать и скачивать файлы внутри контейнера с помощью функции передачи файлов.
-
Перейдите в Container Platform, затем в левом меню выберите Application > Applications.
-
Нажмите на Application Name.
-
Найдите связанный workload (например, Deployment, StatefulSet), нажмите EXEC, затем выберите конкретный Pod Name, в который хотите войти. EXEC > Container Name.
-
Введите команду, которую хотите выполнить.
-
Нажмите OK для входа в окно веб-консоли и выполнения командной строки.
-
Нажмите File Transfer.
- Введите Upload Path для загрузки локальных файлов в контейнер (например, конфигурационные файлы для тестирования).
- Введите Download Path для скачивания логов, диагностических данных или других файлов из контейнера на локальную машину для анализа.
Вход в контейнер через Pod
-
Перейдите в Container Platform, затем в левом меню выберите Workloads > Pods.
-
Найдите нужный Pod, нажмите вертикальное многоточие (⋮) рядом с ним, выберите EXEC, затем выберите конкретный Container Name внутри этого Pod, в который хотите войти.
-
Введите команду, которую хотите выполнить.
-
Нажмите OK для входа в окно веб-консоли и выполнения командной строки.
-
Нажмите File Transfer.
- Введите Upload Path для загрузки локальных файлов в контейнер (например, конфигурационные файлы для тестирования).
- Введите Download Path для скачивания логов, диагностических данных или других файлов из контейнера на локальную машину для анализа.