こんにちは :-)
Airitech株式会社で、インフラ寄りのシステムやアプリケーション開発を生業にしている三宅です。
普段は国立情報学研究所(NII)で利用されているCeph(OSS版)ストレージサービスの構築運用を行っているのですが、機会あってIBM Storage Cephを適用したストレージサービスの構築を行ったりしています。
それもあって、今回こちらでCephのBlogを書かせてもらうことになりました。
ここでは、実際にCephクラスタの構築や運用を行う中で色々得てきたことを書いていく予定です。
今回は、Cephクラスタの構築や運用の要となる、Ceph Orchestratorの概要について書いてみます。
Ceph Orchestratorとは
分散ストレージシステムであるCephクラスタの構築や運用では、複数の物理ホストをまたがって分散する各種サービスを一元管理するオーケストレーション機能が必須となります。
そのオーケストレーション機能を提供してくれるのが、Ceph Orchestratorとなります。
Ceph Orchestratorは、主に以下の機能を提供しています。
-
Cephクラスタの構築支援機能
-
Cephクラスタを構成する、物理ホストや各種サービス(MONやOSD、RGW、監視サービスなど)の運用管理機能
Ceph Orchestratorとして提供されているCeph Orchestrator モジュールには、下の図に記載されている2つがあります。
-
Rook Orchestrator
-
Cephadm Orchestrator
Ceph Orchestrator の使用
2つのCeph Orchestrator モジュールについて、上記のページに詳細が書かれていますが、ここで簡単に説明します。
Rook Orchestrator
Kubernetesクラスタ内にCephクラスタを構築、運用するためのOrchestratorモジュールになります。
前提として、Kubernetesクラスタを準備しておく必要があります。
Cephadm Orchestrator
KubernetesクラスタやAnsibleといったデプロイメント・ツールを必要とせず、sshコマンドを使ってCephクラスタの構築や運用を行います。
もちろん運用者がsshコマンドを直接使うことはなく、Orchestratorが提供しているcephコマンドとして隠蔽されているので使いやすくなっています。
特別な理由がない限り、このCephadm Orchestratorを用いてCephクラスタを構築・運用することが推奨されています。
私が今まで関わってきたCephクラスタ構築と運用でも、このCephadm Orchestratorを使用しています。
あと、Cephクラスタを構成するMONやOSDといった各種サービスは、コンテナとしてデプロイされます。
そのコンテナのオーケストレーションツールとして、Podmanが採用されています。
各種サービスをコンテナ化するメリットについては、次で説明します。
【補足】
これから先の説明では、Cephadm Orchestrator(以降cephadm)を使うことを前提とします。
Podmanを利用した各種サービスのコンテナ化
ここでは、Cephクラスタを構成するMONやOSDといった各種サービスについて、コンテナ化される以前の課題と、コンテナ化することのメリットについて説明します。
各種サービスがコンテナ化される以前の課題
cephadmやRookが提供されるまでは、MONやOSDなどのCephクラスタを構成する各種サービスは、コンテナではなくsystemdによって管理されるデーモンプロセスとして動作していました。
ただ動かすだけであればデーモンプロセスのままでもよいのですが、長期運用することを考えると、色々問題が出てきます。
特にCephのバージョンアップを何度か行ううちに、Cephライブラリおよび依存関係のある共通ライブラリの更新を繰り返すことで発生する、ホストOS側のライブラリ汚染が問題となってきます。(下図参照)
cephadmを使ってCephクラスタを構築すると、以下の図にあるように各種サービスがコンテナとしてデプロイされます。
コンテナエンジンにはPodmanが使用されます。
コンテナとネットワークの関係
コンテナを使ったネットワークというと、ホスト側の物理ネットワークとコンテナとの間にブリッジを挟んでNATを通して通信するブリッジモードでの事例よく見かけます。
しかしデータ同期やクライアントとの間で大量のデータのやり取りを行うCephでは、ブリッジを間に挟んでしまうと、そのブリッジがボトルネックになってしまい、性能が出なくなる問題が発生します。
そこでcephadmで構築するコンテナは、以下の図にあるようにブリッジを通さずに通信するホストモードを使っています。
コンテナをホストモードで動かす場合、ポート番号が重複しないようにする必要がありますが、この辺のポート番号管理はcephadminのオーケストレーション機能がおこなってくれます。
ポート番号の管理と連動して、firewalldの設定もオーケストレーション機能が自動的に行ってくれます。
従来のCephクラスタ構築では、セキュリティを考慮したホスト側のポートの開け閉め作業は結構面倒だったのですが、オーケストレーション機能がよしなに設定してくれるので、とても楽になっています。
構成変更による各種サービスの配置変更を行う際も、サービスの移動に合わせてポートの開け閉めを自動的に行ってくれます。