Kubernetes

Установка

Добавление Helm репозитория

# Добавление официального репозитория Astra Monitoring
helm repo add am-helm https://dl.astralinux.ru/...
helm repo update

Установка Reloader

# Добавление репозитория Stakater
helm repo add stakater https://stakater.github.io/stakater-charts
helm repo update

# Установка Reloader
helm install reloader stakater/reloader -n astra-monitoring --create-namespace

Сценарии установки

Скачивание Helm chart и values

# Скачать только values.yaml по умолчанию
helm show values am-helm/astra-icl-monitoring > values.yaml

# Скачать chart для оффлайн установки
helm pull am-helm/astra-icl-monitoring --version 0.0.12
tar -xzf astra-icl-monitoring-0.0.12.tgz

Установка с параметрами в командной строке

# Базовая установка с параметрами в командной строке
helm upgrade astra-monitoring am-helm/astra-icl-monitoring \
  -n astra-monitoring \
  --install \
  --set admin_ui.password="admin123" \
  --set grafana.password="grafana123" \
  --set clickhouse.password="clickhouse123" \
  --set postgresql.password="postgres123" \
  --set ingress.dnsSuffix=".mydomain.local"

Установка с custom values.yaml

# Создание custom values.yaml
cat > custom-values.yaml << EOF
ingress:
  dnsSuffix: ".mydomain.local"

grafana:
  password: "grafana123"

clickhouse:
  password: "clickhouse123"
  db_backup_enabled: true
  db_backup_retention_days: 30
  base_backup_copies_number: 2

postgresql:
  password: "postgres123"
  db_backup_enabled: true
  db_backup_retention_days: 30

victoria_metrics:
  retention: 45

keepPVC: true
EOF

# Установка с custom values
helm upgrade astra-monitoring am-helm/astra-icl-monitoring \
  -n astra-monitoring \
  --install \
  --values ./custom-values.yaml

Установка с использованием секретов

# Установка с ссылками на существующие секреты
helm upgrade astra-monitoring am-helm/astra-icl-monitoring \
  -n astra-monitoring \
  --install \
  --set admin_ui.secretName="admin-ui-secret" \
  --set grafana.secretName="grafana-secret" \
  --set clickhouse.secretName="clickhouse-secret" \
  --set postgresql.secretName="postgresql-secret" \
  --set ingress.dnsSuffix=".mydomain.local" \
  --values ./values.yaml

Проверка установки

Проверка Helm release

# Проверить статус установки
helm list -n astra-monitoring

Проверка подов

# Проверить состояние всех подов
kubectl get pods -n astra-monitoring

# Дождаться когда все поды будут в состоянии Running
kubectl wait --for=condition=ready pod -l app.kubernetes.io/name=astra-icl-monitoring -n astra-monitoring --timeout=600s

Проверка сервисов

# Проверить сервисы
kubectl get services -n astra-monitoring

# Проверить ingress
kubectl get ingress -n astra-monitoring

Доступ к компонентам

После успешной установки вы получите доступы к компонентам:

***Admin UI***
https://admin-ui-astra-monitoring.mydomain.local
Login: admin
Password: [установленный пароль]

***Grafana***
https://grafana-astra-monitoring.mydomain.local
Login: admin
Password: [установленный пароль]

Обновление

# Обновление репозитория
helm repo update

# Обновление release
helm upgrade astra-monitoring am-helm/astra-icl-monitoring \
  -n astra-monitoring \
  --values ./values.yaml

Удаление

Удаление с сохранением данных

# В values.yaml установить:
keepPVC: true
# Удаление release с сохранением PVC
helm uninstall astra-monitoring -n astra-monitoring

Полное удаление

# В values.yaml установить:
keepPVC: false
# Удаление release и PVC
helm uninstall astra-monitoring -n astra-monitoring

# Ручное удаление PVC (если потребуется)
kubectl delete pvc -n astra-monitoring --all

Важно: PVC для бэкапов не удаляются автоматически, их нужно удалять вручную при необходимости.

Устранение проблем

Проверка логов

# Проверить логи конкретного пода
kubectl logs -n astra-monitoring <pod-name>

# Проверить логи с детализацией
kubectl logs -n astra-monitoring <pod-name> --previous

Проверка событий

# Просмотр событий namespace
kubectl get events -n astra-monitoring --sort-by=.metadata.creationTimestamp

