Поделиться через


Сбор сведений о системе в режиме реального времени из кластера AKS

В этой статье описывается процесс сбора аналитических сведений системы в режиме реального времени из кластера Microsoft Служба Azure Kubernetes (AKS) с помощью Inspektor Gadget. В этой статье содержатся пошаговые инструкции по установке этого средства в среде AKS. В нем также рассматриваются практические примеры, показывающие, как Inspektor Gadget помогает собирать ценные сведения для эффективной отладки реальных проблем.

Демонстрация

Для начала рассмотрим следующую быструю демонстрацию. Предположим, что необходимо выяснить, почему запросы DNS из приложения завершаются сбоем. С помощью Inspektor Gadget можно записать DNS-трафик в пространстве имен Kubernetes, в котором работает ваше приложение:

kubectl gadget trace dns --namespace my-ns --output columns=+nameserver
K8S.NODE                           K8S.NAMESPACE  K8S.POD  PID      TID      COMM      QR  TYPE      QTYPE  NAME             RCODE NUMANSWERS NAMESERVER
aks-agentpool-97833681-vmss000001  my-ns          my-app   1349264  1349264  nslookup  Q   OUTGOING  A      www.example.com.       0          1.2.3.4
aks-agentpool-97833681-vmss000001  my-ns          my-app   1349264  1349264  nslookup  Q   OUTGOING  AAAA   www.example.com.       0          1.2.3.4
aks-agentpool-97833681-vmss000001  my-ns          my-app   1349264  1349264  nslookup  Q   OUTGOING  A      www.example.com.       0          1.2.3.4
aks-agentpool-97833681-vmss000001  my-ns          my-app   1349264  1349264  nslookup  Q   OUTGOING  AAAA   www.example.com.       0          1.2.3.4

Из этой информации можно увидеть, что DNS-запросы направляются на DNS-сервер по IP-адресу 1.2.3.4, но сервер никогда не отвечает.

Теперь предположим, что 1.2.3.4 это не конфигурация сервера имен по умолчанию, и вы подозреваете, что подозрительный процесс изменяет конфигурацию во время выполнения. В таких случаях Inspektor Gadget выходит за рамки DNS диагностика. Кроме того, он позволяет отслеживать процессы, которые обращаются к критически важным файлам (например, /etc/resolv.conf) и намерены изменять эти файлы. Чтобы использовать эту функцию мониторинга, отфильтруйте флаги в выходных данных, чтобы отобразить любой из режимов доступа к файлам (O_WRONLY чтобы открыть только запись или O_RDWR открыть для чтения и записи):

kubectl gadget trace open --namespace my-ns \
    --filter path:/etc/resolv.conf,flags:'~(O_WRONLY|O_RDWR)' \
    --output columns=+flags
K8S.NODE                           K8S.NAMESPACE  K8S.POD  K8S.CONTAINER  PID      COMM  FD  ERR  PATH              FLAGS
aks-agentpool-97833681-vmss000001  my-ns          my-app   my-app         1365052  vi    3   0    /etc/resolv.conf  O_WRONLY|O_CREAT

Что такое Inspektor Gadget?

Inspektor Gadget — это платформа, предназначенная для создания, упаковки, развертывания и запуска средств, предназначенных для отладки и проверки систем Linux и Kubernetes. Эти средства ("гаджеты") реализуются в виде программ eBPF . Их основная цель — собрать низкоуровневые данные ядра для предоставления аналитических сведений о конкретных системных сценариях. Платформа Inspektor Gadget управляет связью собранных данных с помощью высокоуровневых ссылок, таких как ресурсы Kubernetes. Эта интеграция гарантирует, что простое подключение между низкоуровневой аналитикой и соответствующим контекстом высокого уровня. Интеграция упрощает процесс устранения неполадок и сбор соответствующих сведений.

Гаджеты

Inspektor Gadget предоставляет набор встроенных средств, предназначенных для отладки и наблюдения за распространенными ситуациями в системе. Например, с помощью таких гаджетов можно отслеживать следующие события в кластере:

  • Создание процесса
  • Доступ к файлам
  • Сетевое действие, например TCP-подключения или разрешение DNS

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

И это лишь несколько примеров. Официальная документация содержит подробные описания и примеры каждого гаджета, чтобы определить наиболее подходящий гаджет для конкретного варианта использования. Однако если вы найдете вариант использования, который существующие гаджеты в настоящее время не охватываются, Inspektor Device позволяет запускать собственные программы eBPF с помощью команды выполнения. Так как платформа Inspektor Gadget обрабатывает сборку, упаковку и развертывание пользовательских программ, это упрощает процесс для ваших уникальных требований. Кроме того, он собирает высокоуровневые метаданные для обогащения собранных данных в программе.

Случаи использования

Чтобы дополнить демонстрацию, представленную в начале этой статьи, мы скомпилировали список проблем и практических сценариев, которые показывают, как Inspektor Gadget помогает решать задачи отладки. В следующих примерах демонстрируется потенциал Inspektor Gadget. Но возможности этого инструмента выходят за рамки этих сценариев. Это делает Inspektor Гаджет бесценным ресурсом для навигации по сложностям отладки и наблюдаемости Kubernetes.

Проблемная область Симптомы Устранение неполадок
Приложения с большим объемом дисков Высокая загрузка памяти или загрузка ЦП или несогласованная готовность к узлу Приложение может последовательно участвовать в операциях чтения и записи диска, таких как обширное ведение журнала. С помощью Inspektor Gadget можно определить в режиме реального времени, в котором контейнеры создают больше блокировок ввода-вывода. Кроме того, можно найти контейнер, который приводит к большему чтению и записи в файл.
"Это всегда DNS" Высокая задержка приложений, время ожидания или плохое взаимодействие с конечным пользователем

С помощью Inspektor Gadget можно отслеживать все запросы и ответы DNS в кластере. В частности, Inspektor Gadget предоставляет следующие сведения, которые помогают определить, влияет ли DNS на производительность приложения:

  • Успешное выполнение запроса
  • Содержит ли ответ ошибку
  • Сервер имен, используемый для поиска
  • Задержка ответа запроса
Доступ к файловой системе Неправильное поведение приложения или не может работать правильно

Приложению может быть не удается получить доступ к определенным конфигурациям, журналам или другим важным файлам в файловой системе. В таких сценариях Inspektor Gadget позволяет отслеживать все открытые файлы внутри модулей pod для диагностики проблем с доступом. Каждый раз, когда приложение пытается открыть файл, вы можете обнаружить следующие сведения:

  • Флаги, используемые для открытия файла (например, O_RDONLY, O_WRONLY, O_RDWR и т. д.)
  • Успешно ли выполнена попытка открытия файла
  • Возвращенная ошибка (если попытка открытия файла завершается ошибкой)

Например, если попытка открыть файл завершается ошибкой 2 (ENOENT), приложение, вероятно, пытается открыть файл, который не существует. Это означает, что у вас может быть опечатка в коде или файл доступен в другом пути.

Удаленное выполнение кода (RCE) Неавторизованное выполнение кода, например шифрование, которое очевидно при высокой загрузке ЦП во время простоя приложения Когда злоумышленники пытаются сделать такую атаку на систему, они обычно должны запускать код с помощью bash. Inspektor Gadget позволяет отслеживать создание новых процессов, особенно процессов, которые включают критически важные команды, такие как bash.

Установка Inspektor Gadget в кластере AKS

Развертывание гаджета Inspektor с одним щелчком мыши

Выбрав следующую кнопку, кластер AKS будет автоматически создан, и Inspektor Gadget будет развернут в кластере. После завершения развертывания вы можете изучить все функции Inspektor Gadget в предоставленной среде оболочки.

Развертывание Inspektor Gadget в кластере AKS

Установите Inspektor Gadget, запустив подключаемый модуль kubectl

В этом разделе описаны шаги по установке Inspektor Gadget в кластере AKS, выполнив подключаемый kubectl gadget модуль. Установка состоит из двух частей:

  • Установка подключаемого kubectl gadget модуля на компьютере

  • kubectl gadget Запуск подключаемого модуля для установки Inspektor Gadget в кластере

    Предупреждение

    Многие механизмы доступны для развертывания и использования Inspektor Gadget. Каждый из этих механизмов предназначен для конкретных вариантов использования и требований. Подключаемый модуль гаджета kubectl можно использовать для применения нескольких из этих механизмов, но не всех из них. Например, развертывание Inspektor Gadget с помощью kubectl gadget подключаемого модуля зависит от доступности сервера API Kubernetes. Если вы не можете зависеть от такого компонента, так как его доступность может быть иногда скомпрометирована, рекомендуется избежать использования kubectl gadgetмеханизма развертывания. Дополнительные сведения об этом и других вариантах использования см. в документации по Inspektor Gadget.

Предварительные требования

Часть 1. Установка подключаемых модулей kubectl на компьютере

Рекомендуется установить krew подключаемый kubectl gadget модуль.

Примечание.

Чтобы установить определенный выпуск или скомпилировать его из источника, см . раздел "Установка гаджета kubectl" на GitHub.

kubectl krew install gadget

Теперь проверьте установку version , выполнив команду:

kubectl gadget version

Команда version показывает версию клиента (kubectl gadget подключаемый модуль), но также сообщает, что она еще не установлена на сервере (кластер):

Client version: vX.Y.Z
Server version: not installed

Часть 2. Установка гаджета Inspektor в кластере

Следующая команда развертывает контроллер DaemonSet .

Примечание.

Для настройки развертывания доступны несколько вариантов, как показано в следующем списке:

  • Использование определенного образа контейнера
  • Развертывание на определенных узлах
  • Развертывание в пользовательском пространстве имен

Дополнительные сведения об этих параметрах см . в разделе "Установка" в разделе кластера официальной документации.

kubectl gadget deploy

Проверьте установку version , выполнив команду еще раз:

kubectl gadget version

На этот раз клиент и сервер отображаются правильно установленными:

Client version: vX.Y.Z
Server version: vX.Y.Z

Заявление об отказе от ответственности за сведения о продуктах сторонних производителей

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

Заявление об отказе от ответственности за контактные данные сторонней организации

Корпорация Майкрософт предоставляет контактные данные сторонних производителей в целях получения дополнительных сведений по данной теме. Эти данные могут быть изменены без предварительного уведомления. Корпорация Майкрософт не гарантирует точность контактных данных сторонних производителей.

Свяжитесь с нами для получения помощи

Если у вас есть вопросы или вам нужна помощь, создайте запрос в службу поддержки или обратитесь за поддержкой сообщества Azure. Вы также можете отправить отзыв о продукте в сообщество отзывов Azure.