Модуль доступен только в Deckhouse Enterprise Edition.
Подготовка
Перед установкой Deckhouse Observability Platform необходимо выполнить ряд подготовительных шагов.
Настройка групп узлов (NodeGroups) и меток (labels)
Компоненты Deckhouse Observability Platform автоматически назначаются для запуска на узлы, основываясь на названии групп узлов (NodeGoup) и установленных на них метках (labels). Алгоритм выбора происходит следующим образом: сначала ищутся группы узлов с подходящими именами, затем проверяются группы узлов с подходящими метками. Если подходящие узлы не найдены, запуск компонентов будет отложен до тех пор, пока не будут созданы необходимые группы узлов или не будут установлены нужные метки на уже существующих группах.
Именование групп узлов
Минимальная конфигурация требует определения группы узлов с именем observability
. Все компоненты платформы будут запущены на узлах этой группы. Для более детального распределения компонентов также можно создать дополнительные группы узлов. Возможны следующие варианты:
observability
– для компонентов интерфейса пользователя (UI) и других, если для них не создана отдельная группа;observability-ceph
– для размещения компонентов Ceph;observability-metrics
– для размещения компонентов, отвечающих за сбор и обработку метрик;observability-logs
— для размещения компонентов, отвечающих за сбор и обработку логов.
Настройка групп узлов с помощью меток
Альтернативный способ распределения компонентов — использование меток. Установите метку dedicated/observability: ""
на группу узлов. Возможные варианты меток:
dedicated/observability: ""
– для компонентов интерфейса пользователя (UI) и других компонентов, если для них не выделена отдельная группа;dedicated/observability-ceph: ""
– для размещения компонентов Ceph;dedicated/observability-metrics: ""
– для размещения компонентов, отвечающих за сбор и обработку метрик;dedicated/observability-logs: ""
– для размещения компонентов, отвечающих за сбор и обработку логов.
Установка меток на существующую группу узлов
Чтобы установить метку на уже существующую группу узлов, как пример, можно использовать следующую команду:
kubectl patch ng worker -p '{"spec":{"nodeTemplate": {"labels": {"dedicated/observability": ""}}}}' --type=merge
Включение модуля operator-ceph
Deckhouse Observability Platform зависит от модуля operator-ceph
.
Команда для включения модуля:
kubectl -n d8-system exec svc/deckhouse-leader -- deckhouse-controller module enable operator-ceph
Включение модуля operator-postgres (для БД внутри кластера)
Deckhouse Observability Platform использует PostgreSQL. Для развертывания базы данных внутри кластера необходимо активировать модуль operator-postgres
.
Команда для включения модуля:
kubectl -n d8-system exec svc/deckhouse-leader -- deckhouse-controller module enable operator-postgres
Настройка внешней аутентификации (опционально)
Deckhouse Observability Platform поддерживает интеграцию с различными внешними системами аутентификации. Напрямую поддерживаются системы Keycloak и Okta. Для подключения к другим системам, таким как LDAP или GitLab, используется промежуточное решение — Dex, который является частью Deckhouse Kubernetes Platform. Полный список поддерживаемых систем можно найти в документации.
Подключение Dex для аутентификации
Для подключения, например, LDAP необходимо сначала создать DexProvider. Это позволит системе корректно взаимодействовать с внешним сервисом аутентификации.
Рассмотрим пример настройки подключения к LDAP:
-
Создайте конфигурационный файл
dop-dex-provider.yaml
со следующим содержимым:apiVersion: deckhouse.io/v1 kind: DexProvider metadata: name: dop-active-directory spec: displayName: Active Directory ldap: bindDN: cn=admin,dc=example,dc=org bindPW: admin groupSearch: baseDN: ou=dop,dc=example,dc=org filter: (objectClass=groupOfNames) nameAttr: cn userMatchers: - groupAttr: member userAttr: DN host: ad.example.com::389 insecureNoSSL: true insecureSkipVerify: true startTLS: false userSearch: baseDN: ou=dop,dc=example,dc=org emailAttr: mail filter: (objectClass=inetOrgPerson) idAttr: uidNumber nameAttr: cn username: mail usernamePrompt: Email Address type: LDAP
Обратите внимание, что в примере необходимо заменить указанные данные на реальные значения вашей системы.
-
Примените файл в кластере, выполнив команду:
kubectl apply -f dop-dex-provider.yaml
Дополнительные примеры настройки провайдеров можно найти в документации Deckhouse Observability Platform.
Важно: на текущий момент невозможно настроить явное сопоставление между DexProvider и конкретными приложениями, которые его используют. Если в Deckhouse Kubernetes Platform уже настроены DexProviders, пользователи Deckhouse Observability Platform увидят их в списке доступных методов аутентификации.
Установка в облачных средах
В данном примере используется база данных PostgreSQL, развернутая внутри кластера. Модуль operator-postgres
должен быть активирован.
Установка в Yandex Cloud
-
Подготовка конфигурационного файла
Создайте файл
dop-mc.yaml
с настройками. Убедитесь, что все изменяемые параметры, такие как доменное имя, количество ресурсов и идентификаторы (random-string
), заменены на фактические значения вашей среды:apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: observability-platform spec: enabled: true settings: general: baseDomain: dop.example.com clusterName: dc1 tls: issuer: letsencrypt storage: ceph: configOverride: | [osd] osd_memory_cache_min = 1Gi bluestore_cache_autotune = true bluestore_min_alloc_size = 4096 osd_pool_default_pg_autoscale_mode = off mon: storageClass: network-ssd storageSize: 10Gi osd: count: 3 storageClass: network-ssd-nonreplicated storageSize: 80Gi metrics: defaultStorageClass: network-ssd etcd: storageSize: 5Gi ingester: resources: limits: memory: 4Gi requests: cpu: 1 memory: 4Gi storageSize: 10Gi storeGateway: storageSize: 10Gi ui: auth: mode: default clusterBootstrapToken: random-string postgres: backup: enabled: false internal: resources: limits: cpu: "1" memory: 1Gi requests: cpu: 500m memory: 1Gi storage: class: network-ssd size: 10Gi mode: Internal secretKeyBase: random-string tenantHashSalt: random-string version: 1
-
Применение конфигурации
Примените файл в кластере, выполнив команду:
kubectl apply -f dop-mc.yaml
- Результат установки
Deckhouse Observability Platform будет развернута в Deckhouse Kubernetes Platform с включенным хранилищем для метрик. Все необходимые ресурсы будут заказаны в облаке, а база данных будет работать в кластере.
Установка в bare-metal кластер
Установка в bare-metal кластере требует дополнительных шагов по настройке хранилища и подготовке узлов.
Включение модулей sds-node-configurator и sds-local-volume
Эти модули необходимы для создания постоянных хранилищ (PV) на базе физических дисков и используется для организации долгосрочного хранилища с использованием Ceph.
Включите модули, выполнив команды:
kubectl -n d8-system exec svc/deckhouse-leader -- deckhouse-controller module enable sds-node-configurator
kubectl -n d8-system exec svc/deckhouse-leader -- deckhouse-controller module enable sds-local-volume
Настройка LocalPathProvisioner для stateful-компонентов
Компоненты Deckhouse Observability Platform, которые работают в stateful-режиме, требуют использования постоянных хранилищ (PV). В случаях, когда Deckhouse Observability Platform разворачивается на кластерах bare metal или виртуальных машинах без возможности использования облачных PV, используется LocalPathProvisioner
.
Подготовка узлов кластера
На всех узлах NodeGroup, на которых будут размещаться компоненты Deckhouse Observability Platform, убедитесь, что в директорию /opt/local-path-provisioner
смонтировано блочное устройство необходимого размера и в /etc/fstab
присутствует эта точка монтирования. Это устройство будет использоваться для хранения данных, поэтому важно, чтобы его объем соответствовал вашим требованиям.
Создание LocalPathProvisioner
-
Создайте файл
local-path-provisioner.yaml
со следующим содержимым:--- apiVersion: deckhouse.io/v1alpha1 kind: LocalPathProvisioner metadata: name: dop-localpath spec: nodeGroups: - observability path: /opt/local-path-provisioner reclaimPolicy: Delete
-
Примените файл в кластере, выполнив команду:
kubectl apply -f local-path-provisioner.yaml
Ресурсы
LocalPathProvisioner
должны быть созданы для каждой группы узлов (NodeGroup), которые подходят по имени или наличию лейбла. Например, это могут бытьobservability-ceph
,observability-metrics
,observability-logs
или любые NodeGroups с лейбломdedicated/observability*
.
Создание StorageClass для долгосрочного хранилища
Компонентам долгосрочного хранения в Deckhouse Observability Platform требуются выделенные блочные устройства. В ситуации, когда Deckhouse Observability Platform устанавливается в Deckhouse Kubernetes Platform, работающей на bare metal или виртуальных машинах без доступа к облачным PV, эту задачу решает модуль sds-local-volume.
-
Проверьте наличие доступных блочных устройств:
Выполните команду:
kubectl get bd
Убедитесь, что в выводе команды присутствуют устройства с флагом
consumable=true
. Например:NAME NODE CONSUMABLE SIZE PATH AGE dev-44587ffa2c48e7e403db6abc699cc3b809489c1d dop-bare-metal01 true 331093016Ki /dev/sda 3h dev-5f61dadefe049b620c6fc5433046cf02a80247a0 dop-bare-metal02 true 331093016Ki /dev/sda 3h2m dev-665628749db2e1c93a74f3c224bb98502111fdd6 dop-bare-metal03 true 331093016Ki /dev/sda 175m
-
Создайте
LvmVolumeGroups
из доступных блочных устройств на узлах с лейбломnode.deckhouse.io/group=observability
. Выбор узлов можно изменить, указав нужный лейбл согласно вашей конфигурации кластера. Например, это может бытьnode.deckhouse.io/group=observability-ceph
илиdedicated=observability-ceph
.Выполните следующую команду:
kubectl get no -l node.deckhouse.io/group=ceph -o name | cut -f 2 -d / | while read node; do cat <<EOF | kubectl apply -f - apiVersion: storage.deckhouse.io/v1alpha1 kind: LVMVolumeGroup metadata: name: "dop-ceph-$node" spec: type: Local local: nodeName: "$node" blockDeviceSelector: matchLabels: kubernetes.io/hostname: "$node" actualVGNameOnTheNode: "dop-ceph" EOF done
Проверьте успешность создания с помощью:
kubectl get lvg
Пример вывода:
NAME HEALTH NODE SIZE ALLOCATED SIZE VG AGE dop-ceph-dop-bare-metal01 Operational dop-bare-metal01 329054Mi 0 dop-ceph 37s dop-ceph-dop-bare-metal02 Operational dop-bare-metal02 329054Mi 0 dop-ceph 37s dop-ceph-dop-bare-metal03 Operational dop-bare-metal03 329054Mi 0 dop-ceph 37s
-
Создайте
LocalStorageClass
:Выполните команду:
kubectl get lvg -o json | jq 'reduce .items[].metadata.name as $name ({apiVersion: "storage.deckhouse.io/v1alpha1", kind: "LocalStorageClass", metadata: {name: "dop-ceph"}, spec: {reclaimPolicy: "Delete", volumeBindingMode: "WaitForFirstConsumer", lvm: {type: "Thick", thick: {contiguous: true}}}}; .spec.lvm.lvmVolumeGroups += [{name: $name}])' | kubectl apply -f -
-
Подтвердите успешное создание StorageClass:
Убедитесь, что в выводе команды:
kubectl get sc
появился StorageClass с именем
dop-ceph
.
Установка Deckhouse Observability Platform
-
Создайте и настройте файл
dop-mc.yaml
, учитывая вашу реальную среду:apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: observability-platform spec: enabled: true settings: general: baseDomain: dop.example.com clusterName: dc1 tls: issuer: letsencrypt storage: ceph: configOverride: | [osd] osd_memory_cache_min = 1Gi bluestore_cache_autotune = true bluestore_min_alloc_size = 4096 osd_pool_default_pg_autoscale_mode = off mon: storageClass: dop-localpath storageSize: 10Gi osd: storageClass: dop-ceph metrics: defaultStorageClass: dop-localpath etcd: storageSize: 5Gi ingester: resources: limits: memory: 4Gi requests: cpu: 1 memory: 4Gi storageSize: 10Gi storeGateway: storageSize: 10Gi ui: auth: mode: default postgres: backup: enabled: false internal: resources: limits: cpu: "1" memory: 1Gi requests: cpu: 500m memory: 1Gi storage: class: dop-localpath size: 10Gi clusterBootstrapToken: random-string secretKeyBase: random-string tenantHashSalt: random-string version: 1
-
Примените файл в кластере, выполнив команду:
kubectl apply -f dop-mc.yaml
Платформа будет развернута с активированным хранилищем для метрик и использованием соответствующих ресурсов.
Проверка работоспособности
-
Убедитесь, что все поды в
d8-observability-platform
находятся в состоянииRunning
:kubectl -n d8-observability-platform get po
-
Проверьте доступность пользовательского интерфейса (UI) по адресу, указанному в
.spec.settings.general.baseDomain
(в данном примереhttps://dop.example.com
).
Для входа воспользуйтесь учетными данными:
- Имя пользователя:
admin@deckhouse.ru
; - Пароль:
password
.
Обратите внимание, что при первичном входе потребуется изменить пароль.