全国1億3千万人のCephファンのみなさんこんばんは
FUJITSU アドベントカレンダー 8日目の記事です
逸般的誤家庭から一般的ご家庭にCephを普及すべく、k8sを始めようと思って机の隅っこでホコリを被っているであろうRaspberry Piを活用して、RasPi Cephクラスタを始めようというのが、今回のテーマです
RasPiやCephについては、周知でしょうからここでは技術的な紹介は省いて、構築をささっといきたいと思います。
前置き
今回構築するのは、
Cephクラスタ(3ノード)とRados Gateway(S3/Swift互換)(以下RGW)の構築です。
先に言っておくと、RGWをRasPiで動かそうとするとエラー吐いて落ちるので、こいつだけx86の上で動いています。
また、Cephクラスタには、ノードに1OSD/DISKが必要となりますが、これをUSBメモリで代用します。
今回の機材
Cephクラスタ:RasPi3 3台
OSD用DISK代わりのUSBメモリ:3本
RGW:LIVAの小型PC
過去にこの記事で使ったやつ
ソフトウェア
OS
RasPi: Raspbian(201909)
RGW : debian10
RaspbianのベースであるDebian10を使います。
Ceph
Raspbian/debianに付属する Ceph(Luminous)
構成図
cephで定番のPublicネットワーク構成を取らずにフラット構成としています
RasPiに限らず、すべてVMで作る場合もフラット構成は有用です。
Cephクラスタのセットアップ
Raspbian/Debianは特に気にせずセットアップして起動します。
Cephのセットアップは、本家公式のLuminousを参照します
公式との差異
はじめにCephのリポジトリをセットする部分は省略します。
また台数の都合で、admin-nodeが用意できなかったので、node1で代用します。
セットアップマニュアルのここから始める
3. Update your repository and install ceph-deploy:
追加
apt-get install lvm2
あとは、マニュアル通りにセットアップを進めていきます。
CREATE A CLUSTERの
2.If you have more than one network interface, add the public network setting under the [global] section of your Ceph configuration file. See the Network Configuration Reference for details. の部分では、フラットであれば、そのネットワークアドレスを書いておけば問題ありません。
他の機材が同じサブネットにいても、Cephクラスタには影響ありません。
RGWノードのセットアップもここで合わせて行っておきます。
具体的には、node1,2,3と同様にノード名:rgwにもsshのキーを配り、名前解決できるようにしておきます。
RGWの構築
マニュアルの指定だと、node1に同居していることになっているため、
事前に、admin-node(今回だとnode1)で、RGWの名前が解決できるようになっていれば問題ありません
例
ceph-deploy rgw create rgw
OSDの用意
OSDを作成追加します
例
ceph-deploy osd create --data /dev/sda1 node1
これだけで作成できます
OSDは、LVM上にBluestoreタイプで作成されます。
ただし、lvm関係でRaspiだと死ぬっぽく、失敗したら、pvremove/lvremoveなどを駆使して失敗して綺麗にして、再度実行すれば成功します。(初回は必ず死ぬかもしれない)
s3ユーザを作る
rgwのadminガイドのこのあたりを見ながら、ユーザを作成する。
実行は、node1の上で問題ない
例
sudo radosgw-admin user create --uid="testuser" --display-name="First User"
実行例
pi@node1:~ $ sudo radosgw-admin user info --uid=testuser
{
"user_id": "testuser",
"display_name": "First User",
"email": "",
"suspended": 0,
"max_buckets": 1000,
"auid": 0,
"subusers": [],
"keys": [
{
"user": "testuser",
"access_key": "xxx",
"secret_key": "xxx"
}
],
"swift_keys": [],
"caps": [],
"op_mask": "read, write, delete",
"default_placement": "",
"placement_tags": [],
"bucket_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
},
"user_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
},
"temp_url_keys": [],
"type": "rgw"
}
access_key/secret_keyを使って、あとは遊びましょう
USBメモリのアクセスランプが綺麗に光ってアクセスはよく見えます。
##終わりに
できあがったクラスタの状態
pi@node1:~ $ sudo ceph -s
cluster:
id: 1ae87c09-6e16-483b-9c5c-5d173df32e79
health: HEALTH_WARN
41/1135 objects unfound (3.612%)
services:
mon: 3 daemons, quorum node1,node2,node3
mgr: node1(active), standbys: node2, node3
osd: 3 osds: 3 up, 3 in
data:
pools: 8 pools, 184 pgs
objects: 1.14k objects, 3.00GiB
usage: 12.0GiB used, 32.2GiB / 44.3GiB avail
pgs: 123/3405 objects degraded (3.612%)
41/1135 objects unfound (3.612%)
183 active+clean
1 active+recovery_wait
pi@node1:~ $ sudo ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 3.00000 root default
-3 1.00000 host node1
0 hdd 1.00000 osd.0 up 1.00000 1.00000
-5 1.00000 host node2
1 hdd 1.00000 osd.1 up 1.00000 1.00000
-7 1.00000 host node3
2 hdd 1.00000 osd.2 up 1.00000 1.00000
あとは、 cephを使い倒して、upstreamコントリビューションすれば完璧です。
おわり