Raspberry Pi 4クラスタで分散ファイルシステム構築 後編 ストレージ構築

前回構築しました、Cephクラスタ。

Raspberry Pi 4クラスタで分散ファイルシステム構築 前編 OSD構築
Raspberry Pi 4 3台にSSDを取り付けまして。 分散ファイルシステムを構築してみようと思います。各ノードでOSD...

ざっくり、次の使い方がある、という認識ですが。

  1. ブロック・ストレージ(RBD)
  2. ファイルシステム・ストレージ(CephFS)
  3. オブジェクト・ストレージ(RGW)
  4. NFS・ストレージ

正直、クラスタ初心者なもので、何もわかっていません。

どう使うか、どう運用するを決めるにあたり。

正しい認識を得るための、公式情報リンクを記録させて頂こうと思います。


Cephクラスタのストレージコンフィグレーションについて調査

ざっくり。NFSサーバとして使用したい場合は、実は簡単にできそうな感じがあります。

またS3・Swift APIによるオブジェクト・ストレージを作る場合も、あと少しで作れそうな感じがします。

それ以外の、ブロック/ファイルシステム・ストレージとして使用したい場合は、Kubernetesの永続ボリュームについて、少し調べておいたほうが良さそうです。

PersistentVolumeのアクセスモードの差異

こちらの情報から。

ストレージを、「ReadWriteOnce」で使いたいか「ReadOnlyMany」「ReadWriteMany」で使いたいか。を考えておいたほうが良さそうです。

  • ReadWriteOnce
    • ボリュームは単一のNodeで読み取り/書き込みとしてマウントできます
  • ReadOnlyMany
    • ボリュームは多数のNodeで読み取り専用としてマウントできます
  • ReadWriteMany
    • ボリュームは多数のNodeで読み取り/書き込みとしてマウントできます
  • ReadWriteOncePod
    • ボリュームは、単一のPodで読み取り/書き込みとしてマウントできます。クラスター全体で1つのPodのみがそのPVCの読み取りまたは書き込みを行えるようにする場合は、ReadWriteOncePodアクセスモードを使用します。これは、CSIボリュームとKubernetesバージョン1.22以降でのみサポートされます。
ボリュームプラグインReadWriteOnceReadOnlyManyReadWriteMany
CephFS
CSIドライバーに依存ドライバーに依存ドライバーに依存
NFS
RBD-

ふむふむ。

こちらを拝見しますと。

ファイルシステム・ストレージ(CephFS)を作れば、ReadWriteManyに対応できそうです。これはつまり、複数のポッドから、同時に読み書きが可能という意味になります。

NFSサーバを作り、そちらに永続ボリュームを保存した場合も、ReadWriteManyに対応できそうですが。こちらは、クラスタではない外部に用意したNFSサーバと通信するのと同じ扱いになります。

一方、ブロック・ストレージ(RBD)は、ReadOnlyManyに対応しますが、ReadWriteManyには対応していません。つまり、複数のポッドから、同時に書き込みはできない、ということになります。あくまでも、書き込みは1つのポッドから。

またブロック・ストレージは、いちど書き込んだエリアを再利用できないと思います。つまり、使用すれば使用するほどストレージを消費する一方、ファイル削除に相当する操作はできず、一方的に減ってゆくイメージです。

このあたりを踏まえまして。

Cephクラスタを永続ボリュームとして使用したい場合、適切にRBD・CephFS・NFSを選択すれば良いのかと思います。


Cephクラスタの各種設定手順

ブロック・ストレージ(RBD)

まずはブロック・ストレージとして使う場合ですが。

storageclass.yamlを使用して、StorageClassを作成すれば良いという感じでしょうか。

kubectl create -f deploy/examples/csi/rbd/storageclass.yaml

rook.gitのexampleフォルダの上記のYAMLファイルが、ブロック・ストレージとしてCephクラスタを使用する設定になります。

あとはPVCを使用するポッドを作成すれば、StorageClassを介してブロック・ストレージを使用できそうです。