Параметры Values

Базовые параметры окружения

environment: prod
# Нужно ли сохранять PV/PVC после удаления чарта
keepPVC: True
# Надо ли создавать секреты, по умолчанию - Да
createGrafanaSecret: true
createClickhouseSecret: true
createPostgreSQLSecret: true
# Основной тип стораджа
storageClass: yc-network-hdd
# Тип стораджа для бекапов (требует Read-Write-Many)
storageClassBackup: csi-s3

Конфигурация Ingress

ingress:
  # DNS-суффикс для публикации приложений
  #   Публикация будет выглядеть так:  http(s)://admin-ui-<release_name><dnsSuffix>/
  dnsSuffix: .example.loc
  className: nginx
  # Конфигурация https для Ingress
  tlsEnabled: False
  secretName: ingress-tls

Конфигурация ClickHouse

Параметры для настройки кластера ClickHouse

clickhouse:
  # Если ClickHouse внешняя
  # Адрес хоста
  # host: svc-mon-dev-clickhouse-proxy

  # Если ClickHouse внутренняя
  # Название и путь до образа
  image: <example-registry/imagename>
  # Версия образа
  tag: <example-tag>
  # Размер хранилища под логи
  storageSize: 100Gi
  # Размер хранилища под бэкап
  backupStorageSize: 50Gi
  # Количество шардов Clickhouse
  shards: 3
  # Порт
  port: 9090
  # Имя БД
  database: astra
  # Имя пользователя
  user: astra
  # Имя секрета k8s с паролем для Clickhouse
  # secretName: clickhouse_secret_name
  # Включить запуск задачи по обновлению структуры бд
  #db_update_enabled: true
  db_update_enabled: false
  # Хост для подключения к бд для обновления (используется native протокол)
  # db_management_host: svc-mon-dev-clickhouse-1
  # Порт для подключения к бд для обновления (используется native протокол)
  db_management_port: 9000

Конфигурация ClickHouse Keeper

Параметры для координатора кластера ClickHouse

clickhousekeeper:
  # Размер хранилища под данные
  storageSize: 3Gi
  # Название и путь до образа
  image: <example-registry/imagename>
  # Версия образа
  tag: <example-tag>
  # Глубина хранения бэкапа конфигурации
  backup_retention_days: 5
  # Тип стораджа для
  storageClass: csi-s3

Конфигурация ClickHouse Proxy

Параметры для прокси-сервера ClickHouse

clickhouseproxy:
  # Название и путь до образа
  image: <example-registry/imagename>
  # Версия образа
  tag: <example-tag>

Конфигурация PostgreSQL

Параметры для базы данных PostgreSQL

postgresql:
  # Если PostgreSQL внешняя
  # Адрес хоста
  # host: svc-mon-dev-postgresql
  # Если PostgreSQL внутренняя
  # Название и путь до образа
  image: <example-registry/imagename>
  # image: registry.astralinux.ru/am/postgres
  # Версия образа
  tag: <example-tag>
  # Размер хранилища под конфигурацию системы мониторинга
  storageSize: 10Gi
  # Включить регулярный бекап бд
  db_backup_enabled: true
  # Таймаут для подключения к бд
  db_connection_timeout: 5
  # Порт
  port: 5432
  # Имя БД
  database: astra
  # Имя пользователя
  user: astra
  # Имя секрета k8s с паролем для PostgreSQL
  # secretName: postgresql_secret_name

  # Включить запуск задачи по обновлению структуры бд
  db_update_enabled: true

Административный интерфейс (Admin UI)

Параметры для веб-интерфейса управления

admin_ui:
  # По-умолчанию Ingress хост динамически создаётся по шаблону
  #     admin-ui-<Release.Name><Values.ingress.dnsSuffix>
  # задание опции ingressPrefix меняет поведение, Ingress хост
  # будет создаваться по шаблону:
  #     <Values.admin_ui.ingressPrefix><Values.ingress.dnsSuffix>
  # ingressPrefix: admin-ui
  # user: admin
  # Имя секрета k8s с паролем для входа в Admin UI
  # secretName: admin_ui_secret_name
  front:
    image: <example-registry/imagename>
    tag: <example-tag>

  back:
    image: <example-registry/imagename>
    tag: <example-tag>

Конфигурация Grafana

