Рубрики
Uncategorized

Как мы анализируем и визуализируем события Kubernetes в режиме реального времени на Rockset

Автор Rui Aguiar Kubernetes на Rockset На Rockset мы используем Kubernetes (K8s) для Clus … Tagged с DevOps, Kubernetes.

Автор Руи Агиар

Kubernetes в Rockset

На Rockset мы используем Kubernetes (K8s) для кластерной оркестровки. Он управляет всеми нашими производственными микросервисами-от наших работников Ingest до нашего уровня, проведенного по запросу. В дополнение к размещению всей производственной инфраструктуры, каждый инженер имеет свое собственное пространство имен Kubernetes и выделенные ресурсы, которые мы используем для локального развертывания и тестирования новых версий кода и конфигурации. Эта среда из песочницы для разработки позволяет нам с уверенностью делать программные выбросы несколько раз в неделю. В этом сообщении мы рассмотрим инструмент, который мы создали внутренне, который дает нам видимость в событиях Kubernetes, отличный источник информации о состоянии системы, который мы находим полезным для устранения неполадок в системе и понимании ее долгосрочного здоровья.

Почему мы заботимся о событиях Kubernetes

Kubernetes испускает события, когда некоторые изменения происходят в любом из ресурсов, которыми он управляет. Эти события часто содержат важные метаданные о сущности, которая его вызвала, тип события ( нормальный , Предупреждение , Ошибка и т. д.) и причины. Эти данные обычно хранятся в ETCD и предоставляются при запуске определенного kubectl команды

Эти события помогают понять, что произошло за кулисами, когда конкретная сущность вошла в конкретное состояние. Еще одно место, где можно увидеть агрегированный список всех событий, — это получить доступ ко всем событиям через Kubectl Get события Анкет

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

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

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

Обзор

Чтобы пригласить события Kubernetes, мы используем инструмент с открытым исходным кодом от HEPTIO называется EventRouter Анкет Он считывает события с сервера API Kubernetes и направляет их на указанную раковину. Раковина может быть чем угодно, от Amazon S3 до произвольной конечной точки HTTP. Чтобы подключиться к коллекции RockSet, мы решили построить разъем RockSet для EventRouter для управления форматом данных, загруженных в нашу коллекцию. Мы внесли это Rockset раковина в проект EventRouter EventRouter. Этот разъем действительно прост — он принимает все полученные события и издает их в Rockset. Действительно классная часть заключается в том, что для приема этих событий, которые являются полезными нагрузками JSON, которые различаются в разных типах сущностей, нам не нужно строить какую -либо схему или делать структурные преобразования. Мы можем издать событие JSON As-It в коллекцию RockSet и запросить его так, как будто это был полный таблица SQL. RockSet автоматически преобразует события JSON в таблицы SQL, сначала индексируя все поля JSON, используя Конвергентная индексация а затем автоматически схематизирует их через Умные схемы Анкет

Переднее применение представляет собой тонкий слой по уровню SQL, который позволяет фильтрации событий по пространству имен и типу объекта (POD, развертывание и т. Д.), А затем в этих типах объектов, событиях кластеров по нормальным/ошибкам. Цель состоит в том, чтобы иметь гистограмму этих событий, чтобы визуально осмотреть и понять состояние кластера в течение длительного периода времени. Конечно, мы демонстрируем, что это просто подмножество того, что можно было бы построить — можно представить себе гораздо более сложный анализ — например, анализ стабильности сети, процессы развертывания, натягивающие программные выпуска и даже использование хранилища событий в качестве ключевого диагностического инструмента для обнаружения корреляций между Уличивания на уровне кластера и изменения на уровне Kubernetes.

Настраивать

Прежде чем мы сможем начать получать события от EventRouter в RockSet, мы должны создать коллекцию в RockSet. Это коллекция, в которой хранятся все события EventRouter. Вы можете сделать это с бесплатной учетной записью от https://console.rockset.com/create Анкет

Сбор в Rockset может приглашать данные из указанного источника или может быть отправлена события через API REST. Мы будем использовать последнее, поэтому мы создаем коллекцию, поддерживаемую этим API записи. В консоли Rockset мы можем создать такую коллекцию, выбрав «API записи», как источник данных.

При создании коллекции мы можем выбрать удержание, скажем, 120 дней или любого разумного количества времени, чтобы дать нам некоторое чувство здоровья кластера. Это удержание применяется на основе специального поля в скалах, _ Event_time Анкет Мы сопоставляем это поле с определенным полем в рамках полезной нагрузки событий JSON, которое мы получим от EventRouter под названием Event.lasttimestamp Анкет Функция преобразования выглядит следующим образом:

После создания коллекции мы теперь можем настроить и использовать EventRouter, чтобы начать получать события Kubernetes.

Теперь, получение событий от EventRouter требует еще одной вещи — ключа RockSet API. Мы можем использовать клавиши API в Rockset, чтобы написать JSON в коллекцию и задавать вопросы. В этом случае мы создаем ключ API под названием EventRouter_Write из Manage> API -клавиш.

Скопируйте ключ API, так как нам потребуется его на нашем следующем шаге настройке EventRouter для отправки событий в коллекцию RockSet, которую мы только что настроили. Вы можете настроить EventRouter, клонируя Репозиторий событий и отредактировать файл YAML yaml/deployment.yaml выглядеть как следующее:

Вы можете заменить С помощью ключа RockSet API мы только что создали на предыдущем шаге. Теперь мы готовы! Запустить Kubectl Apply -f Yaml/Deployment.yaml и EventRouter может сразу же начать смотреть и пересылать события. Глядя на коллекцию в Rockset, вы должны начать видеть события, текущие и доступные в виде таблицы SQL. Мы можем запросить его, как показано ниже из консоли RockSet, и получить представление о некоторых событиях. Мы можем запустить полный SQL, включая все типы фильтров, соединений и т. Д.

Запрос данных

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

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

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

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

Этот запрос дает нам время, когда статус узла не стал нежелательным, и мы можем попытаться скрепить эти данные, используя функции SQL Time, чтобы понять, как часто возникают проблемы в течение конкретных ведер времени.

Мы можем дополнительно искать события POD и уровня контейнеров, например, когда они получают Oomkilld и соотносит это с другими событиями, происходящими в системе. По сравнению с базой данных временных рядов, такой как Prometheus, сила SQL позволяет нам писать и присоединиться к различным типам событий, чтобы попытаться собрать вместе разные вещи, которые происходили в определенном интервале времени, что может быть причинно.

Для визуализации событий мы создали простой инструмент, который использует React, который мы используем внутренне для просмотра, и выполняем некоторую базовую кластеризацию событий и ошибок Kubernetes. Мы выпускаем это Панель инструментов в открытый исходный код и хотел бы посмотреть, для чего сообщество может использовать это. Есть два основных аспекта визуализации событий Kubernetes. Во-первых, обзор кластера высокого уровня при гранулярности для каждого ресурса. Это позволяет нам увидеть поток событий в реальном времени из наших развертываний и стручков и видеть, каким штатом является каждый отдельный ресурс в нашей системе Kubernetes. Существует также возможность фильтровать по пространству имен — поскольку некоторые наборы услуг, работающих в их собственном пространстве имен, позволяют нам сверлить в определенное пространство имен, чтобы посмотреть на события.

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

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

Вывод

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

Возможность доступа к историческим журналам событий Kubernetes в Fine Granularity — это мощная абстракция, которая обеспечивает нам на Rockset лучшее понимание состояния нашей системы Kubernetes, чем kubectl в одиночку позволит нам. Этот уникальный источник данных и визуализация позволяет нам контролировать наши развертывания и ресурсы, а также рассматривать проблемы с исторической точки зрения. Мы хотели бы, чтобы вы попробовали это и внесли свой вклад в это, если вы найдете это полезным в собственных средах!

Ссылка: https://github.com/rockset/recipes/tree/master/k8s-event-vicualization

Оригинал: «https://dev.to/rocksetcloud/how-we-analyze-and-visualize-kubernetes-events-in-real-time-at-rockset-2idg»