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

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

События Kubernetes показывают, что происходит в кластере при изменении состояния или ошибках, вызванных другими ресурсами системы. Благодаря событиям вы поймете, почему система не может вытянуть Docker-образ или почему некоторые поды были выселены из кластера. События — это тип ресурса, который автоматически создается всеми основными компонентами и расширениями в кластере через API-сервер.

Доступ к событиям Kubernetes

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

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

Чтобы получить список событий для определенного ресурса кластера, нужно запустить для него команду kubectl describe. Другой вариант — запустить kubectl get events, она выводит список событий по определенному ресурсу или всему кластеру. А чтобы собрать и просмотреть события, при развертывании запустите kubectl get events --watch и используйте сторонние инструменты для ведения журнала.

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

Kubewatch

Kubewatch — инструмент для мониторинга событий Kubernetes с открытым исходным кодом, он написан на Golang. Kubewatch отслеживает изменения во всех ресурсах кластера и уведомляет о них через заранее выбранный канал или веб-хук. Поддерживает публикацию уведомлений на разных каналах, в том числе в Slack, Hipchat, Webhook, Flock, Mattermost и SMTP.

Для установки и настройки Kubewatch в кластере Kubernetes используют простые команды в kubectl и helm.

Способ установки 1: kubectl

Чтобы установить Kubewatch при помощи kubectl, создайте файл ConfigMap.yml для хранения конфигурации kubewatch. Для доступа к серверу API будет создан контейнер kubewatch вместе с sidecar-контейнером kubectl.

Чтобы создать configmap в Kubernetes, выполните команду:

$ kubectl create -f kubewatch-configmap.yaml

Затем создайте под напрямую или используйте собственные средства развертывания:

$ kubectl create -f kubewatch.yaml

Когда под запустится и заработает, уведомления о событиях в Kubernetes начнут появляться на канале, который вы указали. Вот пример уведомления о событии, отправленного в Slack через Kubewatch:

Способ установки 2: Helm

Для начала убедитесь, что Helm установлен в вашем кластере. Затем настройте Kubewatch при помощи команды:

helm install --name

kubewatch bitnami/kubewatch-- set='rbac.create=true,slack.channel=#YOUR_CHANNEL,slack.token=xoxb-YOUR_TOKEN,resourcesToWatch.pod=true,resourcesToWatch.daemonset=true'

Другой вариант — создать конфигурацию в файле .yml:

$ helm upgrade --install kubewatch bitnami/kubewatch --values=values-file.yml

Eventrouter

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

Для установки, удаления и просмотра событий развертывания используется kubectl. Запустить Eventrouter в кластере:

$ kubectl create -f https://raw.githubusercontent.com/heptiolabs/eventrouter/master/yaml/eventrouter.yaml

Удалить Eventrouter:

$ kubectl delete -f https://raw.githubusercontent.com/heptiolabs/eventrouter/master/yaml/eventrouter.yaml

Проверить результаты работы Eventrouter:

$ kubectl logs -f deployment/eventrouter -n kube-system

Event Exporter

Event Exporter — инструмент с открытым исходным кодом, отслеживает события Kubernetes, определяет их продолжительность и выдает метрики. Их можно запрашивать на основе количества событий и уникальных событий за последний час. Event Exporter поддерживает разные команды для развертывания, создания, запуска и проверки метрик. Чтобы собрать Event Explorer, выполните команду:

$ VERSION=v1.0.0 REGISTRY=docker.io make build

Инструмент можно запускать как внутри Kubernetes (с помощью учетной записи службы Kubernetes), так и вне его (через поиск файла kubeconfig в директории /.kube).

Запустить Event Explorer в Kubernetes:

$ ./event_exporter

Запустить вне Kubernetes:

$ ./event_exporter --kubeConfigPath=$HOME/.kube/config

Проверка метрик:

curl http://<pod-ip>:9102/metrics

Еще Event Exporter можно развернуть непосредственно в кластере Kubernetes при помощи образа:

caicloud/event-exporter:${VERSION}

Sloop

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

Установить Sloop можно с помощью helm chart, Docker или сборки из исходного кода. Чтобы собрать Sloop из исходного кода, клонируйте репозиторий на Github и соберите его с помощью из make-файла:

mkdir -p $GOPATH/src/github.com/salesforce

cd $GOPATH/src/github.com/salesforce

git clone <https://github.com/salesforce/sloop.git>

cd sloop

make

$GOPATH/bin/sloop

После этого Sloop заработает на адресе http://localhost:8080.

Оригинал статьи на Наbr.com