Поиск по сайту:

Как запустить MySQL в Kubernetes с оператором Oracle


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

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

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

Что такое оператор MySQL?

Оператор Oracle MySQL — это компонент, который запускается внутри вашего кластера для автоматизации инициализации базы данных. Вам не нужен оператор для использования MySQL в Kubernetes — вы можете развернуть официальный образ контейнера самостоятельно, используя StatefulSet. Однако этот подход является громоздким, так как требует создания и поддержки длинных файлов манифеста для создания надежной среды.

Оператор предоставляет набор пользовательских ресурсов, которые вы можете использовать для создания своих баз данных. При добавлении объекта InnoDBCluster в кластер Kubernetes оператору предлагается настроить для вас StatefulSets, хранилище и сеть. Он также автоматизирует обновления и резервное копирование, что значительно снижает нагрузку на администраторов.

Установка оператора MySQL

Включенная диаграмма Helm — это самый простой способ установить оператор в вашем кластере. Файлы манифеста доступны в качестве альтернативы, если в вашей среде нет Helm.

Сначала добавьте оператор в список репозиториев Helm:

$ helm repo add mysql-operator https://mysql.github.io/mysql-operator/

Затем обновите базу данных репозитория Helm, чтобы он обнаружил доступные диаграммы:

$ helm repo update

Теперь используйте следующую команду, чтобы установить оператор в новое пространство имен с именем mysql-operator:

$ helm install mysql-operator mysql-operator/mysql-operator \
    --namespace mysql-operator \
    --create-namespace
NAME: mysql-operator
LAST DEPLOYED: Sat Oct 29 15:00:26 2022
NAMESPACE: mysql-operator
STATUS: deployed
REVISION: 1
TEST SUITE: None

Процесс может занять несколько секунд.

Создание секрета учетных данных корневого пользователя

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

Скопируйте следующий манифест YAML и измените значение поля rootPassword на безопасное. Также измените имя пользователя и настройки хоста пользователя, если это применимо к вашей ситуации. Помните, что указанная здесь учетная запись будет иметь полный контроль над MySQL; вы должны настроить отдельных пользователей для своих приложений позже, используя обычную оболочку MySQL.

apiVersion: v1
kind: Secret
metadata:
  name: mysql-root-user
stringData:
  rootHost: "%"
  rootUser: "root"
  rootPassword: "P@$$w0rd"

Сохраните файл как secret.yaml. Теперь используйте Kubectl, чтобы добавить секрет в свой кластер:

$ kubectl apply -f secret.yaml
secret/mysql-root-user created

Создание базового кластера

Затем создайте новый файл YAML с именем mysql.yaml и скопируйте следующее содержимое:

apiVersion: mysql.oracle.com/v2
kind: InnoDBCluster
metadata:
  name: mysql-cluster
spec:
  secretName: mysql-root-user
  instances: 3
  tlsUseSelfSigned: true
  router:
    instances: 1

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

  • spec.secretName — должно совпадать с metadata.name секрета, который вы создали ранее. Указанный секрет будет прочитан для настройки учетной записи пользователя root MySQL.
  • spec.instances — определяет, сколько реплик MySQL (модулей) нужно запустить. В настоящее время поддерживается до 10 реплик.
  • spec.tlsUseSelfSigned — в этом примере для поля установлено значение true, чтобы использовать включенный самозаверяющий сертификат TLS. При желании вы можете указать свой собственный сертификат с помощью секрета Kubernetes, задав поля spec.tlsSecretName/spec.tlsCASecretName.
  • spec.router.instances — компонент MySQL Router отвечает за направление служебного трафика между доступными репликами MySQL. Это поле определяет, сколько экземпляров маршрутизатора нужно запустить. Использование нескольких экземпляров повысит производительность и отказоустойчивость в условиях большого трафика.

Используйте Kubectl, чтобы применить манифест и создать кластер базы данных:

$ kubectl apply -f mysql.yaml
innodbcluster.mysql.oracle.com/mysql-cluster created

Процесс инициализации MySQL может занять пару минут. Оператор использует несколько контейнеров инициализации для настройки учетных записей пользователей и настройки каталога данных MySQL. Подождите несколько секунд перед запуском kubectl get pods, чтобы проверить, что выполняется:

