Модуль доступен только в Deckhouse Enterprise Edition.

Предварительная подготовка

Перед установкой Deckhouse Observability Platform необходимо выполнить несколько подготовительных шагов.

Создание ModuleUpdatePolicy

В первую очередь необходимо определить политику обновления модуля observability-platform, которая задаёт параметры и источники обновления, с помощью ресурса ModuleUpdatePolicy:

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

    ---
    apiVersion: deckhouse.io/v1alpha1
    kind: ModuleUpdatePolicy
    metadata:
      name: observability-platform
    spec:
      moduleReleaseSelector:
        labelSelector:
          matchExpressions:
          - key: module
            operator: In
            values:
              - observability-platform
          - key: source
            operator: In
            values:
              - deckhouse
      releaseChannel: Alpha # Укажите нужный канал обновления: Alpha, Beta или Stable.
      update:
        mode: Auto # Укажите желаемый режим обновления: Auto или Manual.
    

    В этом файле важно указать:

    • нужный канал обновления в поле releaseChannel;
    • режим обновления в поле mode (Auto или Manual).
  2. Примените файл в кластере, выполнив команду:

    kubectl apply -f dop-mup.yaml
    

Подробнее о политике обновления модулей и доступных параметрах можно узнать в документации Deckhouse.

Включение модуля operator-ceph

Для корректной работы Deckhouse Observability Platform требуется обязательно активировать модуль operator-ceph.

В зависимости от выбранных настроек и конфигураций могут потребоваться и другие модули из Deckhouse Kubernetes Platform. Подробнее об этом будет в соответствующих разделах документации.

  1. Создайте файл dop-ceph-mc.yaml со следующим содержимым:
    ---
    apiVersion: deckhouse.io/v1alpha1
    kind: ModuleConfig
    metadata:
     name: operator-ceph
    spec:
     enabled: true
    
  2. Примените файл в кластере, выполнив команду:
    kubectl apply -f dop-ceph-mc.yaml
    

Включение дополнительных модулей

operator-postgres

Этот модуль предназначен для развертывания базы данных PostgreSQL внутри кластера под управлением Deckhouse Kubernetes Platform. Установка модуля требуется, если планируется использовать запущенную внутри кластера базу данных PostgreSQL для Deckhouse Observability Platform.

  1. Создайте файл dop-postgres-mc.yaml со следующим содержимым:
    ---
    apiVersion: deckhouse.io/v1alpha1
    kind: ModuleConfig
    metadata:
     name: operator-postgres
    spec:
     enabled: true
    
  2. Примените файл в кластере, выполнив команду:
    kubectl apply -f dop-postgres-mc.yaml
    

sds

Этот модуль необходим для создания постоянных хранилищ (PV) на базе физических дисков и используется для организации долгосрочного хранилища с использованием Ceph. Его активация требуется в случаях, когда Deckhouse Observability Platform разворачивается в Deckhouse Kubernetes Platform, работающей на bare metal или виртуальных машинах, где невозможно заказать облачные PV.

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

    ---
    apiVersion: deckhouse.io/v1alpha1
    kind: ModuleConfig
    metadata:
     name: sds-node-configurator
    spec:
     enabled: true
     version: 1
    ---
    apiVersion: deckhouse.io/v1alpha1
    kind: ModuleConfig
    metadata:
     name: sds-local-volume
    spec:
     enabled: true
     version: 1
    
  2. Примените файл в кластере, выполнив команду:

    kubectl apply -f dop-sds-mc.yaml
    

Настройка групп узлов (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

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

Настройка StorageClass stateful-компонентов

Компоненты Deckhouse Observability Platform, которые работают в stateful-режиме, требуют использования постоянных хранилищ (PV). В случаях, когда Deckhouse Observability Platform разворачивается на кластерах bare metal или виртуальных машинах без возможности использования облачных PV, рекомендуется применять LocalPathProvisioner. Он позволяет использовать локальные диски узлов кластера для создания PV, обеспечивая быстрое и эффективное управление локальным хранилищем.

Настройка LocalPathProvisioner

Для корректной работы некоторых компонентов Deckhouse Observability Platform, которые используют Persistent Volumes (PV) и являются stateful, необходимо настроить LocalPathProvisioner.

Подготовка блочного устройства

На всех узлах NodeGroup, на которых будут размещаться компоненты Deckhouse Observability Platform, убедитесь, что в директории /opt/local-path-provisioner смонтировано блочное устройство необходимого размера. Это устройство будет использоваться для хранения данных, поэтому важно, чтобы его объем соответствовал вашим требованиям.

Создание и применение LocalPathProvisioner

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

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

    kubectl apply -f local-path-provisioner.yaml
    

LocalPathProvisioner должен быть создан для всех групп узлов (NodeGroup), которые подходят по имени или наличию лейбла. Например, это могут быть observability-metrics, observability-logs или любые NodeGroups с лейблом dedicated/observability.*. Убедитесь, что вы указали все необходимые группы узлов в поле nodeGroups.

Настройка Storage Class для компонентов долгосрочного хранения

Компоненты долгосрочного хранения в Deckhouse Observability Platform требуют использования постоянных хранилищ (PV). В ситуации, когда Deckhouse Observability Platform устанавливается в Deckhouse Kubernetes Platform, работающей на bare metal или виртуальных машинах без доступа к облачным PV, необходимо использовать модуль sds. Этот модуль выключен по умолчанию и должен быть активирован в соответствии с инструкциями из раздела о подключении необходимых модулей.

  1. Установите лейбл на NodeGroup для размещения компонентов Ceph:

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

    kubectl patch ng worker -p '{"spec":{"nodeTemplate": {"labels": {"storage.deckhouse.io/sds-local-volume-node": ""}}}}' --type=merge
    

    Эта команда добавит метки, которые необходимы для работы sds-local-volume.

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

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

    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
    
  3. Создайте LvmVolumeGroups из доступных блочных устройств на всех узлах:

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

    kubectl get bd -o json | jq '.items | map(select(.status.consumable == true)) | reduce .[] as $bd ({}; .[$bd.status.nodeName] += [$bd.metadata.name] | .) |  to_entries | reduce .[] as {$key, $value} ({apiVersion: "v1", kind: "List", items: []}; .items += [{apiVersion: "storage.deckhouse.io/v1alpha1", kind: "LvmVolumeGroup", metadata: {name: ("dop-ceph-" + $key)}, spec: {type: "Local", actualVGNameOnTheNode: "dop-ceph", blockDeviceNames: $value}}])' | kubectl apply -f -
    

    Проверьте успешность создания с помощью:

    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
    
  4. Создайте 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"}}}; .spec.lvm.lvmVolumeGroups += [{name: $name}])' | kubectl apply -f -
    
  5. Подтвердите успешное создание StorageClass:

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

    kubectl get sc
    

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

Настройка Storage Class для компонентов долгосрочного хранения

Компоненты долгосрочного хранения в Deckhouse Observability Platform требуют использования постоянных хранилищ (PV). В ситуации, когда Deckhouse Observability Platform устанавливается в Deckhouse Kubernetes Platform, работающей на bare metal или виртуальных машинах без доступа к облачным PV, необходимо использовать модуль sds. Этот модуль выключен по умолчанию и должен быть активирован в соответствии с инструкциями из раздела о подключении необходимых модулей.

  1. Установите лейбл на NodeGroup для размещения компонентов Ceph:

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

    kubectl patch ng worker -p '{"spec":{"nodeTemplate": {"labels": {"storage.deckhouse.io/sds-local-volume-node": ""}}}}' --type=merge
    

    Эта команда добавит метки, которые необходимы для работы sds-local-volume.

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

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

    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
    
  3. Создайте LvmVolumeGroups из доступных блочных устройств на всех узлах:

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

    kubectl get bd -o json | jq '.items | map(select(.status.consumable == true)) | reduce .[] as $bd ({}; .[$bd.status.nodeName] += [$bd.metadata.name] | .) |  to_entries | reduce .[] as {$key, $value} ({apiVersion: "v1", kind: "List", items: []}; .items += [{apiVersion: "storage.deckhouse.io/v1alpha1", kind: "LvmVolumeGroup", metadata: {name: ("dop-ceph-" + $key)}, spec: {type: "Local", actualVGNameOnTheNode: "dop-ceph", blockDeviceNames: $value}}])' | kubectl apply -f -
    

    Проверьте успешность создания с помощью:

    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
    
  4. Создайте 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"}}}; .spec.lvm.lvmVolumeGroups += [{name: $name}])' | kubectl apply -f -
    
  5. Подтвердите успешное создание StorageClass:

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

    kubectl get sc
    

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

Установка с использованием внешней аутентификации

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.

Шаги по установке в 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-nonreplicated
              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
    
  3. Результат установки

    Deckhouse Observability Platform будет развернута в Deckhouse Kubernetes Platform с включенным хранилищем для метрик. Все необходимые ресурсы будут заказаны в облаке, а база данных будет работать в кластере.

Установка на bare-metal-серверах

Для использования на bare-metal-серверах, где невозможно создать облачные PV, следуйте дальнейшим шагам.

Необходимо активировать модуль sds и произвести настройку StorageClass и LocalPathProvisioner.

Выполните следующие действия:

  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-ceph
              storageSize: 10Gi
            osd:
              count: 3
              storageClass: dop-ceph
              storageSize: 80Gi
          metrics:
            defaultStorageClass: localpath-node
            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
            external:
              db: dop-db
              host: db.local
              port: "5432"
              user: user
              password: password
            mode: External
          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) по адресу https://dop.domain.my, где domain.my – шаблон DNS-имён кластера, указанный в publicDomainTemplate.

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

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

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