Robusta, платформа для устранения неполадок K8 с открытым исходным кодом, введение

Что такое робуста

Robusta (https://home.robusta.dev/) — это платформа с открытым исходным кодом для устранения неполадок K8. Как и многие другие облачные приложения, оно устанавливается и управляется с помощью Helm3, находится на вершине стека мониторинга (Prometheus, Elasticsearch и т. д.) и сообщает вам, почему возникли предупреждения и как их исправить.

Робуста состоит из следующих пяти частей:

  • Механизм автоматизации для K8s
  • Встроенная автоматизация для обогащения и исправления распространенных предупреждений K8s
  • Ручной инструмент устранения неполадок
  • Пакет «все в одном» с Robusta, Prometheus Operator и стандартными оповещениями K8s.
  • Веб-интерфейс и панель управления

Ниже показано, как выглядит приборная панель Robusta:

Почему робуста

Robusta — это одновременно механизм автоматизации для Kubernetes и мультикластерная платформа наблюдения. Робуста обычно используется вместе с Prometheus, но поддерживаются и другие инструменты.

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

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

Сбои стручков:

Корреляция событий:

Устранение предупреждений:

Модули отладки:

Робуста Архитектура

Архитектура Робуста это:

Как видно из приведенной выше диаграммы, основным компонентом Robusta является механизм автоматизации, который работает в кластере в виде двух развертываний K8s.

робуста-форвардер

Он подключается к APIServer и отслеживает изменения K8s. Направляет их робусте-раннеру.

робуста-бегун

Он будет выполнять определенные пьесы.

Как работает робуста

Используя CrashingPods в качестве примера, поведение Робусты определяется следующими правилами:

triggers:
  - on_prometheus_alert:
      alert_name: KubePodCrashLooping
actions:
  - logs_enricher: {}
sinks:
  - slack

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

Как установить робусту

Поскольку Robusta управляется Helm, мы можем использовать helm3 для ее установки.

Установить репо

$ helm repo add robusta https://robusta-charts.storage.googleapis.com && helm repo update
"robusta" has been added to your repositories
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "kedacore" chart repository
...Successfully got an update from the "robusta" chart repository
...Successfully got an update from the "grafana" chart repository
...Successfully got an update from the "prometheus-community" chart repository
...Successfully got an update from the "stable" chart repository
Update Complete. ⎈Happy Helming!⎈

Создать файл конфигурации

Сначала мы устанавливаем его cli через Python:

$ python3.10 -m venv robusta
$ source robusta/bin/activate
(robusta) $ pip install -U robusta-cli --no-cache
Collecting robusta-cli
Downloading robusta_cli-0.10.10-py3-none-any.whl (223 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 223.8/223.8 kB 30.0 MB/s eta 0:00:00
Collecting pymsteams<0.2.0,>=0.1.16
  Downloading pymsteams-0.1.16.tar.gz (7.6 kB)
  Preparing metadata (setup.py) ... done
...
Successfully installed PyJWT-2.4.0 appdirs-1.4.4 autopep8-2.0.1 black-21.5b2 
cachetools-5.2.1 certifi-2022.12.7 cffi-1.15.1 charset-normalizer-3.0.1 
... 
ruamel.yaml.clib-0.2.7 six-1.16.0 slack-sdk-3.19.5 tenacity-8.1.0 
toml-0.10.2 tomli-2.0.1 typer-0.4.2 typing-extensions-4.4.0 urllib3-1.26.14
 watchgod-0.7 webexteamssdk-1.6.1 websocket-client-1.3.3

Затем мы генерируем файл конфигурации:

$ robusta gen-config
Robusta reports its findings to external destinations (we call them "sinks").
We'll define some of them now.

Configure Slack integration? This is HIGHLY recommended. [Y/n]: Y
If your browser does not automatically launch, open the below url:
https://api.robusta.dev/integrations/slack?id=xxxx
You've just connected Robusta to the Slack of: devopsfans
Which slack channel should I send notifications to? # k8s-chatgpt-bot
Configure Robusta UI sink? This is HIGHLY recommended. [Y/n]: Y
Enter your Gmail/Google address. This will be used to login: [email protected]
Choose your account name (e.g your organization name): devopsfans
Successfully registered.

Robusta can use Prometheus as an alert source.
If you haven't installed it yet, Robusta can install a 
pre-configured Prometheus.
Would you like to do so? [y/N]: y
Please read and approve our End User License Agreement: 
https://api.robusta.dev/eula.html
Do you accept our End User License Agreement? [y/N]: y
Last question! Would you like to help us improve Robusta by sending exception reports? [y/N]: N
Saved configuration to ./generated_values.yaml - save this file for future use!
Finish installing with Helm (see the Robusta docs). 
Then login to Robusta UI at https://platform.robusta.dev

By the way, we'll send you some messages later to get feedback. 
(We don't store your API key, so we scheduled future messages using Slack's 
API)

Затем развертываем:

$ helm install robusta robusta/robusta -f ./generated_values.yaml \ 
--set clusterName=dev-cluster

После этого мы проверяем два модуля Robusta и работаем без ошибок в журналах:

$ kubectl get pods -A | grep robusta
$ robusta logs

Теперь вы должны увидеть свой дашборд в https://platform.robusta.dev/.

Ссылка

Для получения более подробной информации об использовании Робусты, пожалуйста, посетите https://home.robusta.dev/