Осенью 2023 года вышла Alpha-версия Percona Everest — нового продукта от компании Percona. Это cloud-native database platform — инструмент с графическим интерфейсом для управления кластерами баз данных, развёрнутыми в Kubernetes.

22 февраля 2024 года Percona Everest перешла в состояние Beta. Обновлённый продукт сильно отличается от первой версии — разработчики проделали большой объем работы. В сегодняшней статье разберём, как выглядит Beta-версия Percona Everest и как её установить. Также рассмотрим, чего не хватает инструменту, на наш взгляд, на текущий момент.
О продукте
Percona Everest позволяет с помощью веб-интерфейса в несколько кликов развернуть в Kubernetes-кластере кластер БД с требуемыми характеристиками. Инструмент не зависит от вендора Kubernetes-кластера и сам является Open Source-решением. Это позволяет реализовать собственный вендоронезависимый Database-as-a-Service.
Репозиторий: https://github.com/percona/everest
Лицензия: Apache 2.0
Поддерживаемые СУБД: MySQL 8.0, PostgreSQL v12 .. v16, MongoDB v4.4 .. v6.0

На сегодняшний день, если взглянуть высокоуровнево, Percona Everest — это совокупность следующих компонентов:
Frontend для пользовательского UI.
Операторы Percona для управления кластерами БД:
OLM, служащий для управления перечисленными операторами, а также для развёртывания БД нужного типа.
Встроенное средство мониторинга и отправки телеметрии Everest на серверы Percona.
Возможности
Сейчас в инструменте реализованы следующие функции:
Создание и удаление кластера БД.
Автоматическое переключение ролей Leader/Follower.
Резервное копирование. Доступно создание резервных копий БД в AWS S3-совместимое хранилище. Выполнение резервного копирования возможно как по расписанию, так и по кнопке:

Восстановление из резервной копии в существующий кластер БД. Также возможно создание нового кластера из резервной копии:

Восстановление на момент времени (Point-in-time recovery, PITR):

Поддержка объектных хранилищ для бэкапов не только Virtual-hosted-style, но и Path-style.
Поддержка выбора StorageClass при развёртывании БД.
Поддержка кастомных конфигураций. Конфигурирование возможно как при развёртывании кластера БД, так и во время его работы:


Поддержка ручного горизонтального и вертикального скейлинга кластера БД. Особенно приятно при этом видеть предполагаемые доступные ресурсы в Kubernetes-кластере (estimated available):

Автоматическое развёртывание Haproxy для MySQL.
Автоматическое развёртывание PgBouncer для PostgreSQL.
Поддержка подключения к произвольному PMM-сервису с отправкой данных мониторинга по push-модели:

Inventory в PMM:

