Flying Ships Harbour by annewipf
Отсутствие встроенного инструмента наблюдаемости — один из наиболее серьезных недостатков Kubernetes. Команда Kubernetes aaS Mail.ru Cloud Solutions перевела статью о четырех инструментах с открытым исходным кодом, которые подойдут для мониторинга событий.
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 заработает на адресе localhost:8080.
Мы разрабатываем Kubernetes as a Service и будем рады получить от вас обратную связь по его работе. При регистрации вы получите на тестирование 3000 бонусных рублей.
Что почитать по теме: