Cephが使えるようになるまで(CephFS編)

cephadmを使ったCeph構築

#環境(事前準備するもの)
・ubuntu20.04(Hyper-Vで用意)×3
・docker
・chrony

ubuntuの構成について

Hyper-Vデフォルトから、の変更点
CPU：1→2
メモリ：512MB→4096MB（動的メモリ切）
HDDの追加：デフォルトの127GB
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2296589/a608c183-227a-cbec-c4ef-8bfb54a4ebe7.png)
```
#インストール
apt install -y cephadm
```
ceph1で実行
```
192.168.1.240は、自分のIP
sudo cephadm bootstrap --mon-ip 192.168.1.240
```

しばらく待つと、下のようなメッセージが出るので、URLにアクセスしましょう。

```
Ceph Dashboard is now available at:

             URL: https://ceph1:8443/
            User: admin
        Password: vyy4auyzrr

You can access the Ceph CLI with:

        sudo /usr/sbin/cephadm shell --fsid 73a78d66-4978-11ec-a72c-39d22931f602 -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/master/mgr/telemetry/

Bootstrap complete.
```
上のURLの部分のceph1は、host名になります。
Passwordは毎回違うものが生成されるのでログを必ず見てください。

:::note info
名前解決できていない場合は、URLを下のように自分で書き換えてください。
https://192.168.1.240:8443/
:::

ブラウザでURLを見ると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2296589/9f20b2e0-7690-a4e9-e4f6-a464ce51fd15.png)
こんな感じで見えます。
先ほどのUserとPasswordを入れます。(今回の場合は、User: admin、Password: vyy4auyzrrです)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2296589/7975ea51-6d79-125b-a35e-1722130cbeef.png)
もう一度パスワードを入れて、自分の好きなパスワードに書き換えましょう。

ログインできますが、このままでは何も使えません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2296589/98057dfd-e654-bada-dd0b-d7ed591dc6d0.png)

まずは、ほかの2台も参加させます。
```
root@ceph1:~# sshpass -p "password" ssh-copy-id -f -i /etc/ceph/ceph.pub root@192.168.1.241 -o StrictHostKeyChecking=no
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/etc/ceph/ceph.pub"

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh -o 'StrictHostKeyChecking=no' 'root@192.168.1.241'"
and check to make sure that only the key(s) you wanted were added.

root@ceph1:~# ./cephadm shell -- ceph orch host add ceph2 192.168.1.241
Inferring fsid 173f9dc8-b02c-11ec-9dae-cd5183c0b4c4
Inferring config /var/lib/ceph/173f9dc8-b02c-11ec-9dae-cd5183c0b4c4/mon.ceph1/config
Using recent ceph image quay.io/ceph/ceph@sha256:1b0ceef23cbd6a1af6ba0cbde344ebe6bde4ae183f545c1ded9c7c684239947f
Error EINVAL: New host ceph2 (192.168.1.241) failed check: ['podman|docker (/usr/bin/docker) is present', 'systemctl is present', 'lvcreate is present', 'Unit chrony.service is enabled and running', 'Hostname "ceph2" matches what is expected.', 'ERROR: hostname "ceph02" does not match expected hostname "ceph2"']
root@ceph1:~# ./cephadm shell -- ceph orch host add ceph02 192.168.1.241
Inferring fsid 173f9dc8-b02c-11ec-9dae-cd5183c0b4c4
Inferring config /var/lib/ceph/173f9dc8-b02c-11ec-9dae-cd5183c0b4c4/mon.ceph1/config
Using recent ceph image quay.io/ceph/ceph@sha256:1b0ceef23cbd6a1af6ba0cbde344ebe6bde4ae183f545c1ded9c7c684239947f
Added host 'ceph02'

root@ceph1:~# sshpass -p "password" ssh-copy-id -f -i /etc/ceph/ceph.pub root@192.168.1.242 -o StrictHostKeyChecking=no
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/etc/ceph/ceph.pub"

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh -o 'StrictHostKeyChecking=no' 'root@192.168.1.242'"
and check to make sure that only the key(s) you wanted were added.

root@ceph1:~# ./cephadm shell -- ceph orch host add ceph03 192.168.1.242
Inferring fsid 173f9dc8-b02c-11ec-9dae-cd5183c0b4c4
Inferring config /var/lib/ceph/173f9dc8-b02c-11ec-9dae-cd5183c0b4c4/mon.ceph1/config
Using recent ceph image quay.io/ceph/ceph@sha256:1b0ceef23cbd6a1af6ba0cbde344ebe6bde4ae183f545c1ded9c7c684239947f
Added host 'ceph03'
```
OSDの追加をします。
デバイスの確認(必須ではない)
```
root@ceph1:~# ./cephadm shell -- ceph orch device ls
Inferring fsid 173f9dc8-b02c-11ec-9dae-cd5183c0b4c4
Inferring config /var/lib/ceph/173f9dc8-b02c-11ec-9dae-cd5183c0b4c4/mon.ceph1/config
Using recent ceph image quay.io/ceph/ceph@sha256:1b0ceef23cbd6a1af6ba0cbde344ebe6bde4ae183f545c1ded9c7c684239947f
Hostname  Path      Type  Serial                            Size   Health   Ident  Fault  Available  
ceph02    /dev/sda  hdd   600224805e15af604d8afc01f5cbaf8d   136G  Unknown  N/A    N/A    Yes        
ceph02    /dev/fd0  hdd                                     4096   Unknown  N/A    N/A    No         
ceph03    /dev/sdb  hdd   600224805e15af604d8afc01f5cbaf8d   136G  Unknown  N/A    N/A    Yes        
ceph03    /dev/fd0  hdd                                     4096   Unknown  N/A    N/A    No         
ceph1     /dev/sdb  hdd   600224805e15af604d8afc01f5cbaf8d   136G  Unknown  N/A    N/A    Yes        
ceph1     /dev/fd0  hdd                                     4096   Unknown  N/A    N/A    No
```


