Диагностика проблем с запущенными рабочими нагрузками Kubernetes может быть непростой задачей.
Вам может повезти, и вы найдете причину в логах приложения с помощью команды kubectl logs.
Однако в некоторых случаях не обойтись без живого сеанса отладки, когда вы интерактивно взаимодействуете с вашими подами для выявления проблем.
Команда kubectl debug упрощает эти задачи отладки, предоставляя новый эфемерный контейнер внутри вашего пода.
Он может быть использован для проверки окружения пода, чтобы вы могли начать устранение проблем, возникающих в существующих контейнерах.
Подготовка к использованию Kubectl Debug
kubectl debug был запущен в версии v1.18 Kubernetes и Kubectl
Он зависит от наличия эфемерных контейнеров в вашем кластере.
Эфемерные контейнеры стали бета-функцией в Kubernetes v1.23 и теперь включены по умолчанию.
Вам нужно будет вручную включить функцию gate, если в вашем кластере используется более старая версия Kubernetes.
Эфемерные контейнеры предназначены для транзитных задач, когда вам нужно временно подключить дополнительный контейнер к существующему поду.
Это идеально подходит для отладочных операций, когда вы хотите проверить поды, не затрагивая живые экземпляры контейнеров.
Использование Kubectl Debug
Прежде чем продолжить, разверните деплоймент для использования в целях тестирования:
Затем используйте команду get pods, чтобы найти имя пода:
Под нашего развертывания называется nginx-55649fd747-qsnr2.
Теперь вы можете использовать команду kubectl debug для запуска сеанса отладки внутри вашего Pod:
Синтаксис команды похож на гибрид kubectl create и kubectl log.
Аргумент –image указывает образ, который будет использоваться для нового контейнера.
Мы используем здесь ubuntu:20.04, чтобы получить доступ к знакомым командам, входящим в дистрибутив Ubuntu Linux.
Флаг -it эквивалентен –stdin –tty.
Включение этих аргументов выделит TTY для контейнера, подключится к нему и подключит поток stdin вашего терминала. Таким образом, вы получите интерактивную оболочку внутри вашего нового контейнера.
Теперь вы можете выполнять задачи по отладке внутри вашего эфемерного контейнера.
Копирование подов
Другой способ использования kubectl debug – это аргумент –copy-to.
При этом создается копия целевого пода добавляется эфемерный контейнер в копию.
Оригинальный под остается нетронутым.
Эта функция дает вам еще большую уверенность в том, что изменения, внесенные во время отладки, не повлияют непосредственно на ваше производственное приложение.
Копирование пода также позволяет активировать совместное использование пространства имен процессов.
Это делает существующие процессы в пода видимыми для вашего эфемерного контейнера.
Это нельзя использовать с существующими контейнерами, так как их поле spec.shareProcessNamespace обычно имеет значение false.
Запуск kubectl debug с флагами –copy-to и –share-processes включит совместное использование процессов на копируемом пода, что делает эту процедуру гораздо более интуитивной:
Этот процесс все еще выполняется в отдельном контейнере NGINX внутри вашего пода.
Совместное использование пространства имен также обеспечивает доступ к файловой системе целевого контейнера через /proc:
Поэтому копирование пода таким образом является мощным инструментом отладки.
Вы можете легко проверить файлы и процессы пода, используя отдельный контейнер, подготовленный с помощью знакомых инструментов.
Необязательные аргументы
Флаг –copy-to по умолчанию всегда оставляет исходный под нетронутым.
Вы можете заставить операцию действовать как замена вместо этого, используя –replace.
Это остановит первый под.
Наконец, помните, что контейнеры, созданные с помощью kubectl debug, не обязательно должны быть интерактивными.
Вы можете легко выполнять одноразовые команды для своих контейнеров, используя синтаксис, подобный kubectl exec.
Аргумент –attach поддерживается для управления тем, подключена ли ваша оболочка к контейнеру, когда вы не выполняете команду -i (–stdin).
Заключение
Эфемерные контейнеры и команда отладки kubectl обеспечивают упрощенную отладку рабочих нагрузок Kubernetes.
Вы можете запускать команды внутри пода, используя образ, отличный от образа ваших обычных контейнеров.
Это позволяет получить доступ к инструментам отладки, которые не включены в образ вашего приложения.
kubectl debug также может создавать копии Pods и делиться их процессами с оригиналом.
Этот механизм позволяет вам проверять процессы в контейнерах целевого пода из отдельного эфемерного контейнера, над которым у вас есть полный контроль.
Он предоставляет более продвинутые возможности отладки, когда вам нужно исследовать запущенные процессы.
- ☸️ Как выполнять команды внутри контейнеров и подов Kubernetes
- ☸️ Как мониторить логи Kubernetes подов в режиме реального времени с помощью Stern
- ☸️ Выполняем проверку безопасности манифестов Kubernetes и чартов Helm с помощью Datree
- ☸️ Перехват трафика контейнеров в Kubernetes
- ☸️ Как установить и настроить OWASP ZAP в Kubernetes или Docker
- ☸️ Внедрили Kubernetes? Попробуйте эти 5 инструментов для аудита прав Rbac
- ☸️ Ломаем и чиним Kubernetes