複数ブロックストレージをアタッチして Rook/Ceph を構築
はじめに
前回 Rook/Ceph で Ceph の構築を試しました。
構築した Ceph で気になる点、コマンドのお試しをスクラップにメモとして残しました。
使っているブロックストレージで気になる点が残ったので今回は複数のブロックストレージを Kubernetes Node にアタッチしてどういう動きになるのか確認していきたいと思います。
環境情報
OS:Ubuntu 18.04.5 LTS
Kubernetes:v1.19.7
※ Node x3台
Ceph:15.2.11
Rook:v1.6.1
※Kubernetes の Node で以下のようにブロックストレージを追加しています。
$ lsblk -i
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 10G 0 disk
`-sda1 8:1 0 10G 0 part /
sdb 8:16 0 10M 0 disk
sdc 8:32 0 10G 0 disk
`-sdc1 8:33 0 10G 0 part
`-rook-data 253:0 0 10G 0 lvm /var/lib/rook ★ Ceph管理データ用
sdd 8:48 0 30G 0 disk ★ Cephデータ格納用(1)
sde 8:64 0 30G 0 disk ★ Cephデータ格納用(2)
$ df -hT | grep -v -e overlay -e tmpfs
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda1 ext4 9.7G 7.1G 2.6G 74% /
/dev/mapper/rook-data ext4 9.8G 37M 9.3G 1% /var/lib/rook
Deploy Rook/Ceph
Rook のデプロイは前回も行っているので、おさらいがてらにさらっと。
$ git clone --single-branch --branch v1.6.1 https://github.com/rook/rook.git
$ kubectl create -f common.yaml -f crds.yaml -f operator.yaml
$ kubectl get po -n rook-ceph
NAME READY STATUS RESTARTS AGE
rook-ceph-operator-95f44b96c-2bbn9 1/1 Running 0 75s
Operator Pod が起動していれば準備完了です。
今回はストレージの設定を行うので Ceph クラスタのマニフェストファイル(cluster.yaml
)を修正します。まずは ブロックストレージの sdd
だけを指定します。
storage: # cluster level storage configuration and selection
useAllNodes: true
- useAllDevices: true
+ useAllDevices: false
#deviceFilter:
+ devices:
+ - name: "sdd"
config:
Ceph クラスタをデプロイします。
$ kubectl apply -f cluster.yaml
cephcluster.ceph.rook.io/rook-ceph created
$ kubectl get cephclusters -n rook-ceph
NAME DATADIRHOSTPATH MONCOUNT AGE PHASE MESSAGE HEALTH EXTERNAL
rook-ceph /var/lib/rook 3 2m50s Ready Cluster created successfully HEALTH_WARN
# Pod の一覧
$ kubectl get po -n rook-ceph
NAME READY STATUS RESTARTS AGE
csi-cephfsplugin-jwl65 3/3 Running 0 12m
csi-cephfsplugin-jxgjx 3/3 Running 0 12m
csi-cephfsplugin-provisioner-5b989b9977-jdklp 6/6 Running 0 12m
csi-cephfsplugin-provisioner-5b989b9977-p2cds 6/6 Running 0 12m
csi-cephfsplugin-qtq5b 3/3 Running 0 12m
csi-rbdplugin-ctdqh 3/3 Running 0 12m
csi-rbdplugin-kg9q4 3/3 Running 0 12m
csi-rbdplugin-provisioner-55f998c984-kgwlq 6/6 Running 0 12m
csi-rbdplugin-provisioner-55f998c984-l8g6p 6/6 Running 0 12m
csi-rbdplugin-szlvc 3/3 Running 0 12m
rook-ceph-crashcollector-nd01-5b6f6c8974-d2r89 1/1 Running 0 11m
rook-ceph-crashcollector-nd02-84bc45b685-pmsjj 1/1 Running 0 10m
rook-ceph-crashcollector-nd03-66b4dd645b-4z6g9 1/1 Running 0 10m
rook-ceph-mgr-a-79659c6889-lgrqq 1/1 Running 0 10m
rook-ceph-mon-a-689c9bc9d4-7pt5j 1/1 Running 0 12m
rook-ceph-mon-b-787d57cfbd-sknl4 1/1 Running 0 11m
rook-ceph-mon-c-6d6468f48f-467t2 1/1 Running 0 10m
rook-ceph-operator-95f44b96c-2bbn9 1/1 Running 0 14m
rook-ceph-osd-0-7dcbbd5dbd-nwwqm 1/1 Running 0 10m
rook-ceph-osd-1-8644bb7f54-nb6jd 1/1 Running 0 10m
rook-ceph-osd-2-5878cfdddd-flshw 1/1 Running 0 10m
rook-ceph-osd-prepare-nd01-fkmws 0/1 Completed 0 10m
rook-ceph-osd-prepare-nd02-ft6lj 0/1 Completed 0 10m
rook-ceph-osd-prepare-nd03-89vqb 0/1 Completed 0 10m
rook-ceph-tools-57787758df-xs4c5 1/1 Running 0 9m17s
クラスタ確認
クラスタがデプロイ出来たところで、ToolBox
をデプロイしてステータス確認します。
# ToolBox のデプロイ
$ kubectl apply -f toolbox.yaml -n rook-ceph
# Pod 名を変数に格納
$ POD=`kubectl get po -l app=rook-ceph-tools -n rook-ceph -o jsonpath='{.items[*].metadata.name}'`
# Ceph のステータス確認
# 30 GiB x3台 = 90 GiB が認識されていることを確認
$ kubectl exec -it $POD -n rook-ceph -- ceph status
cluster:
id: cb908056-6d80-4612-bdf7-badd68a2015e
health: HEALTH_WARN
mons are allowing insecure global_id reclaim
clock skew detected on mon.b, mon.c
services:
mon: 3 daemons, quorum a,b,c (age 110s)
mgr: a(active, since 85s)
osd: 3 osds: 3 up (since 87s), 3 in (since 87s)
data:
pools: 1 pools, 1 pgs
objects: 0 objects, 0 B
usage: 3.0 GiB used, 87 GiB / 90 GiB avail
pgs: 1 active+clean
# ストレージサイズを確認
# 上記同様に 90 GiB が認識されていることを確認
# Pool / StorageClass が未定義なので Pool はシステム用の1つのみ
$ kubectl exec -it $POD -n rook-ceph -- ceph df
--- RAW STORAGE ---
CLASS SIZE AVAIL USED RAW USED %RAW USED
hdd 90 GiB 87 GiB 5.8 MiB 3.0 GiB 3.34
TOTAL 90 GiB 87 GiB 5.8 MiB 3.0 GiB 3.34
--- POOLS ---
POOL ID PGS STORED OBJECTS USED %USED MAX AVAIL
device_health_metrics 1 1 0 B 0 0 B 0 27 GiB
# 各 OSD のサイズが sdd と同じ 30 GiB で認識されていることを確認
$ kubectl exec -it $POD -n rook-ceph -- ceph osd df tree
ID CLASS WEIGHT REWEIGHT SIZE RAW USE DATA OMAP META AVAIL %USE VAR PGS STATUS TYPE NAME
-1 0.08789 - 90 GiB 3.0 GiB 5.6 MiB 0 B 3 GiB 87 GiB 3.34 1.00 - root default
-5 0.02930 - 30 GiB 1.0 GiB 1.9 MiB 0 B 1 GiB 29 GiB 3.34 1.00 - host nd01
2 hdd 0.02930 1.00000 30 GiB 1.0 GiB 1.9 MiB 0 B 1 GiB 29 GiB 3.34 1.00 1 up osd.2
-7 0.02930 - 30 GiB 1.0 GiB 1.9 MiB 0 B 1 GiB 29 GiB 3.34 1.00 - host nd02
1 hdd 0.02930 1.00000 30 GiB 1.0 GiB 1.9 MiB 0 B 1 GiB 29 GiB 3.34 1.00 1 up osd.1
-3 0.02930 - 30 GiB 1.0 GiB 1.9 MiB 0 B 1 GiB 29 GiB 3.34 1.00 - host nd03
0 hdd 0.02930 1.00000 30 GiB 1.0 GiB 1.9 MiB 0 B 1 GiB 29 GiB 3.34 1.00 1 up osd.0
TOTAL 90 GiB 3.0 GiB 5.6 MiB 0 B 3 GiB 87 GiB 3.34
MIN/MAX VAR: 1.00/1.00 STDDEV: 0
30 GiB が各ノードで1台ずつ確認できています。まだ StorageClass / Pool が未登録のため、Pool にはヘルスチェック用のものしか無いのも確認が出来ます。
Kubernetes Node のストレージについても状態を確認します。
# sdd の見た目は変わらず。
$ lsblk -i
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 10G 0 disk
`-sda1 8:1 0 10G 0 part /
sdb 8:16 0 10M 0 disk
sdc 8:32 0 10G 0 disk
`-sdc1 8:33 0 10G 0 part
`-rook-data 253:0 0 10G 0 lvm /var/lib/rook
sdd 8:48 0 30G 0 disk
sde 8:64 0 30G 0 disk
# /var/lib/rook に管理データが格納されたため、使用サイズが増えた
$ df -hT | grep -v -e overlay -e tmpfs
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda1 ext4 9.7G 7.1G 2.6G 74% /
/dev/mapper/rook-data ext4 9.8G 76M 9.2G 1% /var/lib/rook
# /var/lib/rook 配下にブロックストレージ用のディレクトリとリンクがはられていることを確認
$ ls -ld /var/lib/rook/rook-ceph/_dev*
drwxr-xr-x 2 167 167 4096 May 5 07:02 /var/lib/rook/rook-ceph/_dev_sdd
$ ls -ld /var/lib/rook/rook-ceph/_dev*/block
lrwxrwxrwx 1 167 167 8 May 5 07:02 /var/lib/rook/rook-ceph/_dev_sdd/block -> /dev/sdd
ブロックストレージの追加
構築した Ceph にブロックストレージ(/dev/sde
)を追加します。
まずは cluster.yaml
に以下のように sde
を追加します。
#deviceFilter:
devices:
- name: "sdd"
+ - name: "sde"
config:
編集できたら、早速 apply して設定を反映させます。
# 設定範囲絵
$ kubectl apply -f cluster.yaml
cephcluster.ceph.rook.io/rook-ceph configured
# Pod の一覧確認
$ kubectl get po -n rook-ceph
NAME READY STATUS RESTARTS AGE
csi-cephfsplugin-jwl65 3/3 Running 0 15m
csi-cephfsplugin-jxgjx 3/3 Running 0 15m
csi-cephfsplugin-provisioner-5b989b9977-jdklp 6/6 Running 0 15m
csi-cephfsplugin-provisioner-5b989b9977-p2cds 6/6 Running 0 15m
csi-cephfsplugin-qtq5b 3/3 Running 0 15m
csi-rbdplugin-ctdqh 3/3 Running 0 15m
csi-rbdplugin-kg9q4 3/3 Running 0 15m
csi-rbdplugin-provisioner-55f998c984-kgwlq 6/6 Running 0 15m
csi-rbdplugin-provisioner-55f998c984-l8g6p 6/6 Running 0 15m
csi-rbdplugin-szlvc 3/3 Running 0 15m
rook-ceph-crashcollector-nd01-5b6f6c8974-d2r89 1/1 Running 0 13m
rook-ceph-crashcollector-nd02-84bc45b685-pmsjj 1/1 Running 0 13m
rook-ceph-crashcollector-nd03-66b4dd645b-4z6g9 1/1 Running 0 13m
rook-ceph-mgr-a-79659c6889-lgrqq 1/1 Running 0 13m
rook-ceph-mon-a-689c9bc9d4-7pt5j 1/1 Running 0 15m
rook-ceph-mon-b-787d57cfbd-sknl4 1/1 Running 0 13m
rook-ceph-mon-c-6d6468f48f-467t2 1/1 Running 0 13m
rook-ceph-operator-95f44b96c-2bbn9 1/1 Running 0 17m
rook-ceph-osd-0-7dcbbd5dbd-nwwqm 1/1 Running 0 13m
rook-ceph-osd-1-8644bb7f54-nb6jd 1/1 Running 0 13m
rook-ceph-osd-2-5878cfdddd-flshw 1/1 Running 0 13m
rook-ceph-osd-3-79df86c99-xpzk2 1/1 Running 0 2m1s ★ 追加された Pod
rook-ceph-osd-4-6cd9bd8d8f-4wfbl 1/1 Running 0 2m ★ 追加された Pod
rook-ceph-osd-5-b57b4cf8c-hhqqc 1/1 Running 0 117s ★ 追加された Pod
rook-ceph-osd-prepare-nd01-v99ms 0/1 Completed 0 2m8s
rook-ceph-osd-prepare-nd02-cvh4n 0/1 Completed 0 2m6s
rook-ceph-osd-prepare-nd03-f948t 0/1 Completed 0 2m4s
rook-ceph-tools-57787758df-xs4c5 1/1 Running 0 11m
osd
の Pod が3つ追加されていることが確認できました。追加中にも kubectl get po -w
で確認するといくつかの準備用の Pod も起動しては削除の挙動をしていました。Operator からの指示でしょうか。
Ceph のステータスも確認していきます。
$ kubectl exec -it $POD -n rook-ceph -- ceph status
cluster:
id: cb908056-6d80-4612-bdf7-badd68a2015e
health: HEALTH_WARN
mons are allowing insecure global_id reclaim
services:
mon: 3 daemons, quorum a,b,c (age 19m)
mgr: a(active, since 18m)
osd: 6 osds: 6 up (since 7m), 6 in (since 7m)
data:
pools: 1 pools, 1 pgs
objects: 0 objects, 0 B
usage: 6.0 GiB used, 174 GiB / 180 GiB avail
pgs: 1 active+clean
$ kubectl exec -it $POD -n rook-ceph -- ceph df
--- RAW STORAGE ---
CLASS SIZE AVAIL USED RAW USED %RAW USED
hdd 180 GiB 174 GiB 20 MiB 6.0 GiB 3.34
TOTAL 180 GiB 174 GiB 20 MiB 6.0 GiB 3.34
--- POOLS ---
POOL ID PGS STORED OBJECTS USED %USED MAX AVAIL
device_health_metrics 1 1 0 B 0 0 B 0 55 GiB
$ kubectl exec -it $POD -n rook-ceph -- ceph osd df tree
ID CLASS WEIGHT REWEIGHT SIZE RAW USE DATA OMAP META AVAIL %USE VAR PGS STATUS TYPE NAME
-1 0.17578 - 180 GiB 6.0 GiB 20 MiB 0 B 6 GiB 174 GiB 3.34 1.00 - root default
-5 0.05859 - 60 GiB 2.0 GiB 6.5 MiB 0 B 2 GiB 58 GiB 3.34 1.00 - host nd01
2 hdd 0.02930 1.00000 30 GiB 1.0 GiB 3.2 MiB 0 B 1 GiB 29 GiB 3.34 1.00 0 up osd.2
3 hdd 0.02930 1.00000 30 GiB 1.0 GiB 3.2 MiB 0 B 1 GiB 29 GiB 3.34 1.00 1 up osd.3
-7 0.05859 - 60 GiB 2.0 GiB 6.5 MiB 0 B 2 GiB 58 GiB 3.34 1.00 - host nd02
1 hdd 0.02930 1.00000 30 GiB 1.0 GiB 3.2 MiB 0 B 1 GiB 29 GiB 3.34 1.00 0 up osd.1
4 hdd 0.02930 1.00000 30 GiB 1.0 GiB 3.2 MiB 0 B 1 GiB 29 GiB 3.34 1.00 1 up osd.4
-3 0.05859 - 60 GiB 2.0 GiB 6.5 MiB 0 B 2 GiB 58 GiB 3.34 1.00 - host nd03
0 hdd 0.02930 1.00000 30 GiB 1.0 GiB 3.2 MiB 0 B 1 GiB 29 GiB 3.34 1.00 1 up osd.0
5 hdd 0.02930 1.00000 30 GiB 1.0 GiB 3.2 MiB 0 B 1 GiB 29 GiB 3.34 1.00 0 up osd.5
TOTAL 180 GiB 6.0 GiB 20 MiB 0 B 6 GiB 174 GiB 3.34
MIN/MAX VAR: 1.00/1.00 STDDEV: 0
ストレージが追加された事により、osd
が増え利用可能なサイズも増えているのが確認できました。
最後にノードの状態も確認します。
$ lsblk -i
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 10G 0 disk
`-sda1 8:1 0 10G 0 part /
sdb 8:16 0 10M 0 disk
sdc 8:32 0 10G 0 disk
`-sdc1 8:33 0 10G 0 part
`-rook-data 253:0 0 10G 0 lvm /var/lib/rook
sdd 8:48 0 30G 0 disk
sde 8:64 0 30G 0 disk
$ df -hT | grep -v -e overlay -e tmpfs
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda1 ext4 9.7G 7.1G 2.6G 74% /
/dev/mapper/rook-data ext4 9.8G 95M 9.2G 2% /var/lib/rook
# /var/lib/rook 配下にブロックストレージ用のディレクトリとリンクがはられていることを確認
$ ls -ld /var/lib/rook/rook-ceph/_dev*
drwxr-xr-x 2 167 167 4096 May 5 07:02 /var/lib/rook/rook-ceph/_dev_sdd
drwxr-xr-x 2 167 167 4096 May 5 07:13 /var/lib/rook/rook-ceph/_dev_sde
$ ls -ld /var/lib/rook/rook-ceph/_dev*/block
lrwxrwxrwx 1 167 167 8 May 5 07:02 /var/lib/rook/rook-ceph/_dev_sdd/block -> /dev/sdd
lrwxrwxrwx 1 167 167 8 May 5 07:13 /var/lib/rook/rook-ceph/_dev_sde/block -> /dev/sde
まとめ
複数ブロックストレージというよりかは、ストレージの拡張手順を確認になりましたね・・・拡張作業自体は yaml ファイルを更新するだけで、後は Operator / Ceph が自動的に設定してもらえるので簡単にできました。useAllDevices
を true
にすることでブロックストレージを追加した段階で自動的に拡張が行われるようです。
Node 側で利用しているブロックストレージを確認するには、管理用ディレクトリを参照すると確認できることがわかりました。ブロックストレージでの利用なので lsblk
で確認しても利用前後で変化はないんですね。
次回はこの作業をしていた際のトラブルシューティングについて整理しようと思います。
Discussion