Raspberry Pi5でmicrok8sとrook/ceph (microceph)

正直言ってあまり安定していない、困った

# 機材

- Raspberry Pi 5 4GB
- Geekworm X1001 V1.1 
- アクティブクーラー・ヒートシンク
- KIOXIA 1TB NVMe M.2 Type 2280（データ用）
- エレコム SSD 外付け 250GB USB3.2 ESD-EXS0250GWH（OS用）
- 電源

これが3つづつ

rook/cephに使うdiskはパーティションで切ったりするのはよくないらしい、というわけでOS用とデータ用を用意

![105EB2A5-A17F-4413-86E1-6F4B29C97A3A_1_105_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339688/a48a3e7d-ec1c-e968-35fa-5b4fef02f3aa.jpeg)

# Ubuntu 23.10のインストール

Ubuntuは23.10以降でRaspberry Pi5に対応している
24.04にしたかったところだが現時点ではまだリリースされていないのでこちらを採用
`sudo apt upgrade`をかけると安定する
Raspberry Pi OSはrook/cephがうまく動かなかった

[Raspberry Pi OS – Raspberry Pi](https://www.raspberrypi.com/software/)で書き込み
この時二つのファイルに追記する

```config.txt
dtparam=pciex1
dtparam=pciex1_gen=3 #お試し
usb_max_current_enable=1　#電源がPi5専用のものでない場合
```

```cmdline.txt
cgroup_enable=memory cgroup_memory=1
```

NVMeのSSDが認識されないときはbootloaderのバージョンを確認しよう
私の設定は以下の通り

```bash
$ rpi-eeprom-update
BOOTLOADER: up to date
   CURRENT: Fri Apr  5 10:41:19 UTC 2024 (1712313679)
    LATEST: Mon Sep 25 10:44:03 UTC 2023 (1695638643)
   RELEASE: default (/lib/firmware/raspberrypi/bootloader-2712/default)
            Use raspi-config to change the release.
```

結構NVMe SSDの相性がシビア、なるべく新しい方がいいかもしれない

bootloaderは以下よりダウンロード
[rpi-eeprom/firmware-2712/latest at master · raspberrypi/rpi-eeprom · GitHub](https://github.com/raspberrypi/rpi-eeprom/tree/master/firmware-2712/latest)

例

```
sudo rpi-eeprom-update -d -f pieeprom-2024-04-05.bin
```

# microk8sのインストール

[MicroK8s - HowTo setup MicroK8s with (Micro)Ceph storage](https://microk8s.io/docs/how-to-ceph)
に従う

```
sudo apt install linux-modules-extra-raspi
```

```
sudo snap install microk8s --channel=latest/stable --classic
```

sudo省略

```
sudo usermod -a -G microk8s $USER
```

様子の確認

```
microk8s.start
microk8s.status
```

うまく動けば
```bash
$ microk8s.status
microk8s is running
```
の表示が出る

```
$ microk8s.status
microk8s is not running. Use microk8s inspect for a deeper inspection.
```

と出たら設定を忘れてないか確認し、あととりあえず再起動してみる。
このエラーで悩んでいたが、何回か再起動したらいつの間にか動くようになった

```
sudo snap alias microk8s.kubectl kubectl
```
エイリアス

## クラスターの作成

どれか一台で

```
sudo microk8s add-node
```

をすると他のnodeをjoinさせるコマンドが出てくる
というわけで他の2台をjoinさせる



# microcephのインストール

なんかよくわからんけど

```
sudo modprobe rbd
sudo sh -c "echo 'rbd' >> /etc/modules-load.d/modules.conf"
```

```
sudo snap install microceph --channel=latest/edge
```

基本的にうまく動かない
[ubuntu@canonical:~$ sudo microceph cluster bootstrap Error: Post "http://control.socket/cluster/control": context deadline exceeded · Issue #219 · canonical/microceph · GitHub](https://github.com/canonical/microceph/issues/219)

## 1台目の設定

```
sudo microceph cluster bootstrap
```

```
sudo microceph cluster add <node2>
sudo microceph cluster add <node3>
```

## 2,3台目の設定

```
sudo microceph cluster join <pasted-output-from-node1>
```

## ここから共通

```
sudo microceph disk add --wipe /dev/nvme0n1
```

全部やったら

```
sudo microceph status
MicroCeph deployment summary:
- node1 (192.168.0.x)
  Services: mds, mgr, mon, osd
  Disks: 1
- node2 (192.168.0.y)
  Services: mds, mgr, mon, osd
  Disks: 1
- node3 (192.168.0.z)
  Services: mds, mgr, mon, osd
  Disks: 1
```

よし

# Connect MicroCeph to MicroK8s

```
sudo microk8s enable rook-ceph
sudo microk8s connect-external-ceph
```

```
Successfully imported external Ceph cluster. You can now use the following storageclass
to provision PersistentVolumes using Ceph CSI:

NAME       PROVISIONER                  RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
ceph-rbd   rook-ceph.rbd.csi.ceph.com   Delete          Immediate           true                   47s
```


完了


# 色々な設定

```
microk8s enable dns:1.1.1.1
```

何に使おう...