💨

複数ブロックストレージをアタッチして Rook/Ceph を構築

2021/05/05に公開

はじめに

前回 Rook/Ceph で Ceph の構築を試しました。

https://qiita.com/t_ume/items/4ac37f746bf07146d5f9

構築した Ceph で気になる点、コマンドのお試しをスクラップにメモとして残しました。

https://zenn.dev/t_ume/scraps/b577cf0fff6c1f

使っているブロックストレージで気になる点が残ったので今回は複数のブロックストレージを 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 だけを指定します。

cluster.yaml
   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 を追加します。

cluster.yaml
     #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 が自動的に設定してもらえるので簡単にできました。useAllDevicestrue にすることでブロックストレージを追加した段階で自動的に拡張が行われるようです。

Node 側で利用しているブロックストレージを確認するには、管理用ディレクトリを参照すると確認できることがわかりました。ブロックストレージでの利用なので lsblk で確認しても利用前後で変化はないんですね。

次回はこの作業をしていた際のトラブルシューティングについて整理しようと思います。

Discussion