🐷

公式Ceph管理ツールcephadm

6 min read

はじめに

本記事は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分後にインストールが終わります、すごい。

cephadmshellサブコマンド経由で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つの段階を踏む必要があります。

  1. OSD daemonの削除
  2. CRUSH mapからのOSDの削除
  3. OSDのデータ削除

cephadm rm-daemonコマンドでOSD daemonを削除できます。

# ./cephadm rm-daemon --force --name osd.0 --fsid 49d0c54a-4b8e-11eb-959d-00155d0a6b00

CRUSH mapからの削除はceph osd downceph 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は再利用可能になります。

クラスタの削除

クラスタの削除にはcephadmrm-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発行、というようなことをよくやります。非常に便利に使えており、すばらしいです。