アーキテクチャの概要
UPM は、古典的な「ハブ・エージェント」アーキテクチャパターンを採用しており、管理プラットフォーム層と実行エンジン層という 2 つの主要なレイヤーで構成されています。このアーキテクチャは、強力でモジュール化された拡張性の高いプラットフォームを維持しながら、Kubernetes のマルチクラスタ・オーケストレーションを効果的にサポートします。UPM は分散型の設計や命令型のアーキテクチャから脱却し、Kubernetes ネイティブの「ハブ・kubelet」アーキテクチャと整合する「ハブ・エージェント」パターンを採用しています。この設計では、管理プラットフォーム層が「ハブ」として機能し、管理対象の各クラスタが「エージェント」として動作します。UPM の 2 つのコアコンポーネントを見ていきましょう:
-
UPM Platform:中央のコントロールプラットフォームとして機能し、外部 API インターフェースを提供するとともに、ワークフローを通じて Kubernetes API リソースオブジェクト(CR)を管理します。マイクロサービス・アーキテクチャ上に構築されており、さまざまなデータベースやミドルウェアの運用要件に合わせて効率的にスケールします。
-
UPM Engine:実行エンジンとして機能し、Kubernetes Operator フレームワークを用いて構築されています。この Kubernetes ベースの拡張スイートは、主にステートフルサービスの自動化と、データアプリケーションの高度な運用自動化に焦点を当てています。独自開発の 2 つの Operator で構成され、多様なデータベースの種類やマルチデータベース・クラスタ構成に対応できる汎用的なワークロード設計を備えています。
このアーキテクチャの利点により、マルチクラスタの運用を次の 2 つの側面に切り分けることができます:
- 計算/意思決定
- 実行
この分離により、UPM Engine が実際のクラスタでの実行タスクを担い、UPM Platform はワークフローを通じたタスクのオーケストレーションとインターフェース管理に専念できます。UPM Engine は直接実行するのではなく、CRD を通じてクラスタの状態を宣言的に維持します。UPM Platform は Kubernetes から CRD のステータスを能動的に監視し、それに応じて後続のタスクをオーケストレーションします。
この設計により、UPM Platform の運用負荷は次の点で大幅に軽減されます:
- Kubernetes クラスタからのイベントの洪水を処理する必要がなくなる
- 個々の Kubernetes クラスタへの直接リクエスト量が減る
たとえるなら、kubelet なしで 5,000 ノードの Kubernetes クラスタを管理し、コントロールプレーンがコンテナデーモンを直接操作する状況を想像してください。そのような集中制御は極めて困難です。UPM は実行を個々のエージェントに分散させることでこのスケーラビリティの課題を解決し、UPM Platform が複数のクラスタを効率的に管理できるようにしています。
UPM Platform のアーキテクチャ
UPM Platform は中核となるコントロールセンターとして、外部 API インターフェースの提供と実行ワークフローの管理を担います。マイクロサービス・アーキテクチャ上に構築され、卓越したスケーラビリティと柔軟性を備えています。
アーキテクチャ
UPM Platform の概要
UPM Platform は中核となるコントロールセンターとして、外部 API インターフェースの提供と実行ワークフローの管理を担います。マイクロサービス・アーキテクチャ上に構築され、卓越したスケーラビリティと柔軟性を備えています。
コアコンポーネント
UPM Platform は、次の 3 つの主要コンポーネントで構成されています:
-
UPM UI:直感的な Web ベースのダッシュボードを通じて、管理者に包括的な制御・監視機能を提供する統合管理インターフェース。
-
UPM API-Server:SpringCloud マイクロサービス・フレームワーク上に構築された管理の中核。次の機能を提供します:
- 管理操作のための RESTful API エンドポイント
- MySQL ベースのデータ永続化
- クエリ性能を最適化する Redis によるキャッシュ
-
Helix:データベースやミドルウェアサービスの機能を拡張する、拡張可能なプラットフォームコンポーネント。現在は MySQL のユーザー管理とデータベース管理機能をサポートしています。
マイクロサービス・アーキテクチャ
UPM API-Server は、管理の中核として極めて重要な役割を担っています。そのマイクロサービス・アーキテクチャは、現在の運用要件と、オープンソースコミュニティから生まれる新たなサービス管理ニーズの両方を満たすよう設計されています。
アーキテクチャ上の主なメリット:
- 機能を、焦点の明確な凝集度の高いサービスに分割
- サービス間の疎結合
- サービスごとに独立したデータベース
- API ベースの通信
- サービス単位でのスケーラビリティ
- 開発、デプロイ、テスト、スケーリングをそれぞれ独立して実施可能
マイクロサービス・モジュール一覧
| 項番 | 名称 | 説明 |
|---|---|---|
| 1 | Gateway API | 外部からのリクエストを受け付け、対応するマイクロサービス・モジュールへルーティングします |
| 2 | Auth | ユーザー認証と権限管理を担います |
| 3 | Resource | プロジェクト、Kubernetes クラスタ、ノード、ストレージクラス、ソフトウェアなどのシステムリソースを管理します |
| 4 | User | ユーザー情報の管理と操作を担います。 |
| 5 | OperatorLog | システムの操作ログを記録し、システム操作を追跡できるようにします。 |
| 6 | MySQL service | MySQL データベースの運用・保守ワークフローの制御と管理機能を包括的に提供します。 |
| 7 | Redis service | Redis キャッシュの運用・保守ワークフローの制御と管理機能を包括的に提供します。 |
| Redis-Cluster service | Redis クラスタキャッシュの運用・保守ワークフローの制御と管理機能を包括的に提供します。 | |
| 8 | Kafka service | Kafka イベントストリームの運用・保守ワークフローの制御と管理機能を包括的に提供します。 |
| 9 | Zookeeper service | Zookeeper サービスディスカバリの運用・保守ワークフローの制御と管理機能を包括的に提供します。 |
| 10 | Elasticsearch service | Elasticsearch 検索エンジンの運用ワークフローの制御と管理機能を包括的に提供します。 |
UPM Engine の概要
UPM Engine は実行層として機能し、Kubernetes Operator フレームワークを用いて構築されています。この Kubernetes ベースの拡張スイートは、ステートフルサービスの自動化と、データアプリケーションの高度な運用自動化に特化しています。
アーキテクチャ
コアコンポーネント
UPM Engine は、次の 2 つの主要コンポーネントで構成されています:
-
Unit Operator(コードネーム:Tesseract Cube):データベースやミドルウェアのステートフルサービスを次の点で強化する汎用ワークロード Operator:
- 統合されたワークロード管理(Unit と UnitSet)
- テンプレートベースのサービス定義
- 特定のサービス種別やバージョンに合わせた拡張可能な構成
-
Compose Operator(コードネーム:Kauntlet):カスタムリソース定義(CRD)を通じて複雑な運用機能を拡張する、高度な運用のための Operator。
Operator の設計思想
私たちの Operator 設計は、ロボティクスやオートメーションにおける制御ループの概念に基づいています。Kubernetes 環境では:
- コントローラーがクラスタの状態を継続的に監視する
- システムは絶え間ない変化をスムーズに処理する
- 複数のコントローラーが、クラスタ状態の特定の側面をそれぞれ管理する
- 複雑に相互接続されたコントローラーよりも、シンプルで役割の明確なコントローラーのほうが高い信頼性をもたらす
Unit Operator の詳細
Unit Operator(コードネーム:Tesseract Cube)は、次の仕組みによってデータベースとミドルウェアのワークロード管理を統合します:
Unit の管理
Unit は完全なサービスインスタンスを表し、次の要素を含みます:
- Pod の定義
- Service の構成
- 永続ストレージ
- ライフサイクル管理
UnitSet の運用
UnitSet はステートフルなデータベースインスタンスの集合を管理し、次の機能を提供します:
- デプロイとスケーリング
- 永続ストレージの管理
- 構成のテンプレート化
- セキュリティ機能(暗号化、認証)
- ローリングアップデートのポリシー
Compose Operator の機能
Compose Operator(コードネーム:Kauntlet)は、専用の CRD を通じて Kubernetes のデータベース管理機能を拡張します:
サポートする機能
-
MySQL レプリケーション管理
- リーダー/フォロワー・トポロジーの管理
- 自動フェイルオーバー
- 読み書き分離
- レプリケーションの監視
-
Redis レプリケーション管理
- リーダー/フォロワー構成
- Sentinel アーキテクチャのサポート
- 自動フェイルオーバー
- 状態の監視
-
Redis Cluster 管理
- クラスタ構成の自動化
- 動的なスロット割り当て
- 高可用性機能
- パフォーマンスの最適化
-
ProxySQL の同期
- トポロジーの監視
- MySQL サーバーの構成
- ユーザーの同期
- ロードバランシング
- フェイルオーバー管理
Compose Operator は、高可用性と運用効率を確保しながら、データベースクラスタの管理を大幅に簡素化します。拡張可能な設計により、特定の運用要件に合わせた独自の機能を追加することもできます。