Сбор сведений о системе в режиме реального времени из кластера 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 для диагностики проблем с доступом. Каждый раз, когда приложение пытается открыть файл, вы можете обнаружить следующие сведения:
Например, если попытка открыть файл завершается ошибкой 2 (ENOENT), приложение, вероятно, пытается открыть файл, который не существует. Это означает, что у вас может быть опечатка в коде или файл доступен в другом пути. |
Удаленное выполнение кода (RCE) | Неавторизованное выполнение кода, например шифрование, которое очевидно при высокой загрузке ЦП во время простоя приложения | Когда злоумышленники пытаются сделать такую атаку на систему, они обычно должны запускать код с помощью bash . Inspektor Gadget позволяет отслеживать создание новых процессов, особенно процессов, которые включают критически важные команды, такие как bash . |
Установка Inspektor Gadget в кластере AKS
Развертывание гаджета Inspektor с одним щелчком мыши
Выбрав следующую кнопку, кластер AKS будет автоматически создан, и Inspektor Gadget будет развернут в кластере. После завершения развертывания вы можете изучить все функции Inspektor Gadget в предоставленной среде оболочки.
Установите 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.
Предварительные требования
Средство командной строки Kubernetes kubectl . Если у вас есть Azure CLI, можно запустить команду az aks install-cli , чтобы установить kubectl.
Кластер AKS. Если у вас нет кластера AKS, создайте его с помощью Azure CLI или с помощью портал Azure.
Диспетчер пакетов krew для подключаемых модулей в kubectl. Чтобы установить этот диспетчер пакетов, вы можете следовать краткому руководству по установке этого диспетчера пакетов.
Часть 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.