Установка
Для установки Everest требуются заранее развёрнутый Kubernetes-кластер и kube config для него.
Установка производится с помощью cli-утилиты everestctl:
everestctl install --kubeconfig "/my/path/to/kube/config" --namespaces dev,prod --operator.mongodb=true --operator.postgresql=true --operator.xtradb-cluster=true --skip-wizard
Здесь dev и prod — пространства имён, в каждое из которых будет установлен набор из перечисленных операторов БД. Если раньше пространств имён не было, они будут созданы.
Если в дальнейшем потребуется передать под контроль Everest дополнительное пространство имён, необходимо вызвать команду everestctl install несколько раз.
Например:
everestctl install --namespaces dev --operator.postgresql=true --skip-wizard everestctl install --namespaces prod --operator.postgresql=true --skip-wizard
Установить разные наборы операторов БД в разные пространства имён на сегодняшний день невозможно.
Для удаления пространства имён из-под управления Everest пока также нет средств. Можно только удалить пространство имён вручную, так как everestctl uninstall попытается удалить все инсталляции целиком.
Установка нескольких копий операторов БД в разные пространства имён выглядит избыточным, но это позволяет выборочно обновлять версии операторов с помощью everestctl upgrade --namespaces.
Наконец, для доступа к веб-интерфейсу Everest потребуется проброс порта, или публикация сервиса everest на внешнем IP тем или иным образом, или просто деплой Ingress. Например:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: everest namespace: everest-system spec: ingressClassName: nginx rules: - host: everest.mydomain.com http: paths: - backend: service: name: everest port: number: 8080 path: / pathType: Prefix tls: - hosts: - everest.mydomain.com secretName: everest-tls
При первом нашем знакомстве с Percona Everest были не вполне очевидны все сценарии использования этого инструмента. Например, было не ясно, возможен ли GitOps-подход для управления инфраструктурой при его использовании. Но сейчас мы выяснили, что это вполне возможно. Можно вручную задеплоить в пространство имён, находящееся под контролем Everest, секрет с паролями для БД и манифест Custom Resource databaseclusters.everest.percona.com, при этом Everest развернёт кластер БД и отобразит его в UI.
Пример для Percona XtraDB Cluster:
--- apiVersion: v1 kind: Secret metadata: name: everest-secrets-mysql-dev-from-git namespace: dev type: Opaque data: clustercheck: JiFvLk9IdEEjTntpISYoQA== monitor: IyslSmlJdHZVYiYxS2FMSS0= operator: Rm55NSZAVERAI1hKJTx0dXs= proxyadmin: bThRUX0oNHcjMEBvRWJBMg== replication: cnAwejUmTkBfN1F2JTVSIw== root: cyxENzxHcmduRmliWXh3ZFpjPQ== xtrabackup: S0tyUz9RcEpMKT1MWS5VRz8= --- apiVersion: everest.percona.com/v1alpha1 kind: DatabaseCluster metadata: labels: backupStorage-golf-ya-cloud: used clusterName: mysql-dev-from-git name: mysql-dev-from-git namespace: dev spec: allowUnsafeConfiguration: true backup: enabled: true pitr: backupStorageName: golf-ya-cloud enabled: true schedules: - backupStorageName: golf-ya-cloud enabled: true name: mysql-dev-from-git retentionCopies: 10 schedule: 0 11 * * * engine: config: |- [mysqld] max_connections=100 replicas: 1 resources: cpu: 600m memory: 1G storage: class: ceph-ssd size: 1G type: pxc userSecretsName: everest-secrets-mysql-dev-from-git version: 8.0.23-14.1 monitoring: resources: {} proxy: expose: type: internal replicas: 1 resources: cpu: "0" memory: "0" type: haproxy
Возможности, которых не хватает
Что хотелось бы видеть среди возможностей Everest:
Управление временем жизни бэкапов БД PostgreSQL через GUI. Веб-интерфейс Everest, начиная с версии v0.10, поддерживает возможность указания
retentionдля MySQL и MongoDB. Для управления этим параметром в кластерах PostgreSQL пока придётся вручную отредактировать CRdatabaseclusters.everest.percona.com, а именно значение поляretentionCopies.Возможность скейлинга размера диска. На данный момент для скейлинга диска возможно только создание нового кластера БД с новыми параметрами из бэкапа старого кластера.
Возможность апгрейда версии БД.
Возможность задания параметров
podAntiAffinity,nodeAffinityиtolerations.Более удобную систему добавления и удаления пространств имён в Everest.
Возможность задания своего набора операторов БД для каждого пространства имён.
Поддержку RBAC для UI Everest (в планах с пометкой «Coming soon», пока же есть только административный доступ для единственного суперпользователя).
Отображение прогресса выполнения операции развёртывания и реконфигурации в веб-интерфейсе, а также отображение состояния реплик. Возникали ситуации, когда кластер замирал в UI в статусе Initializing из-за того, что поды с БД были в CrashLoopBackOff из-за постоянных ООМ kill, или ошибки в кастомной конфигурации.
Управление пользователями БД в UI.
DownScale до одной реплики. Хотя создание с нуля кластера из одной реплики возможно, DownScale пока работает лишь частично. UpScale кластеров БД с 1 до N реплик работает без нареканий.
Вариант развёртывания Everest в Kubernetes-кластере не только с помощью binary-утилиты
everestctl, но и с помощью манифестов для обеспечения возможности управления деплоем через git. Пока же для реализации этого необходим определённый реверс-инжиниринг.
В остальном же решение уже выглядит готовым к работе. У самого продукта есть список возможностей, которые планируется реализовать в будущем.
Выводы
В настоящий момент не у всех операторов СУБД для Kubernetes есть веб-интерфейс. Те же, у которых есть собственные GUI, как правило, позволяют управлять только СУБД определённого типа. Также существуют свои проприетарные реализации GUI для управления Managed-DB в различных облачных сервисах. Благодаря Everest появляется возможность управлять через единый интерфейс тройкой популярных СУБД в едином ключе, развернув собственный DBaaS.
Мы активно используем в повседневной работе различные разработки Percona и благодарны им за отличные инструменты. Будем в дальнейшем с интересом следить за развитием Everest.
P. S.
Читайте также в нашем блоге:
