Как Построить Гибридное Облако С Помощью Kubernetes, Которое Сможет Заменить Dbaas

Меня зовут Петр Зайцев, я генеральный директор, основатель Перкона и я хочу сказать тебе:

  • как мы перешли от решений с открытым исходным кодом к базе данных как услуге;
  • какие существуют подходы к развертыванию баз данных в облаке;
  • как Kubernetes может заменить DBaaS, устраняя зависимость от поставщиков и сохраняя простоту СУБД как услуги.

Статья подготовлена на основе доклада на @Databases Meetup от Mail.ru Cloud Solutions & Tarantool. Если не хотите читать, можете посмотреть:

Как мы перешли от открытого исходного кода к базе данных как услуги в облаке

Я работаю в open source с конца 90-х.

Двадцать лет назад использовать открытый исходный код, например базы данных, было не так просто.

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

Затем открытый исходный код претерпел ряд упрощений:

  • Исходники Tar.gz и INSTALL, которые нужно было скомпилировать;
  • пакеты с зависимостями, такие как .

    deb и .

    rpm, где вам нужно установить только набор пакетов;

  • репозитории пакетов, такие как APT и YUM, установка которых происходит автоматически;
  • такие решения, как Docker и Snap, которые позволяют получать пакеты путем установки без внешних зависимостей.

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

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

На самом деле это неплохо, потому что:

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

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

  2. Все больше людей могут стать разработчиками программного обеспечения с открытым исходным кодом и другого программного обеспечения, больше программного обеспечения используется предприятиями, и потребность в нем возрастает.
Минус в том, что следующий шаг упрощения связан с использованием облачных решений, а это приводит к определенному вендорному привязке, то есть привязке к одному поставщику.

Мы используем простые решения, а провайдеры используют компоненты с открытым исходным кодом, но по факту они прибиты к одному из больших облаков.

То есть самый простой и быстрый способ развертывания открытого исходного кода (и совместимого с ним программного обеспечения) — в облаках, с использованием собственного API. Когда дело доходит до баз данных в облаке, существует два подхода:

  1. Соберите инфраструктуру базы данных, как в обычном дата-центре.

    То есть возьмите стандартные строительные блоки: вычисления, хранилище и так далее, установите на них Linux и базу данных и настройте их.

  2. Используйте базу данных как услугу, где провайдер предлагает готовую базу данных внутри облака.

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

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



Два типа базы данных как услуги на основе открытого исходного кода и альтернатива в виде Kubernetes.

Существует два типа базы данных как услуги для открытых баз данных:
  1. Стандартный продукт с открытым исходным кодом, упакованный в серверную часть администрирования для простоты развертывания и управления.

  2. Передовое коммерческое решение с различными надстройками, совместимое с открытым исходным кодом.

Оба варианта уменьшают возможность миграции между облаками и снижают переносимость данных и приложений.

Например, несмотря на то, что разные типы облаков поддерживают по сути один и тот же стандарт MySQL, между ними есть существенные различия: в работе, производительности, резервном копировании и так далее.

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

И тут возникает вопрос — можно ли получить удобство Базы данных как услуги, а не простого решения с открытым исходным кодом? Плохая новость в том, что подобных решений на рынке, к сожалению, пока нет. Хорошая новость в том, что есть Kubernetes, который позволяет реализовывать подобные решения.

Kubernetes — это операционная система для облака или центра обработки данных, которая позволяет развертывать приложение и управлять им на нескольких серверах в кластере, а не на одном хосте.

Сейчас Kubernetes — лидер в категории такого ПО.

Было много разных решений подобных проблем, но оно стало стандартом.

Многие компании, которые раньше фокусировались на альтернативных решениях, теперь сосредоточены на адаптации своих продуктов для поддержки Kubernetes. Кроме того, Kubernetes — универсальное решение, которое поддерживается в частных, публичных и гибридных облаках многих вендоров, например: AWS, Google Cloud, Microsoft Azure, Облачные решения Mail.ru .



Как Kubernetes работает с базами данных

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

Базы данных находятся на другом конце спектра, то есть это приложения с отслеживанием состояния.

А Kubernetes изначально не предназначался для таких приложений.

