はじめに
今回から複数の記事にまたがってKubernetesでDBを管理するために役立つKubeBlocksというソリューションについて解説します。KubeBlocksがどんなソリューションであるか理解するとともにKubernetesでのDB管理の重要性について理解していただけると幸いです。
DBaaSとは
Kubeblocksの解説に入る前に、まず「DBaaS」と、それをKubernetes上で実現するメリットについて整理します。
DBaaS(Database as a Service)とは、クラウド上で提供されるデータベース管理サービスです。従来のデータベース管理はデータベースサーバーのセットアップからパッチ適用、バックアップ、監視といった運用タスクを手動で行う必要がありました。DBaaSを利用することで、それらの操作を簡易化・自動化することが可能になります。
KubernetesでDB管理することの重要性
DBをKubernetesで管理することによって大きく3つの利点があります。
運用プラットフォームの統一
Kubernetesにアプリケーションをデプロイして、外部でDBを管理している場合、運用するプラットフォームが分断されて運用コストが上がってしまいます。アプリケーションがデプロイされているKubernetes上でもDBを管理することで運用がシンプルになり、運用コストを抑えることができます。
高度なDB構成を簡易に構築
Kubernetesのオーケストレーション機能を活用することで、冗長性や可用性を考慮した高度なDB構成を簡易に構築することが可能です。また、DBの運用作業を自動化することが可能で、構築から運用まですべての管理を効率化することができます
ベンダーロックインの回避
特定のクラウドベンダーのDBaaSを利用すると、その特定のシステムの仕様に深く依存することになり、将来的に別の環境に移行する際の障壁が高くなります。KubernetesでDB管理する場合、YAMLファイルといった統一的なファイルを利用することで別環境でも同一のDB構成を簡単に構築することが可能です。
KubeBlocksの概要
KubeBlocksはデータベース用のオープンソースKubernetesオペレーターです。
KubeBlocksを導入することによってKubernetesクラスタ上に、DBaaSを構築することが可能です。
KubeBlocksの大きな特徴として、特定のDBに依存しない汎用的なDBオペレーターになっています。これにより、データベースのデプロイ、スケーリング、バックアップといった複雑な運用タスクが自動化されます。さらに、PostgreSQLやMySQLなど様々な種類のデータベースを、統一されたYAML記法で管理できるため、複数DBの運用が非常にシンプルかつ効率的になります。
MySQLクラスターを構築するYAMLファイルの例
apiVersion: apps.kubeblocks.io/v1
kind: Cluster
metadata:
name: test-mysql
namespace: demo
spec:
terminationPolicy: Delete
componentSpecs:
- name: mysql
componentDef: "mysql-8.0"
serviceVersion: 8.0.35
disableExporter: false
replicas: 2
resources:
limits:
cpu: '0.5'
memory: 0.5Gi
requests:
cpu: '0.5'
memory: 0.5Gi
volumeClaimTemplates:
- name: data
spec:
storageClassName: ""
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
PostgreSQLクラスターを構築するYAMLファイルの例
apiVersion: apps.kubeblocks.io/v1
kind: Cluster
metadata:
name: test-pg
namespace: demo
spec:
terminationPolicy: Delete
clusterDef: postgresql
topology: replication
componentSpecs:
- name: postgresql
serviceVersion: 16.4.0
disableExporter: true
replicas: 2
resources:
limits:
cpu: "0.5"
memory: "0.5Gi"
requests:
cpu: "0.5"
memory: "0.5Gi"
volumeClaimTemplates:
- name: data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
KubeBlocksには「kbcli」というコマンドラインツールが備わっています。これを利用することでKubeBlocksのリソースの操作をより簡単に行うことが可能です。
「kbcli」で出来る操作としてDBクラスタのバックアップの作成、kbcliの追加機能の管理、データベースクラスタのライフサイクル管理、kubeBlocks自体の管理などがあります。
KubeBlocksに対応しているDBソリューションに関してはシリーズ第2回となる次のブログ記事で、具体的な一覧と共に詳しく解説します。
KubeBlocksでDBクラスターを構築した際の構成例が以下になります:
デフォルトでは、KubeBlocks Control Planeと呼ばれるKubeBlokcsの管理を行うノードとKubeBlocks Data Planeと呼ばれるDBがデプロイされるノードに別れます。これにより高可用性を保持することが可能になります。
さらに、データベースクラスターの各レプリカをAvailability Zones(AZ)に分散させることで、災害復旧能力も高めることが可能です。
KubeBlocksの主要機能
- 様々な種類のDBクラスターのプロビジョニング・削除・起動・停止・再起動
- 幅広いDay-2 オペレーション
- 水平スケーリング
- 垂直スケーリング
- DBクラスターが使用しているPVCの拡張
- バックアップ・リストア
- DB構成の変更
- DBインスタンスの移行
- ローリングアップデート
- Prometheusと連携した監視
他類似OSSDB管理ソリューションとの比較
Kubernetes上でデータベースを管理するためのオペレーターはいくつか存在しますが、ここでは代表的なオープンソースのオペレーターであるKubeDB, Percona Everest, StackGresとKubeBlocksを比較し、それぞれ特徴と最適なユースケースを探ります。
この比較表から分かるように、各オペレーターには得意分野があります。
KubeDB
KubeDBは、非常に多くのデータベースをサポートする汎用性の高いオペレーターです 。運用機能も豊富で、GitOpsとの連携も可能です 。ただし、オープンコアモデルを採用しており、バックアップや監視などの多くの高度な機能は有償のエンタープライズ版でのみ利用可能という点に注意が必要です 。
Percona Everest
Percona Everestは、Perconaが提供するデータベース(PostgreSQL, MySQL, MongoDB)に特化しています 。最大の特徴は、Perconaの強力な監視ツール「PMM (Percona Monitoring and Management)」と深く連携し、クエリ分析など高度な監視を容易に実現できる点です 。直感的なWeb UIも提供されており、CLI操作に不慣れなユーザーでも扱いやすいのが魅力です 。
StackGres
StackGresは、対応データベースをPostgreSQLに絞ることで、その運用を極限まで自動化・最適化することに特化したオペレーターです 。高可用性を実現するPatroniや接続プーリングを行うPgBouncerが標準で統合されており、150以上の拡張機能が利用可能です 。PostgreSQLをメインで利用する開発チームにとって、最も高機能な選択肢の一つと言えるでしょう。100%オープンソースであることも大きな特徴です 。
おわりに
本記事では、Kubernetes上でDBaaSを実現するソリューションとして、オープンソースの汎用データベースオペレーター「KubeBlocks」を解説しました。KubeBlocksは、特定のデータベースに依存しない高い汎用性を持ち、多種多様なデータベースを統一された手法で効率的に管理できる非常に強力なツールです。
- 多様なデータベースを運用している環境
- 運用をシンプルに統一したいチーム
上記のようなニーズを持つチームにとって、KubeBlocksは最適な選択肢の一つとなるでしょう。今後もKubeBlocksについての解説ブログを掲載していくのでよろしくお願いします。
参考文献
KubeBlocks公式ドキュメント:
https://kubeblocks.io/docs/preview/user_docs/overview/introduction
KubeDB公式ドキュメント:
Percona Everest公式ドキュメント:
https://www.percona.com/software/percona-everest
StackGres公式ドキュメント:
https://stackgres.io/features/
kbcliコマンドリファレンス: