kun432's blog

Alexaなどスマートスピーカーの話題中心に、Voiceflowの日本語情報を発信してます。たまにAWSやkubernetesなど。

〜スマートスピーカーやVoiceflowの記事は右メニューのカテゴリからどうぞ。〜

cephadmでCephを試してみる

f:id:kun432:20210926161533p:plain

クラウドじゃなくてKubernetesを手元で試してみたい、という場合、Dynamic PVとLoad Balancerはちょっとハードルが高い印象です。

Dynamic PVにはrook-cephがよいようなのですが、そもそもCephを知らない、ということで、まずはVMレベルで試してみました。

目次

Cephとは?

ceph.io

分散ストレージソフトウェアというやつです。特徴は以下。

  • 複数の方法でストレージにアクセスできる
    • オブジェクトストレージ(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間はプライベートネットワーク経由で接続

f:id:kun432:20210926185252p:plain

以下に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を使っている場合は自己証明書のサイトにはアクセスできないので、以下を参考に。

ログイン画面が表示されましたので、さきほど表示されていたユーザ名・パスワードでログインします。

f:id:kun432:20210926201842p:plain

初回はパスワードの変更が必要になります。

f:id:kun432:20210926201852p:plain

変更したパスワードでログインします。

f:id:kun432:20210926201933p:plain

ログインできました!

f:id:kun432:20210926202003p:plain

OSDの追加

ceph statusの結果や、管理画面にも出ているように、OSDは最低3つ必要になります。

f:id:kun432:20210926202314p:plain

クラスタ作成した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を見ると容量が増えているがわかりますね。

f:id:kun432:20210926212601p:plain

ファイルシステムの作成

ではクライアントからストレージを利用できるようにしましょう。今回は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でも見れますね。

f:id:kun432:20210926221532p:plain

クライアントからマウントする

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をやってみる予定です。

参考

blog.father.gedow.net