Параметры для веб-интерфейса дашбордов

grafana:
  # По-умолчанию Ingress хост динамически создаётся по шаблону
  #     grafana-<Release.Name><Values.ingress.dnsSuffix>
  # задание опции ingressPrefix меняет поведение, Ingress хост
  # будет создаваться по шаблону:
  #     <Values.grafana.ingressPrefix><Values.ingress.dnsSuffix>
  # ingressPrefix: grafana
  # Размер хранилища данных для Grafana
  storageSize: 5Gi
  # Название и путь до образа
  image: <example-registry/imagename>
  # Версия образа
  tag: <example-tag>
  # Уникальный ID источника данных Prometheus
  prometheus_uid: 'gOyMaiEVz'
  # Уникальный ID для источника данных ClickHouse
  clickhouse_uid: 'P53F4937A2B5B9367'

  # Имя секрета k8s с паролем для входа в Grafana
  # secretName: grafana_secret_name

Хранение метрик VictoriaMetrics

Параметры для сбора и хранения метрик

victoria_metrics:
  image: <example-registry/imagename>
  tag: <example-tag>
  # Длительность хранения метрик
  retention: 45d
  # Размер хранилища метрик
  storageSize: 20Gi
  # По-умолчанию Ingress хост динамически создаётся по шаблону
  #     vmetrics-<Release.Name><Values.ingress.dnsSuffix>
  # задание опции ingressPrefix меняет поведение, Ingress хост
  # будет создаваться по шаблону:
  #     <Values.victoria_metrics.ingressPrefix><Values.ingress.dnsSuffix>
  # ingressPrefix: victoria_metrics
  service:
    type: NodePort
    ports:
    - port: 8428
      targetPort: 8428
      name: vmetrics
      # Номер порта, который будет опубликован на нодах k8s
      #  см. ограничения https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport
      nodePort: 30618

Конфигурация агента сбора метрик

agent:
  # Название и путь до образа
  image: <example-registry/imagename>
  # Версия образа
  tag: <example-tag>
  # Размер хранилища под конфигурацию системы мониторинга
  storageSize: 2Gi
  metrics:
    config_api: true
    adapter: true
    selecter: true

Аутентификация и авторизация (Keycloak)

keycloak:
  # По-умолчанию Ingress хост динамически создаётся по шаблону
  #     oidc-<Release.Name><Values.ingress.dnsSuffix>
  # Размер хранилища данных для Keycloak
  storageSize: 5Gi
  # Название и путь до образа
  image: <example-registry/imagename>
  # Версия образа
  tag: <example-tag>

Сервис лицензий

license_service:
  image: <example-registry/imagename>
  tag: <example-tag>
  log_level: info
  port: 8987

Сервис конфигурирвоания агентов config-api

config_api:
  image: <example-registry/imagename>
  tag: <example-tag>
  log_level: info
  address: ''
  port: 7777
  auth_token: ''
  is_debug: false

Сборщик трассировок

trace_collector:
  image: <example-registry/imagename>
  tag: <example-tag>

Сервис уведомлений

notification_service:
  image: <example-registry/imagename>
  tag: <example-tag>
  log_level: info
  address: ''
  port: 8877
  stderr: json

Кэш Redis

redis:
  image: <example-registry/imagename>
  tag: <example-tag>
  # debug - request logs, info less verbose
  log_level: info
  storageSize: 1Gi

Адаптеры ClickHouse

clickhouse_adapter:
  image: <example-registry/imagename>
  tag: <example-tag>
  port: 8989

clickhouse_selecter:
  image: <example-registry/imagename>
  tag: <example-tag>
  port: 8988

Обработка мониторов

event_processing:
  image: <example-registry/imagename>
  tag: <example-tag>
  log_level: info

Вспомогательные компоненты

vmagent:
  image: <example-registry/imagename>
  tag: <example-tag>
  server_port: 9703

vmalert:
  image: <example-registry/imagename>
  tag: <example-tag>
  # Включить правила из директории alert-rules
  includeDefaultRules: "true"

vmauth:
  image: <example-registry/imagename>
  tag: <example-tag>
  service:
    type: NodePort
    ports:
    - port: 8427
      targetPort: 8427
      name: vmauth

Лицензирование

Имеется возможность загрузить лицензию автоматически при развёртывании

license_url: ""
license_user: ""
license_password: ""