Некоторое время назад у нас в облаке Amvera Cloud возникла задача организовать возможность создания managed баз данных. Сложность данной задачи в том, что нам надо развертывать и управлять тысячами баз данных PostgreSQL, которые обеспечивают репликацию, бэкапы, мониторинг и другие полезные пользователям функции. При этом в ядре нашей системы лежит Kubernetes, в котором запускаются приложения пользователей. И по ряду факторов нам требовалось запускать базы данных внутри кластера.
Об Amvera
Если у вас несколько микросервисов и вы не хотите тратить время на настройку CI/CD, мониторинга и эксплуатации Kubernetes, попробуйте наше облако - Amvera Cloud. Amvera — альтернатива managed Kubernetes. У нас вы сможете обновлять ваши сервисы через простые коммиты в Git и получите почти все преимущества Kubernetes, не задумываясь об администрировании, настройки CI/CD, мониторинга, алертинга и сопутствующих сервисов. Это выйдет намного дешевле, чем классический managed k8s. Kubernetes у нас внутри, но вы полностью абстрагированы от его администрирования, достаточно просто привязать к сервису ваш Git-репозиторий и обновлять приложения командой “git push amvera master”.
А если у вас сложный проект и вам нужна помощь в построении инфраструктуры на основе Kubernetes, или просто консультация, пишите мне в телеграм (Кирилл Косолапов), либо оставьте контакт для связи на странице нашей DevOps-команды. За спрос денег не берем, если это небольшая консультация или что-то простое, поможем бесплатно. А если сложное - договоримся.
Чтобы не изобретать велосипед, мы решили рассмотреть известные операторы, позволяющие разворачивать базы данных 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-СУБД с функционалом репликации, бэкапов и мониторинга.