Некоторое время назад у нас в облаке Amvera Cloud возникла задача организовать возможность создания managed баз данных. Сложность данной задачи в том, что нам надо развертывать и управлять тысячами баз данных PostgreSQL, которые обеспечивают репликацию, бэкапы, мониторинг и другие полезные пользователям функции. При этом в ядре нашей системы лежит Kubernetes, в котором запускаются приложения пользователей. И по ряду факторов нам требовалось запускать базы данных внутри кластера.
Чтобы не изобретать велосипед, мы решили рассмотреть известные операторы, позволяющие разворачивать базы данных PostgreSQL в Kubernetes и управлять ими.
В наш обзор вошли следующие решения
-
Crunchy Data PostgreSQL Operator
-
Stolon
-
Zalando Postgres Operator
-
KubeDB
-
StackGres
-
Сloudnative-pg
Рассмотрим их подробнее.
-
Crunchy Data PostgreSQL Operator
Лицензия — Apache 2.0
Количество звезд на GitHub — 3600
Год первого релиза — 2017
Основной функционал
Поддерживает нативную установку в кластера kubernetes. Поддерживает Pod Anti-Affinity, а именно, правила, с помощью которых можно указать, на каких узлах/регионах должны работать конкретные реплики. Есть поддержка резервных кластеров, которые могут работать как внутри нескольких кластеров, так и между ними.
Поддержка полного, инкрементного и дифференцированного резервного копирования с возможностью автовосстановления данных, в том числе дельта-восстановления.
Мониторинг с использованием библиотеки pgMonitor и Grafana.
Поддержка TLS шифрования.
Управление обновлениями.
Инструмент клонирования данных.
Расширенная поддержка пула соединений.
Настройка топологии развертывания.
Поддержка функционала резервного копирования в S3-совместимые хранилища.
Особенности
Поддерживает декларативный подход и такие возможности, как управление базами данных с помощью Kustomize, OLM, ArgoCD и Helm. Совместим со всеми основными сборками и сервисами Kubernetes.
Ссылка на проект
2 .Stolon
Лицензия — Apache 2.0
Количество звезд на GitHub — 4400
Год первого релиза — 2015
Основной функционал
Не является оператором Kubernetes, при этом есть интеграция с Kubernetes. Поддерживает репликацию, бэкапы и другие полезные функции.
Особенности
Пример архитектуры из официальной документации

Ссылка на проект
-
Zalando Postgres Operator
Лицензия — MIT
Количество звезд на GitHub — 3800
Год первого релиза — 2018
Основной функционал
-
Последовательные обновления изменений кластера Postgres, в т.ч. быстрые обновления минорных версий
-
Изменение размера живого тома без перезапуска модуля (AWS EBS, PVC)
-
Пул соединений с базой данных с помощью PGBouncer
-
Поддержка быстрого обновления основной версии. Поддерживает глобальное обновление всех кластеров.
-
Восстановление и клонирование кластеров Postgres на AWS, GCS и Azure.
-
Дополнительно можно настроить логическое резервное копирование в корзину S3 или GCS.
-
Резервный кластер из архива S3 или GCS WAL
-
Настраивается для необлачных сред
-
Базовое управление учетными данными и пользователями на K8s упрощает развертывание приложений.
-
Поддержка пользовательских сертификатов TLS.
-
Пользовательский интерфейс для создания и редактирования манифестов кластера Postgres
-
Поддержка миграции AWS EBS gp2 на gp3, поддержка операций ввода-вывода и настройки пропускной способности.
-
Совместимость с OpenShift.
-
Кластер потоковой репликации через Patroni
-
Восстановление на определенный момент времени с помощью pg_basebackup / WAL-E через Spilo
Особенности
Архитектура решения из официальной документации

-
KubeDB
Лицензия — Apache 2.0, но не на весь функционал
Количество звезд на GitHub — 530
Год первого релиза — 2017
Основной функционал
Поддерживает не только PostgreSQL, но и MySQL, Elasticsearch, MySQL, MongoDB, Redis, Memcached.
Особенности
Особенностью является dormantdatabases.kubedb.com ресурс. Он защищает от непреднамеренных/неправильных действий: все удаленные базы данных архивируются и копируются на этот ресурс, поэтому при необходимости их можно восстановить.
Многие функции, включая резервное копирование, объединение пулов соединений, снимки и неактивные базы данных, доступны только в корпоративной версии. Это существенно снижает популярность продукта.
Ссылка на проект
-
StackGres
Лицензия — AGPLv3
Количество звезд на GitHub — нет, так как используют GitLab
Год первого релиза — 2019
Основной функционал
-
Создание кластеров в Kubernetes
-
Система сбора журналов
-
веб-панель, аналогичная Zalando
-
система мониторинга, аналогичная Crunchy Data
-
система агрегации резервных копий на базе MinIO
Особенности
Оператор не поддерживает сборки пользовательских образов или несколько дополнительных контейнеров для сервера базы данных. Модуль Postgres содержит пять контейнеров.
Из них мы можем отключить экспортер метрик, пул соединений и контейнер с помощью дополнительных инструментов.
Ссылка на проект
-
Сloudnative-pg
Лицензия — Apache 2.0
Количество звезд на GitHub — 2700
Год первого релиза — 2022
Основной функционал
Нативная поддержка Kubernetes c интеграцией с API-Kubernetes.
CloudNativePG предоставляет собственные облачные возможности, такие как самовосстановление, высокая доступность, чередующиеся обновления, масштабирование реплик только для чтения, Anti-Affinity сходство/анти-сходство/допуски для планирования, управление ресурсами и т. д.
Для безопасности используется TLS-соединения.
Решение поддерживает физическую репликацию. CloudNativePG использует потоковую репликацию и файловую репликацию в качестве резервного метода. Вы можете настроить синхронную репликацию для получения реплик с нулевой потерей данных.
Возможность восстановления до заданной временной метки.
Мониторинг с использованием Prometheus и Grafana.
Особенности
CloudNativePG полагается исключительно на API-сервер Kubernetes и диспетчер экземпляров для координации сложных операций. Они должны выполняться в кластере PostgreSQL, не требуя никакой помощи со стороны промежуточного инструмента управления, отвечающего за высокую доступность и аварийное переключение. Это выгодно отличает CloudNativePG от конкурентов.
Ссылка на проект
Таблица сравнения
|
Сравнение |
Лицензия |
Звезды на GitHub |
Год первого релиза |
Функционал |
|
Crunchy Data |
Apache 2.0 |
3600 |
2017 |
Широкий |
|
Stolon |
Apache 2.0 |
4400 |
2015 |
Узкий |
|
Zalando Postgres Operator |
MIT |
380 |
2018 |
Широкий |
|
KubeDB |
Apache 2.0 *не на все |
530 |
2017 |
Широкий, дополнительно поддерживает другие СУБД |
|
StackGres |
AGPLv3 |
— |
2019 |
Средний |
|
Сloudnative-pg |
Apache 2.0 |
2700 |
2022 |
Широкий |
Дополнительно вы можете ознакомиться и с другими сравнениями операторов для PostgreSQL — 1,2.
Итог: по совокупности факторов, для себя в Amvera Cloud мы выбрали для тестов Cloudnative-pg, Zalando Postgres Operator и Crunchy Data PostgreSQL Operator. И по результатам тестов стали использовать Cloudnative-pg для создания своего сервиса managed-СУБД с функционалом репликации, бэкапов и мониторинга.
ссылка на оригинал статьи https://habr.com/ru/articles/799187/
Добавить комментарий