公式Ceph管理ツールcephadm
はじめに
本記事はRookと仲間たち、クラウドネイティブなストレージの Advent Calendar 202010日目をこっそり後から埋めたものです。
本記事はCephの公式管理ツールであるcephadmを紹介します。cephadm誕生の経緯については別記事をごらんください。ここではcephadmによるCephクラスタのデプロイがいかに簡単かを紹介することを主目的とします。
自白してしまうと本記事に書いてあることは公式ドキュメントを見ればほぼ誰でもできます。しかし、公式ドキュメントよりもさらに少ない情報量で最小限のCephクラスタを作れる方法を紹介したということで勘弁してください。
環境
- ソフトウェア
- OS: Ubuntu 18.04/amd64
- ceph-commonパッケージ
- ハードウェア
- OSD用の空ディスク: /dev/sdb (5GB)
cephadmのインストール
簡単のため、以下コマンドはすべてroot権限で実行します。
以下コマンドを叩けば完了です。
# curl --silent --remote-name --location https://github.com/ceph/ceph/raw/octopus/src/cephadm/cephadm
# chmod +x cephadm
この後にCephクラスタの設定ファイルを置くディレクトリも作っておきます。
# mkdir -p /etc/ceph
MONが1つとMGRだけがあるCephクラスタを作る
以下コマンドを叩けば完了です。ipaddr
のところはローカルホストのIDアドレスを入れてください。
# ./cephadm bootstrap --mon-ip <ipaddr>
...
Bootstrap complete.
#
たった2,3分後にインストールが終わります、すごい。
cephadm
のshell
サブコマンド経由でcephコマンドを叩けます。ここではクラスタの状態を見てみます。
# ./cephadm shell -- ceph -s
Inferring fsid 49d0c54a-4b8e-11eb-959d-00155d0a6b00
Inferring config /var/lib/ceph/49d0c54a-4b8e-11eb-959d-00155d0a6b00/mon.ubuntu1804/config
Using recent ceph image ceph/ceph-amd64:v15.2.8-20201217
cluster:
id: 49d0c54a-4b8e-11eb-959d-00155d0a6b00
health: HEALTH_WARN
OSD count 0 < osd_pool_default_size 3
services:
mon: 1 daemons, quorum ubuntu1804 (age 61s)
mgr: ubuntu1804.tihjed(active, since 23s)
osd: 0 osds: 0 up, 0 in
...
ちゃんとできているようです。
cephadmが作ったdaemonはcephadm ls
コマンドで確認できます。
# ./cephadm ls
[
{
"style": "cephadm:v1",
"name": "mgr.ubuntu1804.tihjed",
"fsid": "49d0c54a-4b8e-11eb-959d-00155d0a6b00",
"systemd_unit": "ceph-49d0c54a-4b8e-11eb-959d-00155d0a6b00@mgr.ubuntu1804.tihjed",
"enabled": true,
"state": "running",
"container_id": "601ff097ade13c7a3cc1814ac2506ddbdd1fd05d59f3e821e2c206a749ed156f",
"container_image_name": "docker.io/ceph/ceph:v15",
"container_image_id": "5553b0cb212ca2aa220d33ba39d9c602c8412ce6c5febc57ef9cdc9c5844b185",
"version": "15.2.8",
...
},
{
"style": "cephadm:v1",
"name": "prometheus.ubuntu1804",
...
},
{
"style": "cephadm:v1",
"name": "mon.ubuntu1804",
...
]
mon,mgr,prometheus,など、多種多様なdaemonがデフォルトで作られることがわかります。container_image_name
というのがそれぞれのdaemon用のコンテナイメージの名前です。これはCephの公式コンテナイメージを使っています。
OSDの作成
OSDの作成においては、まずはローカルホストからOSDとして使えるデバイスをリストします。
# ./cephadm shell -- ceph orch device ls
Inferring fsid 49d0c54a-4b8e-11eb-959d-00155d0a6b00
Inferring config /var/lib/ceph/49d0c54a-4b8e-11eb-959d-00155d0a6b00/mon.ubuntu1804/config
Using recent ceph image ceph/ceph-amd64:v15.2.8-20201217
Hostname Path Type Serial Size Health Ident Fault Available
ubuntu1804 /dev/sdb hdd 600224803b3ed0b6e86337e91de598f0 10.7G Unknown N/A N/A Yes
ubuntu1804 /dev/sdc hdd 600224800f81ac0c3a79fde2b585fb72 64.4G Unknown N/A N/A Yes
Available
フィールドがYes
になっているデバイス上にOSDを作れます。
この後ceph orch daemon add osd <ホスト名>:<デバイス名>
とするとOSDを追加できます。以下はローカルホスト(ubuntu1804)上の/dev/sdbを追加する例です。
# ./cephadm shell -- ceph orch daemon add osd ubuntu1804:/dev/sdb
Inferring fsid 49d0c54a-4b8e-11eb-959d-00155d0a6b00
Inferring config /var/lib/ceph/49d0c54a-4b8e-11eb-959d-00155d0a6b00/mon.ubuntu1804/config
Using recent ceph image ceph/ceph:v15
Created osd(s) 0 on host 'ubuntu1804'
OSDができていることを確認します。
# ./cephadm shell -- ceph osd tree
Inferring fsid 49d0c54a-4b8e-11eb-959d-00155d0a6b00
Inferring config /var/lib/ceph/49d0c54a-4b8e-11eb-959d-00155d0a6b00/mon.ubuntu1804/config
Using recent ceph image ceph/ceph-amd64:v15.2.8-20201217
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0.00980 root default
-3 0.00980 host ubuntu1804
0 hdd 0.00980 osd.0 up 1.00000 1.00000
成功です。この後はcephコマンドなどを使って通常通りCephクラスタを管理、利用するだけです。
cephadmがOSDのdaemon作成を認識していることも確認します。
# ./cephadm ls
[
...
{
"style": "cephadm:v1",
"name": "osd.0",
...
},
...
ありました。
OSDの削除
OSDを削除するには3つの段階を踏む必要があります。
- OSD daemonの削除
- CRUSH mapからのOSDの削除
- OSDのデータ削除
cephadm rm-daemon
コマンドでOSD daemonを削除できます。
# ./cephadm rm-daemon --force --name osd.0 --fsid 49d0c54a-4b8e-11eb-959d-00155d0a6b00
CRUSH mapからの削除はceph osd down
、ceph osd out
、およびceph osd purge
コマンドを使います。
# ./cephadm shell -- ceph osd down osd.0
...
# ./cephadm shell -- ceph osd out osd.0
...
# ./cephadm shell -- ceph osd purge --force osd.0
...
これでOSDがCRUSH mapから削除されます。
# ./cephadm shell -- ceph osd tree
Inferring fsid 49d0c54a-4b8e-11eb-959d-00155d0a6b00
Inferring config /var/lib/ceph/49d0c54a-4b8e-11eb-959d-00155d0a6b00/mon.ubuntu1804/config
Using recent ceph image ceph/ceph:v15
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0 root default
-3 0 host ubuntu1804
OSDのデータはceph orch device zap
コマンドで削除できます。
# ./cephadm shell -- ceph orch device zap --force ubuntu1804 /dev/sdb
...
/usr/bin/docker:stderr --> Zapping successful for: <Raw Device: /dev/sdb>
...
この後/dev/sdbは再利用可能になります。
クラスタの削除
クラスタの削除にはcephadm
のrm-cluster
コマンドを使います。
# ./cephadm rm-cluster --force --fsid 49d0c54a-4b8e-11eb-959d-00155d0a6b00
注意点
cephadmは非常に若いツールなので今後のバージョンでは上記のコマンドが動かなくなる可能性がそれなりにあります。公式ドキュメントにも次のようなことが書いてあります。
Cephadm is a new feature in the Octopus release and has seen limited use in production and at scale. We would like users to try cephadm, especially for new clusters, but please be aware that some functionality is still rough around the edges. We expect fairly frequent updates and improvements over the first several bug fix releases of Octopus.
cephadmの安定性について、詳しくはこちらをごらんください。
おわりに
私は普段はCephクラスタの管理にRookを使っているのですが、Rookで検出したバグの根本原因がRookではなくCephにありそうなときはcephadm上で再現させてissue発行、というようなことをよくやります。非常に便利に使えており、すばらしいです。
Discussion