Rook/Ceph で作った Ceph クラスタを色々みる
環境情報
OS:Ubuntu 18.04.5 LTS
Kubernetes:v1.19.7
Ceph:15.2.11
Rook:v1.6.1
サンプルの WordPress が構築されている状態。
$ kc get po,pvc,pv
NAME READY STATUS RESTARTS AGE
pod/wordpress-7b989dbf57-mtbj6 1/1 Running 0 39m
pod/wordpress-mysql-6965fc8cc8-kwblq 1/1 Running 0 39m
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/mysql-pv-claim Bound pvc-64790dfa-f203-49c4-b568-eb064f06c6b6 20Gi RWO rook-ceph-block 39m
persistentvolumeclaim/wp-pv-claim Bound pvc-c2320cb7-b3a6-4820-821b-0a74d2ae2057 20Gi RWO rook-ceph-block 39m
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/pvc-64790dfa-f203-49c4-b568-eb064f06c6b6 20Gi RWO Delete Bound default/mysql-pv-claim rook-ceph-block 39m
persistentvolume/pvc-c2320cb7-b3a6-4820-821b-0a74d2ae2057 20Gi RWO Delete Bound default/wp-pv-claim rook-ceph-block 39m
ceph コマンドの利用環境
ceph
コマンドは別途 ToolBox なる Pod が準備されている。デプロイしてコンテナ上で ceph
コマンドを実行していく。
# ToolBox の Pod 確認
$ kc get po -n rook-ceph -l app=rook-ceph-tools
NAME READY STATUS RESTARTS AGE
rook-ceph-tools-57787758df-rx5gw 1/1 Running 0 122m
# /bin/bash で Pod にアクセス
$ kc exec -it -n rook-ceph rook-ceph-tools-57787758df-rx5gw -- /bin/bash
# ToolBox コンテナ内
# Ceph のバージョン確認
$ ceph version
ceph version 15.2.11 (e3523634d9c2227df9af89a4eac33d16738c49cb) octopus (stable)
ceph
コマンドは対話形式でも実行可能。なので、kubectl exec
で実行すると対話形式で実行もできる。但し、/bin/bash
同様に -it
オプションはつけること。ceph
コマンドをサブコマンドだけで実行できるので意外と便利?
$ kc exec -it -n rook-ceph rook-ceph-tools-57787758df-rx5gw -- ceph
ceph> version
ceph version 15.2.11 (e3523634d9c2227df9af89a4eac33d16738c49cb) octopus (stable)
ceph
コマンド自体はたくさんのサブコマンドがあるので、とりあえず参照系に絞って確認してみる。実際、ヘルプ見ると900行近いテキストがながれた・・・他にも ceph-xxxx コマンドがあったので、複雑・・・
$ ceph --help
General usage:
==============
usage: ceph [-h] [-c CEPHCONF] [-i INPUT_FILE] [-o OUTPUT_FILE]
[--setuser SETUSER] [--setgroup SETGROUP] [--id CLIENT_ID]
[--name CLIENT_NAME] [--cluster CLUSTER]
[--admin-daemon ADMIN_SOCKET] [-s] [-w] [--watch-debug]
[--watch-info] [--watch-sec] [--watch-warn] [--watch-error]
[-W WATCH_CHANNEL] [--version] [--verbose] [--concise]
[-f {json,json-pretty,xml,xml-pretty,plain,yaml}]
[--connect-timeout CLUSTER_TIMEOUT] [--block] [--period PERIOD]
Ceph administration tool
・・・
Ceph Cluster
サービス別?にサブコマンドがありそうだったので、とりあえずクラスタ直結のコマンドだけ確認する。
まずは version
。複数形にすると配下のサービス毎のバージョンも出力される。サービスでバージョン分けたい場合とかもあるんですかね。今回はすべて一致。
$ ceph version
ceph version 15.2.11 (e3523634d9c2227df9af89a4eac33d16738c49cb) octopus (stable)
$ ceph versions
{
"mon": {
"ceph version 15.2.11 (e3523634d9c2227df9af89a4eac33d16738c49cb) octopus (stable)": 3
},
"mgr": {
"ceph version 15.2.11 (e3523634d9c2227df9af89a4eac33d16738c49cb) octopus (stable)": 1
},
"osd": {
"ceph version 15.2.11 (e3523634d9c2227df9af89a4eac33d16738c49cb) octopus (stable)": 3
},
"mds": {},
"overall": {
"ceph version 15.2.11 (e3523634d9c2227df9af89a4eac33d16738c49cb) octopus (stable)": 7
}
}
status
はクラスタのヘルス状態、サービスの状態、データの利用状況を出力する。サマリ見るくらいだったらこれで十分。
$ ceph status
cluster:
id: 530203a5-be0b-42c2-b0df-97606f45256a
health: HEALTH_WARN
mons are allowing insecure global_id reclaim
mons a,b are low on available space
services:
mon: 3 daemons, quorum a,b,c (age 3h)
mgr: a(active, since 3h)
osd: 3 osds: 3 up (since 3h), 3 in (since 17h)
data:
pools: 2 pools, 33 pgs
objects: 108 objects, 199 MiB
usage: 3.5 GiB used, 147 GiB / 150 GiB avail
pgs: 33 active+clean
df
は Linux の df
と同様に容量の確認ができる。Pool と RAW ストレージの容量が確認できた。RAW ストレージと書かれているが、k8s node にアタッチしている/dev/sdc
とかを期待していたのだが、そうではないらしい。CLASS とは・・・
$ ceph df
--- RAW STORAGE ---
CLASS SIZE AVAIL USED RAW USED %RAW USED
hdd 150 GiB 147 GiB 492 MiB 3.5 GiB 2.32
TOTAL 150 GiB 147 GiB 492 MiB 3.5 GiB 2.32
--- POOLS ---
POOL ID PGS STORED OBJECTS USED %USED MAX AVAIL
device_health_metrics 1 1 0 B 0 0 B 0 46 GiB
replicapool 2 32 155 MiB 108 478 MiB 0.33 46 GiB
node ls
はクラスタ全体のサービスの一覧を表示。出力がシンプルすぎるのと json で出力されるので内容がすかすかに・・・
$ ceph node ls
{
"mon": {
"nd01": [
"a"
],
"nd02": [
"c"
],
"nd03": [
"b"
]
},
"osd": {
"nd01": [
2
],
"nd02": [
1
],
"nd03": [
0
]
},
"mgr": {
"nd01": [
"a"
]
}
}
health
はクラスタの健康状態を確認。status
でも出力されている警告文が表示されていた。これ以上細かい情報は出力されなさそう。
$ ceph health
HEALTH_WARN mons are allowing insecure global_id reclaim; mons a,b are low on available space
config
は設定関連のコマンド。set xxxx
が多い。config dump
で設定を出力してくれるが、内容が少ない・・・デフォルト設定は表示されない?
$ ceph config dump
WHO MASK LEVEL OPTION VALUE RO
global basic log_file *
global basic log_to_file false
global advanced mon_allow_pool_delete true
global advanced mon_cluster_log_file
global advanced mon_pg_warn_min_per_osd 0
global advanced osd_pool_default_pg_autoscale_mode on
global advanced osd_scrub_auto_repair true
global advanced rbd_default_features 3
mgr advanced mgr/balancer/active true
mgr advanced mgr/balancer/mode upmap
mgr.a advanced mgr/dashboard/server_port 8443 *
mgr.a advanced mgr/dashboard/ssl true *
mgr.a advanced mgr/dashboard/ssl_server_port 8443 *
と思ったら、config show
コマンドを使うと各サービスの設定情報が見れた。
config show <who> [<key>]
で出力される。who
にサービス(osd.0
、mon.a
)を指定するとサービスの設定情報が出力される。config show-with-defaults
でデフォルト設定を含めた設定が出力される。
$ ceph config show osd.0
NAME VALUE SOURCE OVERRIDES IGNORES
crush_location root=default host=nd03 cmdline
daemonize false override
err_to_stderr true cmdline
keyring $osd_data/keyring default
leveldb_log default
log_file mon
log_stderr_prefix debug cmdline
log_to_file false mon (default[false])
log_to_stderr true cmdline
mon_allow_pool_delete true mon
mon_cluster_log_file mon
mon_cluster_log_to_file false default
mon_cluster_log_to_stderr true cmdline
mon_host [v2:10.98.223.141:3300,v1:10.98.223.141:6789],[v2:10.97.191.38:3300,v1:10.97.191.38:6789],[v2:10.110.61.106:3300,v1:10.110.61.106:6789] override
mon_pg_warn_min_per_osd 0 mon
ms_bind_ipv4 true cmdline
ms_bind_ipv6 false cmdline
ms_learn_addr_from_peer false cmdline
no_config_file false override
osd_memory_target 13371546009 default
osd_pool_default_pg_autoscale_mode on mon
osd_scrub_auto_repair true mon
rbd_default_features 3 mon default[61]
setgroup ceph cmdline
setuser ceph cmdline
device
でデバイス情報を見ようとしたが空行が多い・・・BlueStoreなる機能が新し目のバージョンには導入されていて、今回導入した Ceph もそちらを使っていそう。だからか?
$ ceph device ls
DEVICE HOST:DEV DAEMONS LIFE EXPECTANCY
$ ceph device ls-lights
{
"fault": [],
"ident": []
}
$ ceph device check-health
$ ceph device ls-by-daemon osd.1
DEVICE HOST:DEV EXPECTED FAILURE
$ ceph device ls-by-daemon osd.2
DEVICE HOST:DEV EXPECTED FAILURE
log last
で直近のログが確認できた。ログレベル、出力内容の指定が可能みたい。
$ ceph log last warn cluster
2021-04-30T15:10:55.412708+0000 mon.b (mon.1) 164 : cluster [WRN] message from mon.0 was stamped 0.828440s in the future, clocks not synchronized
2021-04-30T15:11:55.439579+0000 mon.a (mon.0) 390 : cluster [WRN] 1 clock skew 0.828747s > max 0.05s
2021-04-30T15:11:55.439606+0000 mon.a (mon.0) 391 : cluster [WRN] 2 clock skew 0.335605s > max 0.05s
iostat
は Linux の iostat
的に使える IO の状態確認コマンド。細かいオプションは指定できない。フィルタとかも指定できなさそう。
+-------------+-------------+-------------+-------------+-------------+-------------+
| Read | Write | Total | Read IOPS | Write IOPS | Total IOPS |
+-------------+-------------+-------------+-------------+-------------+-------------+
| 0 B/s | 0 B/s | 0 B/s | 0 | 0 | 0 |
| 0 B/s | 0 B/s | 0 B/s | 0 | 0 | 0 |
| 489 KiB/s | 0 B/s | 489 KiB/s | 24 | 0 | 24 |
| 489 KiB/s | 0 B/s | 489 KiB/s | 24 | 0 | 24 |
| 489 KiB/s | 16 KiB/s | 505 KiB/s | 24 | 0 | 25 |
| 489 KiB/s | 16 KiB/s | 505 KiB/s | 24 | 0 | 25 |
| 488 KiB/s | 16 KiB/s | 504 KiB/s | 24 | 0 | 25 |
| 565 KiB/s | 30 KiB/s | 595 KiB/s | 26 | 1 | 27 |
| 565 KiB/s | 30 KiB/s | 595 KiB/s | 26 | 1 | 27 |
| 76 KiB/s | 30 KiB/s | 106 KiB/s | 1 | 1 | 2 |
MGR/MON
MGR / MON サービスに対してのコマンド。参照関連のコマンドを確認したけど、得られる情報は少なめ。
$ ceph mgr services
{
"dashboard": "https://rook-ceph-mgr-a-7d54cbb75c-tt4jp:8443/",
"prometheus": "http://rook-ceph-mgr-a-7d54cbb75c-tt4jp:9283/"
}
$ ceph mon stat
e3: 3 mons at {a=[v2:10.98.223.141:3300/0,v1:10.98.223.141:6789/0],b=[v2:10.97.191.38:3300/0,v1:10.97.191.38:6789/0],c=[v2:10.110.61.106:3300/0,v1:10.110.61.106:6789/0]}, election epoch 42, leader 0 a, quorum 0,1,2 a,b,c
OSD
実ストレージ関連ではメインどころの osd
。pool
、crush
などキーワードは多い。
$ ceph osd stat
3 osds: 3 up (since 3h), 3 in (since 27h); epoch: e51
$ ceph osd status
ID HOST USED AVAIL WR OPS WR DATA RD OPS RD DATA STATE
0 nd03 1191M 48.8G 0 0 0 0 exists,up
1 nd02 1191M 48.8G 0 0 0 0 exists,up
2 nd01 1191M 48.8G 0 0 0 0 exists,up
$ ceph osd df
ID CLASS WEIGHT REWEIGHT SIZE RAW USE DATA OMAP META AVAIL %USE VAR PGS STATUS
2 hdd 0.04880 1.00000 50 GiB 1.2 GiB 167 MiB 89 KiB 1024 MiB 49 GiB 2.33 1.00 33 up
1 hdd 0.04880 1.00000 50 GiB 1.2 GiB 167 MiB 92 KiB 1024 MiB 49 GiB 2.33 1.00 33 up
0 hdd 0.04880 1.00000 50 GiB 1.2 GiB 167 MiB 93 KiB 1024 MiB 49 GiB 2.33 1.00 33 up
TOTAL 150 GiB 3.5 GiB 502 MiB 276 KiB 3.0 GiB 147 GiB 2.33
MIN/MAX VAR: 1.00/1.00 STDDEV: 0
$ ceph osd df tree
ID CLASS WEIGHT REWEIGHT SIZE RAW USE DATA OMAP META AVAIL %USE VAR PGS STATUS TYPE NAME
-1 0.14639 - 150 GiB 3.5 GiB 502 MiB 274 KiB 3.0 GiB 147 GiB 2.33 1.00 - root default
-3 0.04880 - 50 GiB 1.2 GiB 167 MiB 89 KiB 1024 MiB 49 GiB 2.33 1.00 - host nd01
2 hdd 0.04880 1.00000 50 GiB 1.2 GiB 167 MiB 89 KiB 1024 MiB 49 GiB 2.33 1.00 33 up osd.2
-7 0.04880 - 50 GiB 1.2 GiB 167 MiB 92 KiB 1024 MiB 49 GiB 2.33 1.00 - host nd02
1 hdd 0.04880 1.00000 50 GiB 1.2 GiB 167 MiB 92 KiB 1024 MiB 49 GiB 2.33 1.00 33 up osd.1
-5 0.04880 - 50 GiB 1.2 GiB 167 MiB 93 KiB 1024 MiB 49 GiB 2.33 1.00 - host nd03
0 hdd 0.04880 1.00000 50 GiB 1.2 GiB 167 MiB 93 KiB 1024 MiB 49 GiB 2.33 1.00 33 up osd.0
TOTAL 150 GiB 3.5 GiB 502 MiB 276 KiB 3.0 GiB 147 GiB 2.33
$ ceph osd info
osd.0 up in weight 1 up_from 47 up_thru 47 down_at 46 last_clean_interval [31,43) [v2:172.16.86.156:6800/3195135252,v1:172.16.86.156:6801/3195135252] [v2:172.16.86.156:6802/3195135252,v1:172.16.86.156:6803/3195135252] exists,up 7ebdd188-6e6a-4b94-b5c8-f41a33d00a56
osd.1 up in weight 1 up_from 46 up_thru 47 down_at 45 last_clean_interval [29,43) [v2:172.16.53.213:6800/2992984540,v1:172.16.53.213:6801/2992984540] [v2:172.16.53.213:6802/2992984540,v1:172.16.53.213:6803/2992984540] exists,up 80bbfedb-7eec-4aef-a781-df1779f78d7f
osd.2 up in weight 1 up_from 45 up_thru 47 down_at 41 last_clean_interval [34,40) [v2:172.16.246.31:6800/2975630895,v1:172.16.246.31:6801/2975630895] [v2:172.16.246.31:6802/2975630895,v1:172.16.246.31:6803/2975630895] exists,up 63359ad8-5502-4a88-9593-827ea1d89b63
pool
も確認。ヘルスチェック用とデータ用の Pool を確認。こちらも情報少なめ。
$ ceph osd pool ls
device_health_metrics
replicapool
$ ceph osd pool stats
pool device_health_metrics id 1
nothing is going on
pool replicapool id 2
nothing is going on
$ ceph osd pool application get
{
"device_health_metrics": {
"mgr_devicehealth": {}
},
"replicapool": {
"rbd": {}
}
}
crush
は一覧やルールが確認できた。
$ ceph osd crush tree
ID CLASS WEIGHT TYPE NAME
-1 0.14639 root default
-3 0.04880 host nd01
2 hdd 0.04880 osd.2
-7 0.04880 host nd02
1 hdd 0.04880 osd.1
-5 0.04880 host nd03
0 hdd 0.04880 osd.0
$ ceph osd crush rule ls
replicated_rule
replicapool
$ ceph osd crush rule dump replicapool
{
"rule_id": 1,
"rule_name": "replicapool",
"ruleset": 1,
"type": 1,
"min_size": 1,
"max_size": 10,
"steps": [
{
"op": "take",
"item": -1,
"item_name": "default"
},
{
"op": "chooseleaf_firstn",
"num": 0,
"type": "host"
},
{
"op": "emit"
}
]
}
PlacementGroup
pg
で確認。デフォルトの設定のはずだが量が多い・・・
$ ceph pg stat
33 pgs: 33 active+clean; 200 MiB data, 502 MiB used, 147 GiB / 150 GiB avail
$ ceph pg ls
PG OBJECTS DEGRADED MISPLACED UNFOUND BYTES OMAP_BYTES* OMAP_KEYS* LOG STATE SINCE VERSION REPORTED UP ACTING SCRUB_STAMP DEEP_SCRUB_STAMP
1.0 0 0 0 0 0 0 0 0 active+clean 3h 0'0 50:63 [0,1,2]p0 [0,1,2]p0 2021-04-29T14:22:50.191867+0000 2021-04-29T14:22:50.191867+0000
2.0 4 0 0 0 8159232 0 0 370 active+clean 68m 24'370 51:523 [0,1,2]p0 [0,1,2]p0 2021-04-30T17:28:15.552763+0000 2021-04-29T14:30:15.883012+0000
2.1 2 0 0 0 4714496 0 0 384 active+clean 3h 24'384 50:546 [2,1,0]p2 [2,1,0]p2 2021-04-29T14:30:15.883012+0000 2021-04-29T14:30:15.883012+0000
2.2 6 0 0 0 14843904 0 0 368 active+clean 3h 51'368 51:427 [0,2,1]p0 [0,2,1]p0 2021-04-29T14:30:15.883012+0000 2021-04-29T14:30:15.883012+0000
2.3 4 0 0 0 8388608 0 0 403 active+clean 3h 49'403 51:7927 [0,2,1]p0 [0,2,1]p0 2021-04-29T14:30:15.883012+0000 2021-04-29T14:30:15.883012+0000
2.4 2 0 0 0 6422528 0 0 447 active+clean 90m 24'447 51:692 [2,1,0]p2 [2,1,0]p2 2021-04-30T17:06:25.671488+0000 2021-04-29T14:30:15.883012+0000
2.5 3 0 0 0 6455296 0 0 414 active+clean 3h 51'414 51:552 [1,2,0]p1 [1,2,0]p1 2021-04-29T14:30:15.883012+0000 2021-04-29T14:30:15.883012+0000
・・・
RBD(Rados Block Device)
rbd
コマンドでデバイス関連の情報が見つかるか期待したが確認できず・・・
参照系が少なめだった。
Telemetry
名前の通り、色々利用状況がとれる。が、デバイスの情報とかはなし。コマンドで参照できる中では設定がなさそう?
$ ceph telemetry show-device
{}
$ ceph telemetry show
{
"balancer": {
"active": true,
"mode": ""
},
・・・
"hosts": {
"num": 3,
"num_with_mds": 0,
"num_with_mgr": 1,
"num_with_mon": 3,
"num_with_osd": 3
},
・・・
"osd": {
"cluster_network": false,
"count": 3,
"require_min_compat_client": "luminous",
"require_osd_release": "octopus"
},
"pools": [
・・・
{
"cache_mode": "none",
"erasure_code_profile": {},
"min_size": 2,
"pg_autoscale_mode": "on",
"pg_num": 32,
"pgp_num": 32,
"pool": 2,
"size": 3,
"target_max_bytes": 0,
"target_max_objects": 0,
"type": "replicated"
}
],
"rbd": {
"mirroring_by_pool": [
false
],
"num_images_by_pool": [
2
],
"num_pools": 1
},
・・・
"usage": {
"pg_num": 33,
"pools": 2,
"total_avail_bytes": 157313400832,
"total_bytes": 161061273600,
"total_used_bytes": 526647296
}
}
Kubernetes Node を確認してみる
コマンドで見つからなかったので Node 側を確認してみる。cluster.yaml に以下の記述があるので Node 側でディレクトリを確認してみる。今回の Ceph クラスタでは以下の yaml に特にストレージ設定をしていなかったので空ストレージ(デバイス)が自動的に利用されているはず。
apiVersion: ceph.rook.io/v1
kind: CephCluster
・・・
spec:
・・・
dataDirHostPath: /var/lib/rook
・・・
先に Node 側のブロックデバイス情報を確認する。構築前にアタッチしたストレージは /dev/sdc
。見た目は変わらなように見えるが・・・
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 10G 0 disk
mqsda1 8:1 0 10G 0 part /
sdb 8:16 0 10M 0 disk
sdc 8:32 0 50G 0 disk
指定したデータディレクトリは新規作成されていた。ブロックデバイスを分けておかないと /dev/sda1
の領域に作られてしまい、/
と同じデバイスにデータが格納されてしまうので注意が必要。dataDirHostPath
と書いてあったのは Ceph の管理データを貯めておくみたいですね。
$ df -hT /var/lib/rook/
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda1 ext4 9.7G 6.4G 3.3G 66% /
データディレクトリ内を確認してみると怪しげなディレクトリを発見。
$ ls /var/lib/rook/rook-ceph/
_dev_sdc client.admin.keyring crash log rook-ceph.config
ブロックストレージのリンクを発見。なるほど、こちらで利用するブロックストレージがリンク付けれられているぽい?複数あるとどうなるんだろう。
$ ls -l /var/lib/rook/rook-ceph/_dev_sdc/
total 28
lrwxrwxrwx 1 167 167 8 May 1 04:21 block -> /dev/sdc
-rw------- 1 167 167 37 May 1 04:21 ceph_fsid
-rw------- 1 167 167 37 May 1 04:21 fsid
-rw------- 1 167 167 55 May 1 04:21 keyring
-rw------- 1 167 167 6 May 1 04:21 ready
-rw------- 1 167 167 3 Apr 29 14:22 require_osd_release
-rw------- 1 167 167 10 May 1 04:21 type
-rw------- 1 167 167 2 May 1 04:21 whoami
dataDirHostPath
用のブロックストレージの分離と、複数のブロックストレージをアタッチした構築の記事でも投稿しよう。