Мониторинг Kubernetes в Zabbix

Мониторинг Kubernetes в Zabbix

В этой публикации продолжение рассказа про систему мониторинга Zabbix. Только на этот раз будет показано, как выполняется мониторинг Kubernetes в Zabbix. Это типовой вариант мониторинга на основе шаблона, который идет “Из коробки”. На странице документации Zabbix есть описание этого шаблона.

Основная суть работы этого шаблона заключается в том, что он создает определенное количество объектов в кластере Kubernetes (поды, сервисы и т.д.), которые будут непосредственно отдавать данные при запросе данных сервером Zabbix.

Описание демонстрационной среды

Ниже приведена схему демонстрационного кластера Kubernetes.

В кластере настроен один сервер управления и две ноды для рабочей нагрузки.

IP-адреса узлов и их описание приведены в таблице ниже.

Узел Кластера IP-адрес Описание
master01 10.10.10.59 Узел управления
worker01 10.10.10.58 Узел рабочей нагрузки
worker02 10.10.1057 Узел рабочей нагрузки

Также в демонстрационной среде установлен Zabbix Server 6.2.

Как уже говорилось ранее, для настройки мониторинга Kubernetes будет использоваться стандартный шаблон для Zabbix сервера.

Предварительные требования

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

В данном случае установка Helm на узел master01 кластера Kubernetes.

Мониторинг Kubernetes – настройка

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

Подготовка

Самый первый подготовительный шаг – это развертывание Zabbix в Kubernetes через Helm Chart.

Нужно выполнить следующее:

1. Добавить Helm репозиторий:

helm repo add zabbix-chart-6.0  https://cdn.zabbix.com/zabbix/integrations/kubernetes-helm/6.0
roman@master01:~$ helm repo add zabbix-chart-6.0  https://cdn.zabbix.com/zabbix/integrations/kubernetes-helm/6.0
"zabbix-chart-6.0" has been added to your repositories
roman@master01:~$

2. Экспортировать в файл содержимое диаграммы helm-zabbix:

helm show values zabbix-chart-6.0/zabbix-helm-chrt > $HOME/zabbix_values.yaml

3. Далее создадим отдельное пространство имен в Kubernetes. Именно в этом пространстве имен и будет развернут Zabbix:

kubectl create namespace monitoring

4. Запустим развертывание диаграммы Helm для Zabbix в пространстве имен monitoring:

helm install zabbix zabbix-chart-6.0/zabbix-helm-chrt --dependency-update -f $HOME/zabbix_values.yaml -n monitoring

5. Проверим состояние развертывания. Убедимся, что все поды развернулись и запустились успешно:

kubectl get pods -n monitoring
roman@master01:~$ kubectl get pods -n monitoring
NAME                                         READY   STATUS    RESTARTS   AGE
zabbix-agent-jwv4q                           0/1     Running   0          10s
zabbix-agent-v2gwg                           0/1     Running   0          10s
zabbix-kube-state-metrics-56b6f796bc-hpzx5   0/1     Running   0          10s
zabbix-proxy-656f885bdb-cmjh7                0/1     Running   0          10s
roman@master01:~$ 

6. Также проверим все ли создались сервисы – их должно быть три штуки:

kubectl get svc -n monitoring
roman@master01:~$ kubectl get svc -n monitoring
NAME                            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)     AGE
zabbix-kube-state-metrics       ClusterIP   10.101.135.231   <none>        8080/TCP    116s
zabbix-zabbix-helm-chrt-agent   ClusterIP   10.98.46.173     <none>        10050/TCP   116s
zabbix-zabbix-helm-chrt-proxy   ClusterIP   10.100.68.71     <none>        10051/TCP   116s
roman@master01:~$

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

kubectl get secret zabbix-service-account -n monitoring -o jsonpath={.data.token} | base64 -d && echo
roman@master01:~$ kubectl get secret zabbix-service-account -n monitoring -o jsonpath={.data.token} | base64 -d && echo
eyJhbGciOiJSUzI1NiIsImtpZCI6IkxVVHpfdjJKcHB1WUtIZk9NQ09rSk92RkFIZERhdm5iRl9scGpTb3VGNjgifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJtb25pdG9yaW5nIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6InphYmJpeC1zZXJ2aWNlLWFjY291bnQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiemFiYml4LXNlcnZpY2UtYWNjb3VudCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjcyNzE0MGRkLTRlOTAtNGYyNy04YzdiLWMyNzRiYjZiNDU2MyIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDptb25pdG9yaW5nOnphYmJpeC1zZXJ2aWNlLWFjY291bnQifQ.bFo6b8vzYEtpMKt69EPhx0GN80yXajsFAVzKiiy9zpOdDvq7eWq3V_E75H_m1PgB7kxHxQ3Q-ztuRKsfG094PygqR5_za-Uoijj_hYWN1TZCI--kwQORvAUaiz1Q7sSjUs0M7337VNvcOgg7w6w2ZWDl0ofGRlt0y9G5ZyAMQamZHx7E13kFNeFQNZr8-Z5GSaAxSPto0-tXazNs434orWDR5_IFfuzSA4AN3MCFwBgj8GpsTSZfdFfqjy3kz1F1ot8kWl_2ZjV_CoFtzAvjxcILvuJR8Q30DZu89msmQhLMYQiVxHjf8gQUY6gX-K7xm4rx3y3d2yburTvZHDEJeA
roman@master01:~$ 

