Поиск по сайту:

Как просматривать журналы пода Kubernetes с помощью Kubectl


Просмотр журналов Pod часто является первым шагом в диагностике проблемы с рабочими нагрузками вашего кластера. Вот как можно использовать Kubectl для прямой трансляции журналов на ваш терминал, позволяя вам проверять вывод вашего приложения.

Начиная

Убедитесь, что у вас установлен Kubectl и подключен к вашему кластеру. Вы можете указать файл Kubeconfig, установив переменную среды KUBECONFIG в вашей оболочке:

export KUBECONFIG=~/.kube/my-cluster.yaml

Затем используйте Kubectl, чтобы вывести список ваших модулей:

kubectl get pods

Не забудьте добавить флаг --namespace, если ваши поды находятся за пределами пространства имен по умолчанию:

kubectl --namespace my-namespace get pods

Добавление временного псевдонима в вашу оболочку — хороший способ сократить этот шаг, помогая вам запускать несколько команд в одном и том же пространстве имен:

alias k="kubectl --namespace my-namespace"

k get pods

Доступ к журналам модулей

Команда kubectl logs позволяет просматривать журналы, созданные именованным подом:

kubectl logs pod-name

Существующие журналы Pod будут отправлены на ваш терминал. Когда под формируется из более чем одного контейнера, вы также должны указать имя контейнера, который хотите проверить:

kubectl logs pod-name container-name

В качестве альтернативы установите флаг --all-containers, чтобы включить строки журнала, созданные любым из контейнеров в модуле. Помните, что вы можете увидеть многословный и повторяющийся вывод, когда этот флаг используется для занятого пода:

kubectl logs pod-name --all-containers

Вы также можете получить журналы из набора модулей с заданной меткой. Это позволяет объединять журналы из разных модулей при условии, что все они имеют одинаковую метку:

kubectl logs -l my-label=my-value --all-containers

Непрерывная потоковая передача журналов

Простая команда logs выдает сохраненные в данный момент журналы Pod, а затем завершает работу. Добавьте флаг -f (--follow) в команду, чтобы следить за журналами и транслировать их в реальном времени на свой терминал.

Kubectl будет выводить каждую новую строку журнала в ваш терминал, пока вы не остановите команду с помощью Ctrl+C. Это эквивалентно использованию tail -f с локальным файлом журнала в неконтейнерной среде.

Просмотр старых журналов

журналы kubectl не будут включать строки журнала, созданные старыми контейнерами, которые когда-то были членами Pod, но с тех пор были заменены. Доступ к этим журналам можно получить, добавив флаг -p (--previous).

Затем Kubectl покажет весь сохраненный журнал для пода, включая строки, которые были отправлены контейнерами, которые с тех пор были закрыты.

Получение последних журналов

Иногда вам не нужно видеть весь поток журнала. Kubectl поддерживает флаг --since, который отображает строки журнала, выданные через заданное время:

kubectl logs pod-name --since=2h

Эта команда покажет вывод журнала из pod-name, созданный за последние два часа. Другой вариант, --since-time, поддерживает строку отметки времени, соответствующую RFC3339, вместо показанного выше выражения относительного времени.

Флаг --tail — это еще один параметр для сжатия журналов. Это ограничивает количество отображаемых строк, избегая полного терминала, когда вам нужно увидеть только самый последний вывод:

# Shows the last 10 lines of the log
kubectl logs pod-name --tail=10

Kubectl по умолчанию не показывает временные метки строк, так как многие приложения уже включают их в свой журнал. Добавьте флаг --timestamps, чтобы Kubectl добавлял временные метки в начало строк, когда ваша рабочая нагрузка их не предоставляет.

Вы также можете добавить имена проверяемых модулей и контейнеров в строки журнала. Эта функция активируется флагом --prefix. Его можно комбинировать с --timestamps для отображения времени создания каждой строки и источника, из которого она возникла.

Доступ к журналам из других типов ресурсов

kubectl logs работает с ресурсами развертывания и заданий в дополнение к модулям:

kubectl logs job/my-job
kubectl logs deployment/my-deployment

Вы получите журналы из первого контейнера в рамках задания или развертывания. Используйте флаг --all-containers для отображения журналов, созданных любым из соответствующих контейнеров. Вы можете использовать все флаги, описанные выше, независимо от того, просматриваете ли вы модуль, развертывание или задание.

Более расширенное управление журналами

Kubectl не включает способ фильтрации, поиска или преобразования ваших журналов. Лучше всего для этой цели направлять вывод журналов kubectl в установленные инструменты терминала, такие как awk, grep или sed.

kubectl logs my-pod | grep search-expression

Точно так же используйте существующие функции перенаправления в вашей оболочке для сохранения журналов в файл:

kubectl logs my-pod > my-pod-logs.txt

Краткое содержание

Kubectl позволяет вам получать доступ к журналам из ваших ресурсов либо для каждого контейнера, либо в совокупности. Вы можете просматривать моментальный снимок текущих собранных журналов, постоянно передавать новые строки на свой терминал и получать доступ к историческим строкам, созданным завершенными контейнерами.

Команда поставляется с некоторыми ограниченными параметрами настройки, включая ограничитель количества строк и упрощенную фильтрацию даты. Если требуется более сложный синтаксический анализ, направьте вывод в команды терминала Unix, чтобы быстро проанализировать журналы и найти причины ошибок в приложениях.

Kubectl собирает журналы из стандартного вывода и потоков ошибок ваших контейнеров. Важно убедиться, что вы правильно записываете вывод в эти потоки, так как неправильно настроенный контейнер приведет к пустому выводу при запуске журналов kubectl.