Kubectl и логирование Pod'ов в Kubernetes - Академия Selectel

Kubectl и логи в Kubernetes

Илья Гайворонский
Илья Гайворонский Ведущий специалист клиентской поддержки
18 февраля 2025

Разберемся, что такое логи в Kubernetes, зачем они нужны, как с ними работать, а также научимся пользоваться инструментом Kubectl.

Изображение записи

Что такое логи и зачем они нужны

Логи (журналы событий) — это записи, которые фиксируют события, происходящие в системе, приложении или на сервере. Они могут включать информацию о состоянии системы, ошибках, предупреждениях, запросах и ответах, а также другую диагностическую информацию. Практически каждое приложение и операционная система создают лог-файлы для ведения истории своих операций.

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

Во-вторых, логи помогают в мониторинге производительности системы. Они позволяют администраторам оценивать доступность системы, обнаруживать аномалии и следить за тем, чтобы приложения работали без сбоев.

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

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

Схема работы логирования.
Схема работы логирования.

Логирование в Kubernetes — это процесс сбора, хранения и анализа логов, генерируемых как самим кластером, так и приложениями, работающими в контейнерах. Кстати, в Kubernetes логи обычно как раз и создаются приложениями, которые записывают информацию в стандартный вывод (stdout) контейнера. Это позволяет Kubernetes автоматически захватывать логи для анализа и мониторинга.

Основной механизм работы логирования в Kubernetes заключается в том, что каждый под, содержащий контейнеры, может генерировать логи. А их потом можно получить с помощью команды <kubectl logs>. Однако Kubernetes — штука динамическая, поды там постоянно создаются и уничтожаются, поэтому важно иметь эффективный механизм сбора и хранения логов. Эту проблему решают агенты логирования. Они работают в качестве демонов, которые собирают логи и отправляют их в централизованное хранилище.

Такой подход позволяет избежать потери данных, поскольку собранные логи будут храниться и после уничтожения контейнера или пода. Их можно агрегировать и обрабатывать различными инструментами, например Elasticsearch, Fluentd, Kibana. Они умеют хранить и визуализировать логи, что значительно упрощает мониторинг и диагностику.

Как посмотреть логи Kubernetes

Сперва нужно выяснить, в каком поде работает ваш контейнер. Чтобы вывести список всех подов в текущем пространстве имен, выполните команду:

kubectl get pods

Если вы хотите просмотреть поды в другом пространстве имен, добавьте флаг -n:

kubectl get pods -n <имя_пространства_имен>

Чтобы просмотреть логи конкретного пода, укажите его имя в команде:

kubectl logs <имя_пода>

Если в поде несколько контейнеров, укажите имя контейнера с помощью флага -c:

kubectl logs <имя_пода> -c <имя_контейнера>

Если контейнер перезапускался и вы хотите увидеть логи предыдущей версии, используйте флаг —previous:

kubectl logs <имя_пода> --previous

За логами можно следить и в реальном времени, чтобы видеть новые записи по мере их появления. Чтобы сделать это, добавьте в команду флаг -f (follow):

kubectl logs -f <имя_пода>

Если вам нужно отфильтровать логи по времени или другим критериям, вы можете использовать команды Unix, такие как grep, для обработки вывода:

kubectl logs <имя_пода> | grep "ошибка"

Чтобы просмотреть логи системных компонентов Kubernetes (например, kubelet или kube-apiserver), используйте команду ниже. Замените в ней <имя_пода_системного_компонента> на имя соответствующего пода.

kubectl logs -n kube-system <имя_пода_системного_компонента>

Что такое Kubectl

Kubectl —  это инструмент командной строки для управления кластерами Kubernetes. Он позволяет пользователям взаимодействовать с контрольной плоскостью K8s с помощью API-запросов по протоколам http или https.

С помощью Kubectl можно получить детальную информацию о конкретных ресурсах. Для этого можно использовать команды (например, kubectl describe) или изучить структуру различных ресурсов с помощью kubectl explain. Он также поддерживает множество флагов и опций, которые позволяют настраивать поведение команд, например, добавление заголовков к логам или управление выводом информации. Это делает Kubectl удобным инструментом для администраторов и разработчиков, работающих с Kubernetes, позволяя им эффективно управлять своими приложениями и инфраструктурой.

Схема работы Kubectl.
Схема работы Kubectl.

Команды Kubectl

Вот список из 10 основных команд Kubectl вместе с описанием их функциональности:

  • kubectl get — команда для получения информации о ресурсах в кластере. Например, kubectl get pods выводит список подов в текущем пространстве имен.
  • kubectl describe — позволяет получить детальную информацию о конкретном ресурсе. Например, kubectl describe pod <имя-пода> покажет подробности о поде, включая его состояние и события.
  • kubectl create — используется для создания новых ресурсов в кластере. Например, kubectl create deployment <имя-деплоймента> —image=<имя-образа> создаст развертывание с указанным образом.
  • kubectl apply — применяет изменения к ресурсам, описанным в файле конфигурации. Например, kubectl apply -f <файл.yaml> обновит или создаст ресурсы на основе описания в YAML-файле.
  • kubectl delete — удаляет ресурсы из кластера. Например, kubectl delete pod <имя-пода> удаляет указанный под.
  • kubectl logs — позволяет просматривать логи конкретного пода. Например, kubectl logs <имя-пода> выведет логи из контейнера внутри пода.
  • kubectl exec — позволяет выполнять команды внутри запущенного контейнера. Например, kubectl exec -it <имя-пода> — /bin/bash откроет интерактивный терминал в контейнере.
  • kubectl scale — используется для изменения количества реплик в развертывании или другом ресурсе. Например, kubectl scale deployment <имя-деплоймента> —replicas=3 изменит количество реплик до трех.
  • kubectl apply — применяет к ресурсам изменения, основанные на файлах YAML или JSON. Например, kubectl apply -f <файл.yaml> обновит ресурсы в кластере в соответствии с описанием в файле.
  • kubectl get nodes — выводит информацию о всех узлах в кластере, включая их состояние и ресурсы. Это полезно для мониторинга состояния инфраструктуры кластера.

Эти команды являются основными инструментами для работы с Kubernetes и позволяют эффективно управлять ресурсами в кластере. Более подробную информацию о командах можно посмотреть на сайте Kubernetes.

Чем может помочь Selectel

Selectel предоставляет комплексное решение для работы с Kubernetes. Мы возьмем на себя все задачи, включая настройку и запуск оркестратора, управление инфраструктурой, обеспечение безопасности, интеграцию с другими облачными сервисами и т. д.

Управляемый Kubernetes (Managed Kubernetes). Selectel предлагает услугу управляемого Kubernetes, которая позволяет пользователям сосредоточиться на разработке и развертывании приложений, не заботясь о настройке и управлении инфраструктурой кластера. Это включает автоматическое масштабирование, обновление и мониторинг кластера.

  • Инфраструктура как услуга (IaaS). Selectel предоставляет инфраструктуру, на которой можно развернуть Kubernetes. Это позволяет пользователям выбирать оптимальные конфигурации серверов, сети и хранения данных для их приложений. Пользователи могут легко развертывать свои кластеры на мощных физических или виртуальных серверах.
  • Сетевые решения. Selectel предлагает различные сетевые решения, включая балансировщик нагрузки и защиту от DDoS-атак. Эти решения помогают обеспечить безопасность и высокую доступность приложений, работающих в Kubernetes.
  • Хранилище данных. Selectel предоставляет решения для хранения данных, которые могут быть интегрированы с Kubernetes. Это включает в себя блочные и объектные хранилища, которые позволяют приложениям эффективно управлять данными и обеспечивать высокую производительность.

Поддержка. Selectel предоставляет техническую поддержку и консультационные услуги по внедрению и оптимизации Kubernetes. Это может быть особенно полезно для компаний, которые только начинают работать с этой технологией или нуждаются в помощи с конкретными задачами.