image-14-1024x224.png

Сохраните этот токен доступа – он еще понадобится.

Предварительная подготовка кластера Kubernetes в виде развертывания диаграммы Helm и генерации токена доступа завершена.

Настройка мониторинга узлов кластера Kubernetes

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

Какие шаги необходимо выполнить:

1. Перейти в веб панель администрирования сервера Zabbix.

2. Перейти в раздел “Configurations – Hosts“.

3. Нажать кнопку “Create Host“.

На вкладке “Host” вы можете указать произвольное имя (которое позволит понять зачем нужен этот фиктивный узел) и группу хоста. Обратите внимание на пустую секцию с указанием интерфейсов – так и должно быть. Это фиктивный хост. Всю необходимую информацию об актуальных узлах кластера мы получим от API Kubernetes. Важный момент – это выбор шаблона. Шаблон необходимо выбрать “Kubernetes nodes by HTTP“. Именно этот шаблон позволяет собирать данные с узлов кластера Kubernetes.

4. Переходим на вкладке “Macros“. Здесь нужно переопределить два макроса – {$KUBE.API.ENDPOINT.URL} и {$KUBE.API.TOKEN}. Значение для этих макросов приведены в таблице ниже.

Макрос Значение Описание
{$KUBE.API.ENDPOINT.URL} https://10.10.10.59:6443/api Ссылка на API сервер ноды управления
{$KUBE.API.TOKEN} <токен_доступа> Токен доступа системной учетной записи

Укажите соответствующие значения, как показано на рисунке выше и сохраните внесенные изменения.

В случае успешного обнаружения узлов рабочей нагрузки они отобразятся в списке всех хостов с пометкой “Cluster node discovery”, как показано на скриншоте ниже.

image-20.png

Настройка мониторинга состояния кластера Kubernetes

Теперь настроим мониторинг за компонентами управления кластера Kubernetes: сервером API, планировщиком и т.д.

Какие шаги необходимо выполнить:

1. Перейти в веб панель администрирования сервера Zabbix.

2. Перейти в раздел “Configurations – Hosts“.

3. Нажать кнопку “Create Host“.

На вкладке “Host” также укажем имя для фиктивного хоста. Группу хоста можете выбрать любую на ваше усмотрение. Важный момент – выбор шаблона. Нужен именно шаблон “Kubernetes cluster state by HTTP“.

4. Теперь зайдем на вкладку “Macros“. Аналогично предыдущему фиктивному хосту, тут нужно переопределить два макроса – {$KUBE.API.URL} и {$KUBE.API.TOKEN}. Значение для этих макросов приведены в таблице ниже.

Макрос Значение Описание
{$KUBE.API.URL} https://10.10.10.59:6443 Ссылка на сервер управления
{$KUBE.API.TOKEN} <токен_доступа> Токен доступа системной учетной записи

Укажите соответствующие значения, как показано на рисунке выше и сохраните внесенные изменения.

В случае успешного обнаружения вы должны увидеть еще ряд дополнительных компонентов нашего кластера Kubernetes.

Проверка работы мониторинга

Частично проверку успешного мониторинга за кластером Kubernetes мы выполнили еще при настройке соответствующих шаблонов и фиктивных хостов.

Дополнительно убедиться в том, что мониторинг Kubernetes работает вы можете убедиться либо в представлении “Latest Data” с фильтрацией по соответствующим компонентам.

Либо непосредственно убедившись в том, что данные мониторинга собираются и, например, отображаются на графиках и диаграммах.

Вместо заключения

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

О том как выполнить фильтрацию при настройке шаблона для узлов Kubernetes указано вот в этой странице документации.

О том как выполнить фильтрацию при настройке шаблона для наблюдения за состоянием кластера Kubernetes указано вот на этой страницы документации.

Метаданные статьи

Идентификатор статьи:
92
Категория:
Дата добавления:
2024-03-24 19:34:05
Просмотры:
226
Рейтинг (Голоса):
(0)

Связанные статьи