Ubuntu20.04LTSでCeph構築

# 簡単にCeph構築
先日Ceph構築したのでまとめようかと思いました。ハイ

## 環境
VirtualBoxでVMを作り、VMを作り、そのうえでCephを構築しました。

## 構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613684/cbd8a480-7aea-34cd-14aa-3f81f807a461.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613684/2c71077d-2d1b-4b55-202c-6c8ad27c6c61.png)

## 準備
### VM準備
VM4台は下の表と同じに設定しています。
|ハードウェアなど|スペックなど|
|:--:|:--:|
|CPU|1コア|
|HDD(sda)|15GB|
|HDD(sdb)|10GB|
|LAN|Intel PRO/1000MT(NAT)|
|LAN|Intel PRO/1000MT(ホストオンリーアダプタ)|
|LAN|Intel PRO/1000MT(内部ネットワーク)|
|OS|Ubuntu20.04 LTS|

## 構築手順
※全部root権限で設定します!(めんどくさかった)
- 事前準備を行う。
- Cephadmのインストールとブートストラップ実行
- CephCLIの有効化
- それぞれのノードに対してSSHを可能にする
- Cephクラスタにノードを追加する
- CephクラスタにOSD(Object Storage Device)を登録する
- CephクラスタにMON(Monitor)を追加する
### 事前準備
それぞれのノードで実行する
```
root@ceph1:/#apt install -y ntp ntpdate ntp-doc
root@ceph1:/#ntpdate ntp.nict.jp
root@ceph1:/#hwclock --systohc
root@ceph1:/#systemctl enable ntp
root@ceph1:/#systemctl start ntp
root@ceph1:/#apt install -y docker docker.io
root@ceph1:/#systemctl enable docker
root@ceph1:/#systemctl start docker
root@ceph1:/#apt install -y python3
```
```:/etc/hosts/
追記
192.168.6.1 ceph1
192.168.6.2 ceph2
192.168.6.3 ceph3
192.168.6.4 ceph4
```
```:/etc/ssh/sshd-config
追記
PermitRootLogin yes
```
```
root@ceph1:/#systemctl restart sshd
```

### Cephadmのインストールとブートストラップ実行
```
root@ceph1:/#apt install -y cephadm
root@ceph1:/#cephadm bootstrap --mon-ip 192.168.6.1
```
### CephCLIの有効化
```
root@ceph1:/#cephadm add-repo --release octpus
root@ceph1:/#cephadm install ceph-common
#cephパッケージがインストールされたコンテナでbashシェルを起動
root@ceph1:/#cephadm shell
root@ceph1:/#exit
#cephコマンドが使えるか確認
root@ceph1:/#ceph -s
```
```
### ceph1からそれぞれのノードに対してSSHを可能にする
root@ceph1:/#ssh-copy-id -f -i /etc/ceph/ceph.pub root@192.168.6.2
root@ceph1:/#ssh-copy-id -f -i /etc/ceph/ceph.pub root@192.168.6.3
root@ceph1:/#ssh-copy-id -f -i /etc/ceph/ceph.pub root@192.168.6.4
```
### Cephクラスタにノードを追加する
```
root@ceph1:/#ceph orch host add ceph2 192.168.6.2
root@ceph1:/#ceph orch host add ceph3 192.168.6.3
```

### CephクラスタにOSD(Object Storage Device)を登録する
```
OSDとして追加できるデバイスを確認する
root@ceph1:/#ceph orch device ls
Hostname  Path      Type  Serial               Size   Health   Ident  Fault  Available
ceph1     /dev/sdb  hdd   VBd7a4a7e5-90c04f3c  10.7G  Unknown  N/A    N/A    Yes
ceph2     /dev/sdb  hdd   VB9cbef998-bd4fb4f1  10.7G  Unknown  N/A    N/A    Yes
ceph3     /dev/sdb  hdd   VBa7daca68-6baffa35  10.7G  Unknown  N/A    N/A    Yes
使用可能なデバイスすべてをOSDへ追加
root@ceph1:/# ceph orch apply osd --all-available-devices 
Scheduled osd.all-available-devices update...
cephに追加された確認する
root@ceph1:/#ceph -s
  cluster:
    id:     bbd98972-948c-11ec-a7f6-7739cf49ecc6
    health: HEALTH_OK
　
  services:
    mon: 3 daemons, quorum ceph1,ceph2,ceph3 (age 6m)
    mgr: ceph1.khwhcg(active, since 57m), standbys: ceph2.aczbit
    osd: 3 osds: 3 up (since 5m), 3 in (since 5m)
　
  data:
    pools:   1 pools, 1 pgs
    objects: 0 objects, 0 B
    usage:   3.0 GiB used, 27 GiB / 30 GiB avail
    pgs:     1 active+clean
```

※特定のデバイスをOSDへ登録する方法