$ kubectl get pods
NAME                                    READY   STATUS    RESTARTS   AGE
mysql-cluster-0                         2/2     Running   0          2m
mysql-cluster-1                         2/2     Running   0          2m
mysql-cluster-2                         2/2     Running   0          2m
mysql-cluster-router-6b68f9b5cb-wbqm5   1/1     Running   0          2m

Все три реплики MySQL и один экземпляр маршрутизатора находятся в состоянии Running. Теперь база данных готова к использованию.

Подключение к вашему кластеру

Оператор MySQL создает службу Kubernetes, которая направляет трафик из модулей вашего приложения в базу данных. Службе назначается имя хоста в следующем формате:

<cluster-name>.<namespace-name>.svc.cluster.local

Правильное имя хоста для примера кластера, показанного выше, — mysql-cluster.default.svc.cluster.local. Настройте свои приложения для подключения к MySQL по этому адресу, используя порт 3306 и учетные данные пользователя, которые вы указали в секрете.

Доступ к вашей базе данных извне

Вы можете получить доступ к MySQL из-за пределов вашего кластера, используя возможности переадресации портов Kubectl. Выполните следующую команду, чтобы открыть новый сеанс переадресации портов:

$ kubectl port-forward service/mysql-cluster 3306

Замените mysql-cluster именем InnoDBCluster, к которому вы хотите подключиться. Теперь вы можете использовать свои локальные инструменты для взаимодействия с вашей базой данных:

$ mysql -h127.0.0.1 -u root -p

Нажатие Ctrl+C в окне терминала с командой kubectl port-forward закроет соединение.

Настройка параметров сервера MySQL

Вы можете указать любые параметры файла конфигурации MySQL, которые требуются вашему приложению, установив поле spec.mycnf в манифесте вашего объекта InnoDBCluster:

apiVersion: mysql.oracle.com/v2
kind: InnoDBCluster
spec:
  # ...
  mycnf: |
    [mysqld]
    max_connections=500
    innodb_ft_min_token_size=5

Оператор будет использовать значение этого поля для записи файла my.cnf в файловую систему модулей вашей базы данных.

Настройка емкости хранилища

Оператор автоматически создает Persistent Volume (PV) и Persistent Volume Claim (PVC) для хранения данных вашей базы данных. По умолчанию предоставляется 2Gi хранилища.

Это можно изменить с помощью поля манифеста datadirVolumeClaimTemplate, которое позволяет переопределить свойства ресурса PVC, созданного оператором. Задайте для свойства resources.requests.storage требуемую емкость.

apiVersion: mysql.oracle.com/v2
kind: InnoDBCluster
spec:
  # ...
  datadirVolumeClaimTemplate:
    resources:
      requests:
        storage: 10Gi

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

Закрепление версии MySQL

Вы можете закрепить конкретную версию MySQL с помощью полей spec.version и spec.router.version. Это предотвратит непреднамеренное автоматическое обновление. Выберите одну и ту же версию для своих модулей MySQL и экземпляров маршрутизатора, чтобы гарантировать совместимость.

apiVersion: mysql.oracle.com/v2
kind: InnoDBCluster
spec:
  # ...
  version: 8.0.31
  router:
    instances: 1
    version: 8.0.31

Краткое содержание

MySQL Operator от Oracle предоставляет удобный механизм для запуска баз данных MySQL в кластере Kubernetes. Вы можете подготовить новые реплицированные базы данных, создав объекты InnoDBCluster. Это намного проще, чем вручную создавать StatefulSet и сервисы, предоставляющие обычные контейнеры MySQL.

Использование оператора не мешает вам управлять MySQL или вашей средой Kubernetes. Вы можете настроить свои модули, указав свои собственные свойства манифеста в поле spec.podSpec и используя свой собственный файл конфигурации MySQL, выполнив шаги, показанные выше. Оператор также предлагает встроенную поддержку резервного копирования, позволяющую копировать базу данных во внешнее хранилище по повторяющемуся расписанию.




Все права защищены. © Linux-Console.net • 2019-2024