Введение
В этой лабораторной работе вы изучите основные способы взаимодействия с работающими Pod. Это важные навыки отладки в Kubernetes, поскольку рабочие нагрузки часто распределены и не видны напрямую, как локальные процессы.
Мы рассмотрим три эффективных навыка отладки:
- Журналы: чтение «дневника» приложения, чтобы понять, что оно сообщает.
- Exec: вход внутрь контейнера для осмотра файлов и выполнения команд.
- Перенаправление портов: создание временного туннеля для доступа к приложению с локального компьютера.
Эти навыки необходимы любому инженеру DevOps и разработчику. К концу лабораторной работы вы будете уверенно исследовать работающие Pod.
Просмотр журналов
На этом шаге вы научитесь просматривать журналы работающего Pod. Представляйте журналы как «голос» приложения. Если что-то пошло не так, именно журналы обычно становятся первым источником подсказок.
Внутри kubectl logs обычно читает данные, записанные главным процессом контейнера в стандартный вывод и стандартный поток ошибок. Поэтому многие приложения в контейнерах выводят журналы в терминал, а не записывают их в локальные файлы. В Kubernetes вывод терминала проще единообразно собирать и предоставлять платформе.
Среда в фоновом режиме запускает для вас Pod с именем my-nginx. Сначала дождитесь его создания:
until kubectl get pod my-nginx > /dev/null 2>&1; do sleep 2; done
Затем дождитесь готовности контейнера:
kubectl wait --for=condition=ready pod/my-nginx --timeout=300s
Теперь убедитесь, что Pod работает:
kubectl get pods
В выводе у my-nginx должен быть статус Running. Если Pod ещё не готов, подождите немного и выполните команду ещё раз.
После запуска Pod выполните команду kubectl logs, чтобы прочитать данные, которые контейнер вывел в стандартный вывод:
kubectl logs my-nginx
Поскольку Nginx — стабильный веб-сервер, сначала он может почти ничего не вывести или показать только сообщение о готовности принимать подключения.
Чтобы просматривать журналы в реальном времени, как прямую трансляцию, добавьте флаг -f (follow):
kubectl logs -f my-nginx
Курсор останется в ожидании новых сообщений. Это удобно для наблюдения за входящим трафиком. Нажмите Ctrl+C, чтобы остановить непрерывный просмотр журналов и вернуться к приглашению командной строки.
Вход в контейнер с помощью Exec
На этом шаге вы не только прочитаете журналы, но и выполните команды внутри Pod. Это может понадобиться, чтобы проверить наличие файла конфигурации, убедиться в установке инструмента или протестировать сетевое подключение изнутри Pod.
Для этого используется команда kubectl exec. Она позволяет выполнить команду внутри работающего контейнера. Чаще всего её применяют для открытия интерактивной оболочки — фактически для входа внутрь контейнера.
Важно понимать различие: kubectl exec не «перемещает» вас на другую машину, как это делает SSH. Команда просит kubelet на узле запустить новый процесс внутри уже работающего контейнера. Поэтому вы видите файловую систему и окружение контейнера, а не окружение локального терминала.
Выполните следующую команду, чтобы открыть оболочку bash внутри Pod my-nginx:
kubectl exec -it my-nginx -- /bin/bash
Разберём флаги:
-i(Interactive): оставляет ввод открытым, чтобы вы могли вводить команды.-t(TTY): выделяет псевдотерминал, поэтому оболочка выглядит как обычная командная строка.--: сообщает kubectl, что всё после этого разделителя — команда для контейнера, а не параметр kubectl.
Приглашение командной строки должно измениться примерно на root@my-nginx:/#. Теперь вы находитесь внутри конкретного контейнера в кластере Kubernetes.
Выведите список файлов в каталоге, чтобы убедиться, что вы работаете в новом окружении:
ls -F
Вы видите файлы внутри контейнера Nginx. Они полностью отделены от файлов рабочего пространства LabEx.
Исследование окружения
На этом шаге вы исследуете окружение внутри контейнера. Одна из распространённых задач при отладке — определить, какая операционная система (ОС) используется в контейнере. Это помогает понять, какие команды, например apt или apk, доступны.
Этот шаг также показывает важную особенность контейнеров: образ контейнера определяет доступные пользовательские инструменты и файлы. Два Pod могут работать под управлением «Linux», но при этом сильно различаться: один образ может быть основан на Debian, другой — на Alpine, а третий может почти не содержать инструментов оболочки.
Пока в приглашении отображается root@my-nginx:/#, выполните команду для чтения файла с информацией о выпуске ОС:
cat /etc/os-release
В выводе будет указано название дистрибутива Linux, скорее всего «Debian GNU/Linux». Это связано с тем, что официальный образ Nginx создан на основе Debian.
Закончив исследование, выйдите из контейнера и вернитесь в основной терминал. Введите:
exit
Приглашение снова станет таким: labex:~/project.
Чтобы подтвердить завершение исследования, создайте файл os_version.txt и запишите в него название найденной ОС, например «Debian»:
echo "Debian" > ~/project/os_version.txt
Перенаправление портов
На этом шаге вы получите доступ к Pod Nginx через перенаправление портов. По умолчанию Pod изолированы. Они похожи на дома в закрытом жилом комплексе: могут обмениваться данными друг с другом, но внешним пользователям, например вам из локального терминала, нелегко получить к ним доступ.
Чтобы открыть веб-сервер, работающий в my-nginx, с локального компьютера, создадим «секретный туннель» с помощью перенаправления портов.
Перенаправление портов удобно для отладки, но не является обычным способом публикации приложений в рабочей среде. Оно создаёт временный туннель от текущей рабочей станции к одному Pod. Это удобно для проверки и быстрых тестов: не нужно создавать полноценный Service или изменять внешнюю сетевую политику.
Выполните следующую команду, чтобы перенаправить локальный порт 8080 на порт Pod 80:
kubectl port-forward my-nginx 8080:80 &
Обратите внимание на & в конце команды! Этот символ указывает Linux запустить процесс в фоновом режиме. Без него команда заняла бы терминал, и вы не смогли бы вводить другие команды, пока не остановили бы этот процесс.
Вы должны увидеть сообщение Forwarding from 127.0.0.1:8080 -> 80.
Теперь получите доступ к веб-странице Nginx через этот туннель с помощью curl:
curl localhost:8080
В выводе должен появиться HTML-код страницы «Welcome to nginx!». Готово: вы получили доступ к кластеру и извлекли данные через туннель.
Итоги
В этой лабораторной работе вы освоили три основных навыка отладки приложений Kubernetes:
- Журналы: просмотр вывода приложения с помощью
kubectl logs. - Exec: вход в окружение контейнера с помощью
kubectl execдля просмотра файлов и выполнения команд. - Перенаправление портов: локальный доступ к внутренним сервисам с помощью
kubectl port-forward.
Эти инструменты можно сравнить со стетоскопом и рентгеновским аппаратом. При возникновении проблемы в Kubernetes именно к ним вы обратитесь в первую очередь для диагностики.


