Kubernetes mariadb-operatorでクラウドネイティブなデータベース運用【構築編】

目次

はじめに

Kubernetesの普及に伴い、クラウドネイティブなデータベース運用も重要な課題となっています。そこで今回は「mariadb-operator」について検証しました。

Kubernetes Operators for MariaDB – MariaDB Knowledge Base

mariadb-operator は、クラウド ネイティブな方法で MariaDB を実行および操作できる Kubernetes オペレーターです。命令型コマンドの代わりに Kubernetes CRD を使用して MariaDB インスタンスを宣言的に管理することを目的としています。

mariadb-operatorは、Kubernetes上でデプロイやスケーリング、バックアップを自動化し、運用の手間を大幅に軽減します。
また、HAオプションとして、MaxScaleによるデータベースプロキシや、MariaDB Galera Cluster、レプリケーションがサポートされています。

他にも、S3へのバックアップやPrometheus監視など、以下の機能をサポートしています。(一部抜粋)

mariadb-operator/mariadb-operator: 🦭 Run and operate MariaDB in a cloud native way

  • 複数のバックアップ ストレージ タイプ: S3 互換、PVC、Kubernetes ボリューム。
  • mysqld-exporterおよび maxscale-exporter 経由のPrometheus メトリック。

ライセンスについて

MariaDB部分については基本的にオープンソースとなりますが、例外的に、MaxScaleにはBSL(Business Source License)ライセンスが指定されていますので、商用利用についてはライセンス料が発生する場合があります。

mariadb-operator/docs/MAXSCALE.md at main · mariadb-operator/mariadb-operator

MaxScale 23.08 is licensed under Business Source License. Make sure you understand the implications before using it!

BSLライセンスの基本的な考え方については、以下のMariaDB公式ブログをご参照ください。
BSL(Business Source License) | MariaDB

MariaDB Server, MariaDB ColumnStore インスタンス数が3未満の場合はいかなる目的にも利用可能

環境構築

前提となるソフトウェア類をインストールします。
詳細説明は公式リファレンスに譲り、ここでは割愛させていただきます。

RHEL | Docker Docs

Install and Set Up kubectl on Linux | Kubernetes

kind – Quick Start

mariadb-operatorのインストール

今回の検証用に新しくmariadb-operatorというNamespaceを作成します。

早速、mariadb-operatorのインストールをしていきます。Custom Resource Definitions(CRDs)と、Operatorの以下の二つが必要です。

  • mariadb-operator-crds
  • mariadb-operator

helm、OLM、または直接マニフェストを使用してインストールができます。
今回はhelmを利用するので、以下のようにリポジトリを登録しインストールを実行します。

検証時でのmariadb-operatorバージョンは0.37.1です。
また、CRDsおよびOperatorの作成が確認できます。

MariaDBシングルインスタンス環境の作成

マニフェストを使って、各リソースを作成していきます。

サンプルマニフェストは、Gitリポジトリのexamples/manifests配下にあり、指定可能なパラメータはAPI_REFERENCEで説明されています。

まずは、サンプルマニフェストをGitHubリポジトリから取得してしまいましょう。

Quickstartでも紹介されている、基本形のMariaDBシングルインスタンス環境を作成していきます。

rootパスワード用にmariadb-secret.yamlテンプレートと、MariaDBをmariadb.yamlテンプレートを使用して作成します。

作成されたリソースを確認します。

完了までに時間がかかるので、--watchオプションで経過を観察するのが良いでしょう。
MariaDBリソースの「READYがTrue、STATUSがRunning」となったのを確認したら無事に起動完了です。
途中でエラーが出ていますが、最終的にRunningなのでここでは無視でOKとします。

MariaDBリソースを作成すると以下の付随するリソースが作成されます。

  • StatefulSet: mariadbd
  • Secret : mariadb認証用
  • ConfigMap : mariadb設定ファイル
  • Service : mariadbへの接続

(一部出力を省略)

