Модуль доступен только в 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:

  1. Создайте конфигурационный файл 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
    

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

  2. Примените файл в кластере, выполнив команду:

    kubectl apply -f dop-dex-provider.yaml
    

Дополнительные примеры настройки провайдеров можно найти в документации Deckhouse Observability Platform.

Важно: на текущий момент невозможно настроить явное сопоставление между DexProvider и конкретными приложениями, которые его используют. Если в Deckhouse Kubernetes Platform уже настроены DexProviders, пользователи Deckhouse Observability Platform увидят их в списке доступных методов аутентификации.

Установка в облачных средах

В данном примере используется база данных PostgreSQL, развернутая внутри кластера. Модуль operator-postgres должен быть активирован.

Установка в Yandex Cloud

  1. Подготовка конфигурационного файла

    Создайте файл 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
    
  2. Применение конфигурации

Примените файл в кластере, выполнив команду:

kubectl apply -f dop-mc.yaml
  1. Результат установки

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

  1. Создайте файл local-path-provisioner.yaml со следующим содержимым:

    ---
    apiVersion: deckhouse.io/v1alpha1
    kind: LocalPathProvisioner
    metadata:
      name: dop-localpath
    spec:
      nodeGroups:
      - observability
      path: /opt/local-path-provisioner
      reclaimPolicy: Delete
    
  2. Примените файл в кластере, выполнив команду:

    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.

  1. Проверьте наличие доступных блочных устройств:

    Выполните команду:

    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
    
  2. Создайте 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
    
  3. Создайте 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 -
    
  4. Подтвердите успешное создание StorageClass:

    Убедитесь, что в выводе команды:

    kubectl get sc
    

    появился StorageClass с именем dop-ceph.

Установка Deckhouse Observability Platform

  1. Создайте и настройте файл 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
    
  2. Примените файл в кластере, выполнив команду:

    kubectl apply -f dop-mc.yaml
    

Платформа будет развернута с активированным хранилищем для метрик и использованием соответствующих ресурсов.

Проверка работоспособности

  1. Убедитесь, что все поды в d8-observability-platform находятся в состоянии Running:

    kubectl -n d8-observability-platform get po
    
  2. Проверьте доступность пользовательского интерфейса (UI) по адресу, указанному в .spec.settings.general.baseDomain (в данном примере https://dop.example.com).

Для входа воспользуйтесь учетными данными:

  • Имя пользователя: admin@deckhouse.ru;
  • Пароль: password.

Обратите внимание, что при первичном входе потребуется изменить пароль.