```
root@ceph1:~# ceph orch apply osd --all-available-devices
Scheduled osd.all-available-devices update...
```
上のコマンドでAvailableがYesのhdd(ssd)がOSDに入ります。
少し時間がかかる(5分ぐらい？)ので、待ちましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2296589/0b823010-8956-2f92-40d0-84571f179a2a.png)
すべてのOSDが追加されました。
OSDを追加後
ディスクの状態を見ると、AvailableがNoになってます。
```
root@ceph1:~# ./cephadm shell -- ceph orch device ls
Inferring fsid 4e517a28-afb6-11ec-a140-6b57f3dd59e4
Inferring config /var/lib/ceph/4e517a28-afb6-11ec-a140-6b57f3dd59e4/mon.ceph1/config
Using recent ceph image quay.io/ceph/ceph@sha256:1b0ceef23cbd6a1af6ba0cbde344ebe6bde4ae183f545c1ded9c7c684239947f
Hostname  Path      Type  Serial                            Size   Health   Ident  Fault  Available
ceph02    /dev/fd0  hdd                                     4096   Unknown  N/A    N/A    No
ceph02    /dev/sda  hdd   600224805e15af604d8afc01f5cbaf8d   136G  Unknown  N/A    N/A    No
ceph03    /dev/fd0  hdd                                     4096   Unknown  N/A    N/A    No
ceph03    /dev/sdb  hdd   600224805e15af604d8afc01f5cbaf8d   136G  Unknown  N/A    N/A    No
ceph1     /dev/fd0  hdd                                     4096   Unknown  N/A    N/A    No
ceph1     /dev/sdb  hdd   600224805e15af604d8afc01f5cbaf8d   136G  Unknown  N/A    N/A    No
```

ここからは、CephFSの構築です。
cephfsVolという名前のCephFSを作ります。
```
root@ceph1:~# cephadm shell -- ceph fs volume create cephfsVol
Inferring fsid 4e517a28-afb6-11ec-a140-6b57f3dd59e4
Inferring config /var/lib/ceph/4e517a28-afb6-11ec-a140-6b57f3dd59e4/mon.ceph1/config
Using recent ceph image quay.io/ceph/ceph@sha256:1b0ceef23cbd6a1af6ba0cbde344ebe6bde4ae183f545c1ded9c7c684239947f
```
一度Cluster StatusがERRORになります。(MDS_ALL_DOWNになりますが、10分ぐらい待ちましょう。待ち時間はそれぞれのディスクの速さによるのかもしれません)
Cluster StatusがHEALTH_OKになったら、下の手順に移りましょう。

adminという名前でキーを取得します。
```
echo $(sed -n 's/.*key *= *\([^ ]*.*\)/\1/p' < /etc/ceph/ceph.client.admin.keyring) > /etc/ceph/admin.secret
cat /etc/ceph/admin.secret
chmod 600 /etc/ceph/admin.secret
```
次にマウントするためのディレクトリを作り、マウントします。
```
mkdir -p /mnt/mycephfs
mount -t ceph ceph1:6789:/ /mnt/mycephfs -o name=admin,secretfile=/etc/ceph/admin.secret
```
エラーが起きずに何も返ってこなければ接続成功です。

#失敗例
ubuntuの構成を1PCでHDD3台でやったら、マウント時にエラーになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2296589/3df08a27-ff0d-7dfc-e674-b5df15271c4d.png)
OSDの構成
```
root@ceph1:~# ./cephadm shell -- ceph orch device ls
Inferring fsid 0c17298c-ac87-11ec-b1ee-31bc59826852
Inferring config /var/lib/ceph/0c17298c-ac87-11ec-b1ee-31bc59826852/mon.ceph1/config
Using recent ceph image quay.io/ceph/ceph@sha256:1b0ceef23cbd6a1af6ba0cbde344ebe6bde4ae183f545c1ded9c7c684239947f
Hostname  Path      Type  Serial                            Size   Health   Ident  Fault  Available
ceph1     /dev/sda  hdd   6002248081e48dce650d598ad6425c43   136G  Unknown  N/A    N/A    Yes
ceph1     /dev/sdb  hdd   600224805e15af604d8afc01f5cbaf8d   136G  Unknown  N/A    N/A    Yes
ceph1     /dev/sdc  hdd   6002248038598ea95ae6f4d90b62641c   136G  Unknown  N/A    N/A    Yes
ceph1     /dev/fd0  hdd                                     4096   Unknown  N/A    N/A    No
```
```
mkdir -p /mnt/mycephfs
mount -t ceph ceph1:6789:/ /mnt/mycephfs -o name=admin,secretfile=/etc/ceph/admin.secret
mount error: no mds server is up or the cluster is laggy
```
おそらく、1台のHDD
HDDで構成してしまったため、それぞれが遅すぎた。(SSDとかでやったらできるかもしれません)
マウント前から、Cluster StatusがHEALTH_WARNから30分ぐらい待ってもOKになっていませんでした。

#追記
何度か作り直しもあり、ログのfsidが合っていませんがご容赦ください。

コマンド「ceph orch device ls」を実行しても、ディスクが表示されないことがありました。
cephadmを入れる前に、HDDを追加しとくのが個人的にはポイントです。

動的メモリをOFFにしたのは、私のPCのメモリが少ないためなので、参考程度にお願いいたします。