Однако недавно в Kubernetes появились функции, позволяющие использовать базы данных и другие приложения с отслеживанием состояния:

  1. Концепция StatefulSet — это целая серия примитивов для обработки событий об остановке работы подов и реализации Graceful Shutdown (предсказуемого завершения работы приложения).

  2. Постоянные тома — это хранилища данных, связанные с модулями, объектами управления Kubernetes.
  3. Операторская платформа — то есть возможность создавать компоненты для управления базами данных и другими приложениями с отслеживанием состояния, распределенными по множеству узлов.

Уже сейчас в публичных облаках есть крупные базы данных как услуга, бэкендом которых является Kubernetes, например: CockroachCloud, InfluxDB, PlanetScale. То есть база данных на Kubernetes — это не только то, что теоретически возможно, но и то, что работает на практике.

Percona предлагает два решения с открытым исходным кодом для Kubernetes:

  1. Оператор Kubernetes для Percona Server для MongoDB.
  2. Kubernetes Оператор для XtraDB CLUSTER — это служба, совместимая с MySQL и обеспечивающая высокую доступность и согласованность.

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

Пользователей Kubernetes можно разделить на две группы.

Некоторые люди используют Kubernetes Operations напрямую — это в основном продвинутые пользователи, хорошо понимающие, как работает технология.

Другие запускают его на бэкенде — таких пользователей интересует что-то вроде Database as a Service, они не хотят вникать в нюансы Kubernetes. Для второй группы пользователей у нас есть еще одно решение с открытым исходным кодом — Percona DBaaS CLI Tool. Это экспериментальное решение для тех, кто хочет получить DBaaS с открытым исходным кодом на базе Kubernetes без глубокого понимания технологии.



Как запустить DBaaS Percona в Google Kubernetes Engine

Google Kubernetes Engine, на мой взгляд, является одной из наиболее функциональных реализаций технологии Kubernetes. Он доступен во многих регионах мира и имеет простой и удобный инструмент командной строки (SDK), который позволяет создавать сценарии, а не управлять платформой вручную.

Чтобы наш DBaaS работал, нам нужны следующие компоненты:

  1. Кубектл.

  2. Google Cloud SDK.
  3. Интерфейс командной строки Percona DBaaS.


Установить кубектл

Устанавливаем пакет для вашей операционной системы, будем рассматривать на примере Ubuntu. Подробнее здесь .

  
  
  
  
  
  
  
  
  
  
  
  
  
  
   

sudo apt-get update && sudo apt-get install -y apt-transport-https gnupg2 curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list sudo apt-get update sudo apt-get install -y kubectl



Установка Google Cloud SDK

Устанавливаем программный пакет таким же образом.

Подробнее здесь .



# Add the Cloud SDK distribution URI as a package source echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] http://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list # Import the Google Cloud Platform public key curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key --keyring /usr/share/keyrings/cloud.google.gpg add - # Update the package list and install the Cloud SDK sudo apt-get update && sudo apt-get install google-cloud-sdk



Установка интерфейса командной строки Percona DBaaS

Установите из репозиториев Percona. Инструмент Percona DBaaS CLI Tool по-прежнему является экспериментальным продуктом, поэтому он находится в экспериментальном репозитории, который необходимо включить отдельно, даже если у вас уже установлены репозитории Percona. Подробнее здесь .

Алгоритм установки:

  1. Настройте репозитории Percona с помощью инструмента percona-release. Сначала вам нужно скачать и установить официальный пакет percona-release от Percona:

    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb sudo dpkg -i percona-release_latest.generic_all.deb

  2. Включите компонент репозитория экспериментальных инструментов следующим образом:

    sudo percona-release enable tools experimental

  3. Установите пакет percona-dbaas-cli:

    sudo apt-get update sudo apt-get install percona-dbaas-cli



Настройка работы компонентов

Подробнее о настройках здесь .

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

gcloud auth login gcloud config set project hidden-brace-236921

Далее создаем кластер.

Для демонстрации я создал кластер Kubernetes всего из трёх узлов — это минимум, необходимый для высокой доступности:

gcloud container clusters create --zone us-central1-a your-cluster-name --cluster-version 1.15 --num-nodes=3

Следующая команда kubectl предоставляет нужные привилегии нашему текущему пользователю:

kubectl create clusterrolebinding cluster-admin-binding-$USER --clusterrole=cluster-admin --user=$(gcloud config get-value core/account)

Затем мы создаем пространство имен и делаем его активным.

Пространство имен — это, грубо говоря, тоже что-то вроде проекта или среды, но уже внутри кластера Kubernetes. Он не зависит от проектов Google Cloud:

kubectl create namespace my-namespace kubectl config set-context --current --namespace=my-namespace



Запуск кластера

Выполнив эти несколько шагов, мы можем запустить кластер из трех узлов с помощью этой простой команды:

# percona-dbaas mysql create-db example Starting .

[done] Database started successfully, connection details are below: Provider: k8s Engine: pxc Resource Name: example Resource Endpoint: example-proxysql.my-namespace.pxc.svc.local Port: 3306 User: root Pass: Nt9YZquajW7nfVXTTrP Status: ready



Как подключиться к кластеру

По умолчанию он доступен только внутри Kubernetes. То есть он недоступен с того сервера, с которого вы выполнили команду «Создать».

Чтобы сделать его доступным, например, для тестов с клиентом, нужно пробросить порт через Port Mapping:

kubectl port-forward svc/example-proxysql 3306:3306 $

Затем подключаем ваш MySQL-клиент:

mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP



Расширенные команды управления кластером



База данных по публичным IP

Если вам нужно более постоянное решение для доступности кластера, вы можете получить внешний IP-адрес.

В этом случае база данных будет доступна из любого места.

Это менее безопасно, но часто более удобно.

Для внешнего IP мы используем следующую команду:

# percona-dbaas mysql create-db exposed --options="proxysql.serviceType=LoadBalancer" Starting .

[done] Database started successfully, connection details are below: Provider: k8s Engine: pxc Resource Name: exposed Resource Endpoint: 104.154.133.197 Port: 3306 User: root Pass: k0QVxTr8EVfgyCLYse Status: ready To access database please run the following command: mysql -h 104.154.133.197 -P 3306 -uroot -pk0QVxTr8EVfgyCLYse



Явно задайте пароль

Вместо того, чтобы система генерировала пароль случайным образом, вы можете установить пароль явно:

# percona-dbaas mysql create-db withpw --password=mypassword Starting .

[done] Database started successfully, connection details are below: Provider: k8s Engine: pxc Resource Name: withpw Resource Endpoint: withpw-proxysql.my-namespace.pxc.svc.local Port: 3306 User: root Pass: mypassword Status: ready

Я показываю выходные данные сценариев в удобочитаемом формате, но формат JSON также поддерживается.



Отключение высокой доступности

С помощью следующей команды вы можете отключить высокую доступность для развертывания одного узла:

# percona-dbaas mysql create-db singlenode --options="proxysql.enabled=false, allowUnsafeConfigurations=true,pxc.size=1" Starting .

[done] Database started successfully, connection details are below: Provider: k8s Engine: pxc Resource Name: singlenode Resource Endpoint: singlenode-pxc.my-namespace.pxc.svc.local Port: 3306 User: root Pass: 22VqFD96mvRnmPMGg Status: ready

Это решение для задач тестирования, позволяющее максимально быстро и легко запустить MySQL, протестировать его, а затем закрыть или использовать для разработки.

Инструмент Percona DBaaS CLI помогает вам создать решение, подобное DBaaS, в Kubernetes. В то же время мы продолжаем работать над его функциональностью и удобством использования.

Этот доклад был впервые представлен на Встреча @Databases от Mail.ru Cloud Solutions и Tarantool. Смотреть видео другие выступления и подписывайтесь на анонсы событий в Telegram Вокруг Kubernetes в Mail.ru Group .

Что еще почитать по теме:

  1. Базы данных на современной платформе IIoT.
  2. Как выбрать базу данных для проекта, чтобы не пришлось выбирать заново.

  3. Разворачиваем кластер Kubernetes на платформе Mail.ru Cloud Solutions.
Теги: #открытый исходный код #Kubernetes #базы данных #Облачные вычисления #cloud #percona #оператор Kubernetes #MySQL #mongodb #perconatoolkit #dbaas
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.