```
root@ceph1:/#ceph orch demon add osd ceph2:/dev/sdb
```

### CephクラスタにMON(Monitor)を追加する
既にCephクラスタ内の全てのノードにはMONが動作している。しかし新たに追加する場合も新たに追加することも考え、追加方法も以下に示す。今回はceph2を新しく追加するという仮定で行った。
```
root@ceph1:/#ceph orch apply mon ceph2
Scheduled mon update...
root@ceph1:/#ceph -s
  cluster:
    id:     bbd98972-948c-11ec-a7f6-7739cf49ecc6
    health: HEALTH_OK
　
  services:
    mon: 3 daemons, quorum ceph1,ceph3,ceph2 (age 4s)
    mgr: ceph1.khwhcg(active, since 87m), standbys: ceph2.aczbit
    osd: 3 osds: 3 up (since 34m), 3 in (since 34m)
　
  data:
    pools:   1 pools, 1 pgs
    objects: 0 objects, 0 B
    usage:   3.0 GiB used, 27 GiB / 30 GiB avail
    pgs:     1 active+clean
```
## ブロックストレージとして利用する
```
root@ceph1:/#ssh ceph4 “apt install -y ceph-common”
root@ceph1:/#scp /etc/ceph/ceph.conf  ceph4:/etc/ceph/ceph.conf
root@ceph1:/#scp /etc/ceph/ceph.client.admin.keyring ceph4:/etc/ceph/
root@ceph1:/#scp ceph4 “chown ceph. /etc/ceph/ceph.*”
```
```
root@ceph4:/#ceph osd pool create rbd 128
root@ceph4:/#ceph osd pool set rbd pg_autoscale_mode on
root@ceph4:/#rbd pool init rbd
root@ceph4:/#ceph osd pool autoscale-staus
root@ceph4:/#rbd create –size 5G –pool rbd rbd01
root@ceph4:/#rbd map rbd01
root@ceph4:/#mkfs.xfs /dev/rbd0
root@ceph4:/#mount /dev/rbd0 /mnt
root@ceph4:/# df -hT
Filesystem                        Type      Size  Used Avail Use% Mounted on
udev                              devtmpfs  445M     0  445M   0% /dev
tmpfs                             tmpfs      98M  1.1M   97M   2% /run
/dev/mapper/ubuntu--vg-ubuntu--lv ext4       14G  4.3G  8.8G  34% /
tmpfs                             tmpfs     489M     0  489M   0% /dev/shm
tmpfs                             tmpfs     5.0M     0  5.0M   0% /run/lock
tmpfs                             tmpfs     489M     0  489M   0% /sys/fs/cgroup
/dev/sda2                         ext4      976M  108M  802M  12% /boot
/dev/loop0                        squashfs   56M   56M     0 100% /snap/core18/1944
/dev/loop1                        squashfs   70M   70M     0 100% /snap/lxd/19188
/dev/loop2                        squashfs   32M   32M     0 100% /snap/snapd/10707
tmpfs                             tmpfs      98M     0   98M   0% /run/user/1000
/dev/rbd0                         xfs       5.0G   69M  5.0G   2% /mnt
```

## 動作確認
```
root@ceph4:~# dd if=/dev/zero of=/mnt/write.tmp ibs=1M obs=1M count=1024
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 72.1003 s, 14.9 MB/s
root@ceph1:~# ceph -s
  cluster:
    id:     bbd98972-948c-11ec-a7f6-7739cf49ecc6
    health: HEALTH_WARN
            3 hosts fail cephadm check
            clock skew detected on mon.ceph1, mon.ceph2
　
  services:
    mon: 3 daemons, quorum ceph3,ceph1,ceph2 (age 2h)
    mgr: ceph1.khwhcg(active, since 19h), standbys: ceph2.aczbit
    osd: 3 osds: 3 up (since 2d), 3 in (since 2d)
　
  data:
    pools:   2 pools, 33 pgs
    objects: 276 objects, 1.0 GiB
    usage:   6.4 GiB used, 24 GiB / 30 GiB avail
    pgs:     33 active+clean
```
増えてる！！！
## まとめ
構築できた！！！！！！！
全てDockerコンテナで動くのでとにかく楽でした。またYAML形式で書いて設定することもできるのでAnsibleとか使わなくてもいけます！！あと実は、Webダッシュボードも使えます。一番最初にブートストラップを実行するとIPアドレスと、ユーザとパスワードが表示されているのでアクセスして設定することもできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613684/d364dcfd-46ab-2609-7df7-c7c56fd57175.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613684/4170b496-dfab-1c67-2f0e-4a23e3b44fb7.png)

やったね！
#### 参考文献
https://docs.ceph.com/en/pacific/start/intro/
https://www.server-world.info/query?os=Ubuntu_20.04&p=ceph15&f=3