注意点は、アクセスモードはRWOになること、ブロック・ストレージということで、一方的に使用量が増えてゆく、あたりでしょうか。(確証なし

詳細は、上記の公式ドキュメントでご確認ください。


ファイルシステム・ストレージ(CephFS)

公式情報はこちらになります。

ファイルシステム作成

exampleフォルダのfilesystem.yamlにより、ファイルシステムを作成できるようです。

cd rook/deploy/examples
kubectl create -f filesystem.yaml
# mdsポッドができるまで待ちます
kubectl -n rook-ceph get pod -l app=rook-ceph-mds

30秒ほどで、mdsポッドが起動しました。

ステータスを確認してみます。

kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- bash
ceph status

services欄を見ますと、mdsデーモンが起動していることがわかります。

確かにファイルシステムが作成されています。

ストレージの支給(プロビジョン)

作成したファイルシステムを永続ボリュームとして使用できるようにするには、csi/cephfsディレクトリにあるstorageclass.yamlファイルを使用するようです。

kubectl create -f csi/cephfs/storageclass.yaml

ストレージクラスを確認してみます。

ふむふむ。

まだ試していないため、推測で恐縮ですが。CephFSによるファイルシステムにより、こちらのストレージクラスを使用して、ReadWriteMany/ReadOnlyMany/ReadWriteOnceすべてに対応した永続ボリュームを使用することができるのかと思います。

この時点で、永続ボリュームを使用したポッドを運用する準備ができた、のかなと思います。(手探り

デフォルトストレージクラスの変更

※23.7.17追記:

作成したCephfsのストレージクラスですが。どうも既定の状態では、PVCが発生してもPVを割り当ててくれません。

原因は「デフォルト・ストレージクラスではないから」のようです。資料はこちらになります。

下記のコマンドで、作成したrook-cephfsストレージクラスをデフォルトにしたところ、PVCにより自動でストレージが使用されるようになりました。

kubectl get storageclass
kubectl patch storageclass rook-cephfs -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
kubectl get storageclass

このような感じで、実際にPVが作成されます。

ファイルシステムの削除

ファイルシステムを削除する場合の覚書です。

kubectl -n rook-ceph delete cephfilesystem myfs

こちらはファイルシステムが不要になった場合に使用します。


オブジェクト・ストレージ(RGW)

ストレージクラスタを、S3 APIで公開する場合は、こちらの手順になります。

公式ドキュメントはこちらです。

object.yamlを使用するようです。

kubectl create -f object.yaml

その後、ユーザの作成が必要のようです。

S3を利用する方は、流れを追えるのかと思いますが。

私個人は、S3は縁遠いため、ドキュメントが全く入って来なくてすみません。

また動作を検証するには、オブジェクト・ストレージ以外にS3を利用するアプリも必要なのでしょうか。

ここでは「作れそうですよ」とのみ記載させて頂き、詳細は公式ドキュメントをご覧ください。


NFSストレージ

最後がNFSストレージです。公式ドキュメントはこちらです。

こちらは、Toolbox上の操作でNFS機能を有効化できるようです。

ceph mgr module enable rook
ceph mgr module enable nfs
ceph orch set backend rook
# NFSエクスポート作成
ceph nfs export create cephfs my-nfs /test myfs

エクスポートしたNFSは、クラスタ内からマウントが可能のようです。

もしクラスタ外にNFSを公開したい場合は、ロードバランサー・サービスによりエンドポイントを公開できるようです。

そのあたりは、deploy/examples/nfs-load-balancer.yamlファイルに記述があるそうです。

NFSサーバとして公開する場合は、別途ポッドを作成する必要はないのですね。

構成がシンプルなため、分散ファイルシステムを共有ファイルサーバとして利用したい場合は、こちらのNFSがパフォーマンス的にも期待できそうな感じがします。(推測で恐縮ですが


以上のような感じで。

先日作成したCephクラスタの使い道を、ざっとサーベイしてみました。

実際に試したのはCephFSですが、ストレージクラスを作成した段階までのため、使い勝手の評価等は、ポッドを作成して動かす必要があります。

その他に、ブロックデバイス、オブジェクト・ストレージ、NFSストレージの情報リンクを記載させて頂きましたが、身近に使う可能性があるものののみ、ピックアップさせて頂いた感じです。

公式ドキュメントには、それら以外の使用方法、たとえばファイルシステムのミラーリングや、マルチサイトのオブジェクトストア等、多くの情報が記載されています。

使いこなすには、クラスタに関する深い知識が必要と、改めて感じました。

次はクラスタでアプリ用のポッドを起動したいと考えています。(勉強中

それではまた次回!

スポンサーリンク

フォローする

スポンサーリンク