Развертывание Prometheus в Kubernetes

Развертывание Prometheus в Kubernetes состоит из нескольких простых шагов, тем не менее оно значительно отличается от классической установки с использованием привычного Systemd или даже Docker. В статье ниже разберем по шагам что для этого нужно сделать.

Развертывание Prometheus в Kubernetes

Я подразумеваю, что на текущий момент вы уже имеете развернутый и настроенный кластер k8s, а также сконфигурированную утилиту kubectl.

Создаем namespace

Если не указано явно, то для создания ресурсов по умолчанию используется неймспейс default. Мониторинг лучше ограничить отдельным namespace, а в будущем возможно указать лимиты по ЦПУ и оперативной памяти на всякий случай. Создать пространство имен можно простейшей командой:

… а можно и yaml-файлом:

Второй вариант на мой взгляд более предпочтителен, поскольку позволяет получить все преимущества хранения конфигурации в коде, но решать вам.

Разрешения

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

Примечание: подробнее о пространствах имен читайте в статьях Namespaces Walkthrough 1 и Namespaces 2 официальной документации.

Наша будущая инсталляция Prometheus рассчитана на мониторинг в т.ч. k8s, а потому ей потребуются разрешения на доступ к ресурсам кластера и мы должны ей их предоставить. Если коротко, то сначала нам надо создать ClusterRole и ServiceAccount, а потом связать их с помощью ClusterRoleBinding.

Примечание: если этого не сделать, скорее всего вы столкнетесь с ошибками HTTP 401/403 в веб-интерфейсе Прометея.

Не хотелось бы такую простую задачу осложнять изучением азов реализации RBAC на k8s. Видимо как раз по этой причине разработчики Prometheus уже заготовили для нас необходимые конфиги, скачать которые можно командой:

Единственный момент – там используется namespace: default. Замените на monitoring:

Применяем изменения:

Идем далее.

Конфигурация Prometheus

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

Применим её:

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

Обратите внимание на секцию, в которой мы определяем тома (Volumes). Config-volume – это не диск в классическом понимании, а ConfigMap, который содержит всего лишь один файл – конфигурацию Прометея:

А вот тут мы его монтируем внутрь контейнера как раз туда, где его ждет Prometheus:

Применяем конфиг:

Но и на этом ещё не все.

Публикация

Теперь желательно опубликовать наше приложение внутри кластера. Сделать это можно с помощью сервисов k8s. Как пишут в официальной документации 3, сервис – это:

An abstract way to expose an application running on a set of Pods as a network service.

Примечание: стоит отметить, что для публикации сервисов наружу нужно использовать Ingress 4, а Service служит для взаимодействия внутри кластера.

Итак, создадим ещё один файл конфигурации:

Применим его:

Веб-интерфейс Prometheus

Наружу мы пока ничего не публиковали, но это не помешает нам пробросить порты из кластера k8s на ваше рабочее место. Для этого достаточно выполнить команду:

где 19090 – локальный порт, а 9090 – порт, на котором был опубликован Прометей ранее. Чтобы получить список ресурсов в вашем пространстве имен, выполните команду:

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

Яндекс.Метрика