クラウドじゃなくてKubernetesを手元で試してみたい、という場合、Dynamic PVとLoad Balancerはちょっとハードルが高い印象です。
2年近く前にこのようなことを呟いているが、今でもこのおすすめセットは変わりません
— jyoshise (@jyoshise) 2020年6月2日
いろいろ試す上でPVCは絶対必要になるし、Ingress使おうがIstio使おうがサービスにクラスタ外からアクセスしようとするとType:LoadBalancerはあると便利なので、まずはこのセットで下回り作ってからいろいろ試そう https://t.co/0IhFK6keH9
Dynamic PVにはrook-cephがよいようなのですが、そもそもCephを知らない、ということで、まずはVMレベルで試してみました。
目次
- 目次
- Cephとは?
- Cephのクラスタ構築・管理ツール「cephadm」
- 構成
- Vagrantfile
- cephadmのインストール
- クラスタの作成
- OSDの追加
- ホスト&OSDの追加
- ファイルシステムの作成
- クライアントからマウントする
- まとめ
- 参考
Cephとは?
分散ストレージソフトウェアというやつです。特徴は以下。
- 複数の方法でストレージにアクセスできる
- オブジェクトストレージ(Amazon S3互換)
- ブロックデバイス
- ファイルシステム
- 拡張性と信頼性が高い
これを実現するためにCephのクラスタでは複数のコンポーネントが動作しているようです。
- MON(Monitoring Daemon)
- クラスタの管理を行う
- OSD(Object Storage Daemon)
- ディスクへの読み書きやレプリケーションなど
- ディスクごとに起動する
- MDS(Meta Data Server)
- メタデータサーバ
- ファイルシステムとして使う場合のみ使用
全て冗長化が可能になっているようです。
Cephのクラスタ構築・管理ツール「cephadm」
最初にKuberentesでやりたい、ということで調べてみると"rook-ceph"というキーワードが出てくる。さらっと調べてみたけど、cephそのものの基礎知識もないせいか、全くわからなかった。以下を読むととてもわかりやすかった。
雑なまとめだとこんな感じ。
- cephでストレージクラスタを構築・運用するのはとても大変。公式ツールもなく、いろいろ管理ツールが乱立。
- コンテナ化の波が来た。Cephもコンテナベースで。
- Kubernetes向けにはrook
- それ以外にはcephadm
最終的にやりたいのはKubernetes向けストレージクラスタなのだけど、まずはcephに慣れてみようということで、今回はcephadmでやってみます。
構成
- Vagrantで構築
- VMは3台+1台。OSはUbuntu bionic。
- cephのコンポーネント郡がまだよくわかってないけど、冗長化するなら最低3台は必要っぽいので。MON/OSDは兼用で。あとは作りながら考える。
- cephのホストは最低でも2GBのメモリが必要です。
- 残り1台はクラスタ外からストレージに接続するクライアント想定
- VM間はプライベートネットワーク経由で接続
以下にVagrantfileを用意しました。
$ git clone https://github.com/kun432/vagrant-ceph.git $ cd vagrant-ceph $ vagrant up
Vagrantfile
Vagrantfileについて少し補足。
各nodeにはcephで使用する専用のディスクを割り当てる必要があります。Vagrantでは、experimentalだけどディスクの追加を行えるようになっていました。
/dev/sda, /dev/sdbはubuntu bionicのVagrant boxがもともと持っているもので、今回追加したのは/dev/sdcの10GB。これをcephのストレージとして使います。
vagrant@node-1:~$ sudo fdisk -l Disk /dev/sda: 40 GiB, 42949672960 bytes, 83886080 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x0cb2ba1a Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 83886046 83883999 40G 83 Linux Disk /dev/sdb: 10 MiB, 10485760 bytes, 20480 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk /dev/sdc: 10 GiB, 10737418240 bytes, 20971520 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes
あと、vagrant-hostmanagerプラグインを追加しています。
Vagrant.configure("2") do |config| config.vagrant.plugins = ["vagrant-vbguest", "vagrant-hostmanager"] config.hostmanager.enabled = true config.hostmanager.manage_host = true config.hostmanager.manage_guest = true (snip)
これにより、各VM間およびホスト側からも名前でアクセスができます。
その他、scripts以下のスクリプトで基本となるパッケージの追加や設定などを行っています。ただしcephについては何もしてません。
- パッケージの最新化
- chrony(時刻同期)のインストール
- docker-ceのインストール
cephadmのインストール
クラスタの作成およびcephadmのインストールは、cephノードとなる3台のうち1台で行おうと思います。node-1にsshします。
$ vagrant ssh node-1 vagrant@node-1:~$
cephadmのインストール。公式手順に従いつつ勧めます。
ceph公式のaptレポジトリを追加します。
$ curl --silent https://download.ceph.com/keys/release.asc | sudo apt-key add - $ sudo apt-add-repository https://download.ceph.com/debian-pacific $ sudo apt-get update
cephadmをインストールします。
$ sudo apt install -y cephadm
クラスタの作成
ではクラスタを作成します。クラスタの作成はcephadm bootstrap
で行います。--mon-ip
は、Vagrantのプライベートネットワーク側のIPアドレスを指定します。
$ sudo cephadm bootstrap --mon-ip 10.10.0.21 Creating directory /etc/ceph for ceph.conf Verifying podman|docker is present... Verifying lvm2 is present... Verifying time synchronization is in place... Unit chrony.service is enabled and running Repeating the final host check... podman|docker (/usr/bin/docker) is present systemctl is present lvcreate is present Unit chrony.service is enabled and running Host looks OK Cluster fsid: d3ff50c0-1eb9-11ec-87bb-02d610efa747 Verifying IP 10.10.0.21 port 3300 ... Verifying IP 10.10.0.21 port 6789 ... Mon IP `10.10.0.21` is in CIDR network `10.10.0.0/24` - internal network (--cluster-network) has not been provided, OSD replication will default to the public_network Pulling container image quay.io/ceph/ceph:v16... Ceph version: ceph version 16.2.6 (ee28fb57e47e9f88813e24bbf4c14496ca299d31) pacific (stable) Extracting ceph user uid/gid from container image... Creating initial keys... Creating initial monmap... Creating mon... Waiting for mon to start... Waiting for mon... mon is available Assimilating anything we can from ceph.conf... Generating new minimal ceph.conf... Restarting the monitor... Setting mon public_network to 10.10.0.0/24 Wrote config to /etc/ceph/ceph.conf Wrote keyring to /etc/ceph/ceph.client.admin.keyring Creating mgr... Verifying port 9283 ... Waiting for mgr to start... Waiting for mgr... mgr not available, waiting (1/15)... mgr not available, waiting (2/15)... mgr not available, waiting (3/15)... mgr is available Enabling cephadm module... Waiting for the mgr to restart... Waiting for mgr epoch 5... mgr epoch 5 is available Setting orchestrator backend to cephadm... Generating ssh key... Wrote public SSH key to /etc/ceph/ceph.pub Adding key to root@localhost authorized_keys... Adding host node-1... Deploying mon service with default placement... Deploying mgr service with default placement... Deploying crash service with default placement... Deploying prometheus service with default placement... Deploying grafana service with default placement... Deploying node-exporter service with default placement... Deploying alertmanager service with default placement... Enabling the dashboard module... Waiting for the mgr to restart... Waiting for mgr epoch 9... mgr epoch 9 is available Generating a dashboard self-signed certificate... Creating initial admin user... Fetching dashboard port number... Ceph Dashboard is now available at: URL: https://node-1.internal:8443/ User: admin Password: rhpbkxfmny Enabling client.admin keyring and conf on hosts with "admin" label You can access the Ceph CLI with: sudo /usr/sbin/cephadm shell --fsid d3ff50c0-1eb9-11ec-87bb-02d610efa747 -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyring Please consider enabling telemetry to help improve Ceph: ceph telemetry on For more information see: https://docs.ceph.com/docs/pacific/mgr/telemetry/ Bootstrap complete.
インストールが完了したようです。クラスタの状態を確認してみましょう。
cephadmにはshellサブコマンドがあり、これを経由してcephのコマンドを実行できるようです。クラスタの状態を確認するのはceph statusコマンド(ceph -sでもOK)になります。
$ sudo cephadm shell -- ceph status Inferring fsid d3ff50c0-1eb9-11ec-87bb-02d610efa747 Using recent ceph image quay.io/ceph/ceph@sha256:10da7d95802d2a75e83fc0f6a2eaa11e3159371c3dea40875947c8be6ad4a9e6 cluster: id: d3ff50c0-1eb9-11ec-87bb-02d610efa747 health: HEALTH_WARN OSD count 0 < osd_pool_default_size 3 services: mon: 1 daemons, quorum node-1 (age 3m) mgr: node-1.hsnpph(active, since 39s) osd: 0 osds: 0 up, 0 in data: pools: 0 pools, 0 pgs objects: 0 objects, 0 B usage: 0 B used, 0 B / 0 B avail pgs:
これを見ると、
- MONが1台動作している。
- OSDは0。デフォルトは3台なので警告が出ている。
なのがわかります。
また、クラスタ初期化時のメッセージを見ると、GUIの管理画面もあるようです。
(snip) Ceph Dashboard is now available at: URL: https://node-1.internal:8443/ User: admin Password: rhpbkxfmny (snip)
vagrant-hostmanagerプラグインを使っていれば"node-1.internal"でアクセスできます。ただし、Chromeを使っている場合は自己証明書のサイトにはアクセスできないので、以下を参考に。
ログイン画面が表示されましたので、さきほど表示されていたユーザ名・パスワードでログインします。
初回はパスワードの変更が必要になります。
変更したパスワードでログインします。
ログインできました!
OSDの追加
ceph statusの結果や、管理画面にも出ているように、OSDは最低3つ必要になります。
クラスタ作成したnode-1および残りの2台を使って、OSDを作成していきます。まずnode-1から。
cephのOSDに追加できるデバイスを確認するにはceph orch device ls
コマンドを実行します。
vagrant@node-1:~$ $ sudo cephadm shell -- ceph orch device ls Inferring fsid d3ff50c0-1eb9-11ec-87bb-02d610efa747 Using recent ceph image quay.io/ceph/ceph@sha256:10da7d95802d2a75e83fc0f6a2eaa11e3159371c3dea40875947c8be6ad4a9e6 Hostname Path Type Serial Size Health Ident Fault Available node-1 /dev/sdc hdd 10.7G Unknown N/A N/A Yes node-1 /dev/sdb hdd 10.4M Unknown N/A N/A No
node-1上で使用可能なディスクの一覧が表示されます。"Available"がYesになっているものがOSDとして追加可能なようです。ceph用にVMに追加した/dev/sdcがAvailableになっていますね。
ではこれを追加します。OSDの追加はceph orch daemon add osd
コマンドです。ホスト名とディスクを指定します。
$ sudo cephadm shell -- ceph orch daemon add osd node-1:/dev/sdc Inferring fsid d3ff50c0-1eb9-11ec-87bb-02d610efa747 Using recent ceph image quay.io/ceph/ceph@sha256:10da7d95802d2a75e83fc0f6a2eaa11e3159371c3dea40875947c8be6ad4a9e6 Created osd(s) 0 on host 'node-1'
追加できました。OSDが作成されたかどうかを確認します。cephではOSDをサーバとディスクでツリーとしてグループ分けするようです。このツリーの状態を見るにはceph osd tree
コマンドを実行します。
$ sudo cephadm shell -- ceph osd tree Inferring fsid d3ff50c0-1eb9-11ec-87bb-02d610efa747 Using recent ceph image quay.io/ceph/ceph@sha256:10da7d95802d2a75e83fc0f6a2eaa11e3159371c3dea40875947c8be6ad4a9e6 ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF -1 0.00980 root default -3 0.00980 host node-1 0 hdd 0.00980 osd.0 up 1.00000 1.00000
node-1のディスクが追加されているようです。
ホスト&OSDの追加
ではこのツリーに他のホストのディスクを追加していきます。
公式のドキュメントを見ていると、クラスタを作成したcephホスト上にある公開鍵を新しいホストのrootユーザで使えるようにしておく、つまり、rootでのsshアクセスが必要になるようです。
$ ssh-copy-id -f -i /etc/ceph/ceph.pub root@*<new-host>*
Vagrantのubuntu boxだと/etc/ssh/sshd_configを見てみると、一応defaultでrootの公開鍵認証でのログインが可能になってます。
#PermitRootLogin prohibit-password
いちいちパスワード設定してsshできるようにするのは面倒なので、vagrantのsynced_folder経由で公開鍵をコピーしましょう。
vagrant@node-1:~$ $ sudo cp -pi /etc/ceph/ceph.pub /share
vagrant@node-2:~$ $ cat /share/ceph.pub | sudo tee -a /root/.ssh/authorized_keys
node-3も同じように公開鍵をコピーしておきます。
では、node-2, node-3をクラスタに追加します。ホストの追加はceph orch host add
コマンドを使用します。
$ sudo cephadm shell -- ceph orch host add node-2 10.10.0.22 Inferring fsid d3ff50c0-1eb9-11ec-87bb-02d610efa747 Using recent ceph image quay.io/ceph/ceph@sha256:10da7d95802d2a75e83fc0f6a2eaa11e3159371c3dea40875947c8be6ad4a9e6 Added host 'node-2' with addr '10.10.0.22' $ sudo cephadm shell -- ceph orch host add node-3 10.10.0.23 Inferring fsid d3ff50c0-1eb9-11ec-87bb-02d610efa747 Using recent ceph image quay.io/ceph/ceph@sha256:10da7d95802d2a75e83fc0f6a2eaa11e3159371c3dea40875947c8be6ad4a9e6 Added host 'node-3' with addr '10.10.0.23'
ホストが追加されたか見てみましょう。ceph orch host ls
コマンドで見れます。
$ sudo cephadm shell -- ceph orch host ls Inferring fsid d3ff50c0-1eb9-11ec-87bb-02d610efa747 Using recent ceph image quay.io/ceph/ceph@sha256:10da7d95802d2a75e83fc0f6a2eaa11e3159371c3dea40875947c8be6ad4a9e6 HOST ADDR LABELS STATUS node-1 10.10.0.21 _admin node-2 10.10.0.22 node-3 10.10.0.23
追加したホストにはラベルが付いていません。cephではこのラベルを使ってホストのクラスタからの切り離し等を行うようで、"_admin"ラベルは、クラスタ作成時に作成された設定ファイルや鍵などを追加ホストにも自動的にコピーするようです。node-1が死んだ場合を考えると付与したほうがいいのかな?と思いますが、ちょっと今回は割愛。
では追加したホストのディスクをOSDとして追加します。ホストを追加してしばらくすると、ceph orch device ls
で利用可能なデバイスとして参照できるようになるみたいです。
$ sudo cephadm shell -- ceph orch device ls Inferring fsid d3ff50c0-1eb9-11ec-87bb-02d610efa747 Using recent ceph image quay.io/ceph/ceph@sha256:10da7d95802d2a75e83fc0f6a2eaa11e3159371c3dea40875947c8be6ad4a9e6 Hostname Path Type Serial Size Health Ident Fault Available node-1 /dev/sdb hdd 10.4M Unknown N/A N/A No node-1 /dev/sdc hdd 10.7G Unknown N/A N/A No node-2 /dev/sdc hdd 10.7G Unknown N/A N/A Yes node-2 /dev/sdb hdd 10.4M Unknown N/A N/A No node-3 /dev/sdc hdd 10.7G Unknown N/A N/A Yes node-3 /dev/sdb hdd 10.4M Unknown N/A N/A No
OSDを追加します。
$ sudo cephadm shell -- ceph orch daemon add osd node-2:/dev/sdc Inferring fsid d3ff50c0-1eb9-11ec-87bb-02d610efa747 Using recent ceph image quay.io/ceph/ceph@sha256:10da7d95802d2a75e83fc0f6a2eaa11e3159371c3dea40875947c8be6ad4a9e6 Created osd(s) 1 on host 'node-2' $ sudo cephadm shell -- ceph orch daemon add osd node-3:/dev/sdc Inferring fsid d3ff50c0-1eb9-11ec-87bb-02d610efa747 Using recent ceph image quay.io/ceph/ceph@sha256:10da7d95802d2a75e83fc0f6a2eaa11e3159371c3dea40875947c8be6ad4a9e6 Created osd(s) 2 on host 'node-3'
追加されました。
$ sudo cephadm shell -- ceph osd tree Inferring fsid d3ff50c0-1eb9-11ec-87bb-02d610efa747 Using recent ceph image quay.io/ceph/ceph@sha256:10da7d95802d2a75e83fc0f6a2eaa11e3159371c3dea40875947c8be6ad4a9e6 ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF -1 0.02939 root default -3 0.00980 host node-1 0 hdd 0.00980 osd.0 up 1.00000 1.00000 -5 0.00980 host node-2 1 hdd 0.00980 osd.1 up 1.00000 1.00000 -7 0.00980 host node-3 2 hdd 0.00980 osd.2 up 1.00000 1.00000
これでOSDが3つになったので、クラスタの状態を見てみましょう。
$ sudo cephadm shell -- ceph status Inferring fsid d3ff50c0-1eb9-11ec-87bb-02d610efa747 Using recent ceph image quay.io/ceph/ceph@sha256:10da7d95802d2a75e83fc0f6a2eaa11e3159371c3dea40875947c8be6ad4a9e6 cluster: id: d3ff50c0-1eb9-11ec-87bb-02d610efa747 health: HEALTH_OK services: mon: 3 daemons, quorum node-1,node-2,node-3 (age 9m) mgr: node-1.hsnpph(active, since 73m), standbys: node-2.jebvpv osd: 3 osds: 3 up (since 61s), 3 in (since 75s) data: pools: 1 pools, 128 pgs objects: 0 objects, 0 B usage: 19 MiB used, 30 GiB / 30 GiB avail pgs: 128 active+clean progress:
clusterのhealthがHEALTH_OKになっていますね。GUIのほうでも同じようにHEALTH_OKになっています。あと、dataのusageを見ると容量が増えているがわかりますね。
ファイルシステムの作成
ではクライアントからストレージを利用できるようにしましょう。今回はCephFSで接続できるようにします。
CephFSのファイルシステムをceph fs volume create ファイルシステム名
で作成します。ファイルシステム名は今回は"sample"にしました。
$ sudo cephadm shell -- ceph fs volume create sample Inferring fsid d3ff50c0-1eb9-11ec-87bb-02d610efa747 Using recent ceph image quay.io/ceph/ceph@sha256:10da7d95802d2a75e83fc0f6a2eaa11e3159371c3dea40875947c8be6ad4a9e6
ファイルシステムが作成されたか確認します。ceph fs volume ls
で。
$ sudo cephadm shell -- ceph fs volume ls Inferring fsid d3ff50c0-1eb9-11ec-87bb-02d610efa747 Using recent ceph image quay.io/ceph/ceph@sha256:10da7d95802d2a75e83fc0f6a2eaa11e3159371c3dea40875947c8be6ad4a9e6 [ { "name": "sample" } ]
これだけかー。とりあえずできてるみたいですね。
あと、最初にファイルシステムの場合にはMDSが必要とありました。ファイルシステムを作成したタイミングでこれも自動的にデプロイされています。
$ sudo cephadm shell -- ceph status (snip) services: mon: 3 daemons, quorum node-1,node-2,node-3 (age 57m) mgr: node-1.hsnpph(active, since 2h), standbys: node-2.jebvpv mds: 1/1 daemons up, 1 standby osd: 3 osds: 3 up (since 48m), 3 in (since 48m) (snip)
GUIでも見れますね。
クライアントからマウントする
CephFSをマウントするには、cephの設定ファイルや認証などを事前に準備しておく必要があるようです。以下に従って準備します。
設定ファイルを配置するディレクトリを作成。
vagrant@client:~$ $ sudo mkdir -p -m 755 /etc/ceph
設定ファイルを作成します。ドキュメントだとssh経由でcephコマンドを実行して取得しようとしていますが、
$ ssh {user}@{mon-host} "sudo ceph config generate-minimal-conf" | sudo tee /etc/ceph/ceph.conf
sshさせるのが面倒なので、ここもsynched_folderを使って受け渡しましょう。
vagrant@node-1:~$ $ sudo cephadm shell -- ceph config generate-minimal-conf > /share/ceph.conf Inferring fsid d3ff50c0-1eb9-11ec-87bb-02d610efa747 Using recent ceph image quay.io/ceph/ceph@sha256:10da7d95802d2a75e83fc0f6a2eaa11e3159371c3dea40875947c8be6ad4a9e6
vagrant@client:~$ $ sudo cp -pi /share/ceph.conf /etc/ceph/.
次にファイルシステムにアクセスするユーザと鍵を作成します。ここも同様にsynched_folderで経由で。
vagrant@node-1:~$ $ sudo cephadm shell -- ceph fs authorize sample client.foo / rw > /share/ceph.client.foo.keyring Inferring fsid d3ff50c0-1eb9-11ec-87bb-02d610efa747 Using recent ceph image quay.io/ceph/ceph@sha256:10da7d95802d2a75e83fc0f6a2eaa11e3159371c3dea40875947c8be6ad4a9e6
ceph fs authorize
コマンドの引数は以下です。
- ファイルシステム名。
ceph fs volume create
で作成したファイルシステム名。今回は"sample"。 - クライアント名。
client.クライアント名
という書き方になるみたい。今回は"foo"で。 - CephFS内のパス。パスの作成がよくわかってない(ここまでの手順では出てきていない)ので"/"で。
- ファイルシステムへの権限。
これでユーザと鍵情報を記載したファイルが生成されるので、クライアント側で/etc/ceph以下に配置します。
vagrant@client:~$ $ sudo cp -pi /share/ceph.client.foo.keyring /etc/ceph/.
ではいよいよマウントです。カーネルドライバを使う場合とFUSEを使う場合がありますが、今回はカーネルドライバで。Ubuntuの場合はceph-commonパッケージを使えば良いようです。
vagrant@client:~$ $ sudo apt-get install -y ceph-common
マウントポイントを作成します。
$ sudo mkdir -p /mnt/mycephfs
マウントします。
$ sudo mount -t ceph :/ /mnt/mycephfs -o name=foo server address expected failed to resolve source
できません・・・ドキュメントによると、/etc/ceph配下に設定ファイル等をおいておけばよしなにやってくれるみたいなのだけど、私の環境ではダメだったので、ホスト名などを指定してみます。
$ sudo mount -t ceph node-1.internal:6789,node-2.internal:6789,node-3.internal:6789,:/ /mnt/mycephfs -o name=foo,secret=AQBsd1Bhs6jcMxAAk7IKLCnyrbkPO9D3/GCCsw== $ df -h $ df -h Filesystem Size Used Avail Use% Mounted on udev 480M 0 480M 0% /dev tmpfs 99M 640K 98M 1% /run /dev/sda1 39G 1.6G 38G 5% / tmpfs 493M 0 493M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 493M 0 493M 0% /sys/fs/cgroup share 932G 367G 566G 40% /share vagrant 932G 367G 566G 40% /vagrant tmpfs 99M 0 99M 0% /run/user/1000 10.10.0.21:6789,10.10.0.22:6789,10.10.0.23:6789:/ 9.5G 0 9.5G 0% /mnt/mycephfs
できました。マウントコマンドの引数ですが、ホスト名は複数指定可能なので、3台のノードをカンマ区切りで指定します。ポートは6789です。
あと。-oで、クライアント名と鍵を指定します。鍵はceph.client.foo.keyring内の鍵文字列をそのまま指定します。
$ cat /etc/ceph/ceph.client.foo.keyring [client.foo] key = AQBsd1Bhs6jcMxAAk7IKLCnyrbkPO9D3/GCCsw==
ただ、secretがそのまま見えるのはよろしくないので、secretfileで指定することもできます。secretfileで指定する場合、上記のフォーマットではなく、鍵文字列だけにする必要があるようです。以下のコマンドで作成できます。
$ ceph-authtool -p /etc/ceph/ceph.client.foo.keyring -n client.foo | tee -a /etc/ceph/secret.foo
マウントし直します。
$ sudo umount /mnt/mycephfs $ sudo mount -t ceph node-1.internal:6789,node-2.internal:6789,node-3.internal:6789:/ /mnt/mycephfs -o name=foo,secretfile=/etc/ceph/secret.foo
cephのファイルシステムに書き込んでみます。
$ sudo touch /mnt/mycephfs/hoge.txt $ ls -lt /mnt/mycephfs/hoge.txt -rw-r--r-- 1 root root 0 Sep 26 23:49 /mnt/mycephfs/hoge.txt $ echo "this is test" | sudo tee /mnt/mycephfs/hoge.txt this is test $ ls -lt /mnt/mycephfs/hoge.txt -rw-r--r-- 1 root root 13 Sep 26 23:50 /mnt/mycephfs/hoge.txt
これだけだとちょっと分散ストレージというのがわかりにくいので、ちょっとひねってみます。
$ sudo mkdir /mnt/mycephfs_node-1 $ sudo mkdir /mnt/mycephfs_node-2 $ sudo mkdir /mnt/mycephfs_node-3 $ sudo mount -t ceph node-1.internal:6789:/ /mnt/mycephfs_node-1 -o name=foo,secretfile=/etc/ceph/secret.foo $ sudo mount -t ceph node-2.internal:6789:/ /mnt/mycephfs_node-2 -o name=foo,secretfile=/etc/ceph/secret.foo $ sudo mount -t ceph node-3.internal:6789:/ /mnt/mycephfs_node-3 -o name=foo,secretfile=/etc/ceph/secret.foo $ sudo touch /mnt/mycephfs_node-1/foo.txt $ sudo touch /mnt/mycephfs_node-2/bar.txt $ sudo touch /mnt/mycephfs_node-3/foobar.txt $ ls /mnt/mycephfs_node-1 bar.txt foo.txt foobar.txt hoge.txt $ ls /mnt/mycephfs_node-2 bar.txt foo.txt foobar.txt hoge.txt $ ls /mnt/mycephfs_node-3 bar.txt foo.txt foobar.txt hoge.txt
これで分散ストレージとして動いているのがわかりますね。
まとめ
分散ストレージ、初めてやってみたのですが、実際に動くとちょっと感動ですねぇ。ただ、ちょろっと触ってみた感じだと、
- 最初に概念的なものを理解するのが大変
- いろいろなものが動いてて複雑
- ドキュメントがほぼ公式しかない
あたり、ちゃんと運用しようと思うといろいろ調べないといけないことが多そうです。Kuberetes触り始めたときと同じ感じですね。
とりあえずぼんやりcephの雰囲気を味わったので、次はrook-cephをやってみる予定です。
参考