今回作成に使用したマニフェストは以下の通りです。

  • 2つのDBパスワードを管理するSecretリソースを作成します。
    Secretに平文やbase64 encodeされた値を記載するのはセキュリティ上望ましくないため、本番で利用する場合はkubesecの利用をご検討ください。

    config/mariadb-secret.yaml

  • 次に、基本的なMariaDBリソースのマニフェストとなります。
    rootPasswordSecretKeyRefセクションに上記で作成するSecretを指定しています。

    mariadb.yaml

テストデータの作成

データベース作成、ユーザー作成、権限付与には、
Database、User、Grantリソースを作成していきます。

それぞれのリソースが作成されています。

今回作成に使用したマニフェストは以下の通りです。

  • sqljobという名前のユーザーを作成します。
    sqljobs/0_user.yaml

  • sqljobという名前のデータベースを作成します。
    sqljobs/1_database.yaml

  • sqljobユーザーに、sqljobデータベースに対するALL PRIVILEGES権限を付与します。
    sqljobs/2_grant.yaml

SQLジョブ

SQL文を実行するにはSQLジョブを作成します。

それぞれのリソースが作成されます。
完了までに時間がかかるので、--watchオプションで経過を観察するのが良いでしょう。
03-starsの1回目のSuccessが表示されたらwatchを止めてOKです。

今回作成に使用したマニフェストは以下の通りです。

  • usersテーブルを作成し、テストデータをINSERTするSQL文を実行します。
    sqljobs/sqljob_01-users_tls.yaml

  • 01とほぼ同じなので省略します。
    sqljobs/sqljob_02-repos.yaml

  • 上記2つは一度きり実行のJobリソースであるのに対し、こちらは1分ごとにJob作成を繰り返すCronJobリソースとなっています。
    sqljobs/sqljob_03-stars.yaml

01と02のJobはそれぞれ1個、03のCronJobは1分ごとに1個作成されていることが確認できます。

接続確認

Kubernetesクラスタ内部から各MariaDBコンテナへは、ServiceによるFQDNでアクセス可能です。

(一部出力を省略)

Serviceリソースが2つあります。

  • mariadb-internalはクラスタ内部専用の3306ポートを利用してアクセス可能なサービスです。ただし、Headlessのため、CLUSTER-IPはNoneとなっており、DNS経由でPodのIP(エンドポイント)に直接アクセス可能です。
  • mariadbはNodePort(例:31477ポート)を利用して外部からアクセス可能なサービスです。

サービス経由では、mariadb-internal.mariadb-operator.svc.cluster.localのようなFQDNでアクセスします。
個別のコンテナへの接続は、mariadb-0.mariadb-internal.mariadb-operator.svc.cluster.localと先頭にPod名を付けてあげる形になります。

接続確認してみましょう。

SQLジョブで投入したユーザー権限およびデータも確認できます。

補足:MariaDBバージョン指定方法

MariaDBリソースのコンテナはDockerレジストリのMariaDB公式イメージを使用しています。

現在、デフォルトでmariadb:11.4.4バージョンが使用されていますが、これは.spec.imageで指定が可能です。

ただし、MariaDB公式イメージのバージョン10.5以上のみがサポートされています。
mariadb-operator/README.md at main · mariadb-operator/mariadb-operator

MariaDB compatibility
MariaDB Community >= 10.5

まとめ

今回は構築編ということで、Operatorのインストール、MariaDBコンテナの作成、SQL実行を試してみました。
どれも、マニフェストを適用するだけで簡単に作れてしまいます。
スケーラビリティと自動化を両立させた MariaDB Operatorで、クラウドネイティブなデータベース管理を体験してみませんか?

 

スマートスタイルTECHブログについて

スマートスタイルTECHブログでは、日頃オープンソースデータベースのサポート業務に従事している有資格者で構成された技術サポートチームがMariaDBに関する技術情報を発信しています。データベースのお困りごとはお気軽にご相談下さい。

よかったらシェアしてね!
  • URLをコピーしました!
目次