Материалы к экзамену · Урок 6

Наблюдаемость и резервные копии

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

Две темы в одном уроке, потому что обе про одно: что делать, когда что-то пошло не так, — и что вы успели подготовить заранее.

Метрики и журналы

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

Что собираютЧем
МетрикиVictoriaMetrics
ЖурналыVictoriaLogs
ГрафикиGrafana
ОповещенияAlerta

Ни Prometheus, ни Loki, ни Elasticsearch в платформе нет. VictoriaMetrics при этом понимает язык запросов PromQL — то есть привычные запросы работают, а хранилище другое: компактнее и дешевле на больших объёмах.

Собирает метрики агент vmagent, который живёт рядом с нагрузкой и отправляет собранное в хранилище. Само хранилище развёрнуто как VMCluster (VMCluster) — кластерная установка VictoriaMetrics под управлением оператора. Журналы собирает fluent-bit — та же роль, только для текста.

Цепочка оповещений короткая, и порядок в ней спрашивают: VMAlert проверяет правила по метрикам в VictoriaMetrics → Alerta сводит срабатывания в одно место, убирает дубликаты и маршрутизирует их → почта, SMS, мессенджеры. Alerta нужна затем, чтобы одна авария не приходила восемью письмами из восьми источников.

Grafana приезжает с готовыми дашбордами, и экзамен спрашивает их по названиям групп: Cluster Overview — здоровье кластера целиком, Node Metrics — процессор, память, диск и сеть по узлам, ETCD — состояние хранилища etcd, Storage — здоровье LINSTOR и SeaweedFS, Tenant Applications — нагрузки и управляемые приложения по тенантам. Есть ещё дашборды по трафику точки входа и по управляемым базам данных.

Ваши подыотдают метрикиvmagentсобирает и шлётVictoriaMetricsхранитGrafanaрисует
Тот же путь у журналов, только вместо vmagent — fluent-bit, а вместо VictoriaMetrics — VictoriaLogs.

Про наследование помните из второго урока: тенант без своего мониторинга шлёт метрики родительскому. А вот включать сбор задним числом бесполезно — записей за прошлое взять неоткуда, и это стоит решать при создании кластера, а не когда график понадобился.

Резервные копии

Здесь два разных механизма, и путать их — верный способ ошибиться в вопросе.

Копии управляемых сервисов (backup). Здесь работают четыре объекта, и путать их — верный способ ошибиться:

ОбъектЧто делает
BackupClassкуда и как складывать. Заводит администратор платформы, действует на весь кластер
Planрасписание: снимать по такому-то графику
BackupJobразовый запуск, здесь и сейчас
Backupрезультат — сама снятая копия

Ключевая пара — Plan и BackupJob. Нужна копия каждую ночь — это Plan. Нужна копия прямо сейчас, перед обновлением — это BackupJob. Восстановление — отдельный объект, RestoreJob.

Начиная с версии 1.5 в платформе есть готовый cozy-default — класс копий, который работает сразу, без настройки хранилища.

Velero. Уровнем выше: копирует объекты самого кластера и тома. Это про восстановление платформы, а не отдельной базы. С версии 1.5 он не опция, а штатный компонент — ставится по умолчанию.

Настраивают его два объекта: BackupStorageLocation — куда складывать копии, и VolumeSnapshotLocation — где хранить снимки томов. Кластеру Kubernetes внутри тенанта Velero включают одним полем: spec.addons.velero.enabled.

Где проходит граница

Самое ценное в этой теме — понимать, чего резервные копии не делают.

Копия управляемого приложения берёт только данные. В неё не попадают ни HelmRelease приложения, ни объект CR, который вы завели в каталоге, ни секреты, созданные оператором базы.

Отсюда правило восстановления: приложение-приёмник должно существовать до того, как вы восстанавливаетесь. Восстановление наливает данные в существующую базу, а не собирает приложение заново.

Инкрементальных копий виртуальных машин нет: отслеживания изменённых блоков в платформе не делают, каждая копия полная. Если за спиной привычка к цепочкам инкрементов, окна копирования и объём хранилища придётся пересчитать.

Копии — не отказоустойчивость. Реплики спасают от падения узла, копии — от удалённых данных. Это разные беды, и одно другое не заменяет.

Копия, которую ни разу не разворачивали, — не копия, а надежда. Восстановление надо пробовать, пока оно не понадобилось.

И главное: копия хранится в объектном хранилище. Если оно живёт в том же кластере, что и данные, то от потери кластера целиком она не спасёт. Для настоящей защиты хранилище должно быть снаружи.

Мы разобрали, из чего платформа сделана и что она умеет. Остался последний вопрос — почему она устроена именно так.

Что спросят на экзамене

  • Что метрики хранит VictoriaMetrics, а журналы — VictoriaLogs. Не Prometheus и не Loki.
  • Что VictoriaMetrics совместима с PromQL.
  • Что метрики собирает vmagent, а хранит их VMCluster.
  • Порядок оповещений: VMAlert → Alerta → почта, SMS, мессенджеры.
  • Группы стандартных дашбордов: Cluster Overview, Node Metrics, ETCD, Storage, Tenant Applications.
  • Четыре объекта: BackupClass, Plan (расписание), BackupJob (разовый запуск), Backup (результат).
  • Что копия по расписанию — это Plan, а не BackupJob.
  • Что cozy-default работает из коробки с версии 1.5.
  • Что Velero работает на уровне платформы, а не отдельного сервиса.
  • Что Velero стал штатным компонентом с версии 1.5, а в тенантном кластере включается полем spec.addons.velero.enabled.
  • Что BackupStorageLocation задаёт, куда складывать копии, а VolumeSnapshotLocation — где хранить снимки томов.
  • Чего копия «только данные» не берёт: HelmRelease, объект CR, секреты оператора.
  • Что приложение-приёмник должно существовать до восстановления.
  • Что инкрементальных копий виртуальных машин нет — каждая копия полная.
  • Что реплики и резервные копии решают разные задачи.