Rook Cephのダッシュボードのインストール
前回は、Rook Cephを使って分散ストレージのインストールを試してみました。今回は、Rookのダッシュボードのインストールを試してみました。
構成
- vCenter 7.0 U3
- ESXi 7.0 Update 3
- Ubuntu 22.04 (テンプレートVM)
- open-vm-tools 11.3.5
- cloud-init 22.2
- Kubespray
- kubernetes v1.25.5
- MetalLB v0.12.1
- ingress-nginx v1.5.1
- CoreDNS
- EdgeRouter X
- Rook Ceph v1.10.9
ダッシュボードのインストール
Ceph Clusterをデプロイする時に利用した、cluster.yamlの中でデフォルトでダッシュボードのインストールが有効になっているため、すでにインストールされている状態となります。
$ vi cluster.yaml
spec:
dashboard:
enabled: true
以下のように、 rook-ceph-mgr-dashboard サービスが起動していることを確認します。
$ kubectl -n rook-ceph get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE rook-ceph-mgr ClusterIP 10.233.54.225 <none> 9283/TCP 2d15h rook-ceph-mgr-dashboard ClusterIP 10.233.37.83 <none> 8443/TCP 2d15h rook-ceph-mon-a ClusterIP 10.233.51.23 <none> 6789/TCP,3300/TCP 2d15h rook-ceph-mon-b ClusterIP 10.233.45.149 <none> 6789/TCP,3300/TCP 2d15h rook-ceph-mon-c ClusterIP 10.233.56.250 <none> 6789/TCP,3300/TCP 2d15h
前回までに、Ingressとk8s_gatewayのインストールとサーバ証明書の作成を行っているため、ダッシュボード用にSecretとIngressの作成を行っていきます。
Secretの作成
証明書は作成済みのため、Secretリソースに証明書を登録します。この時、Secretをrook-cephのnamespaceに入れておく必要があります。
$ export KEY_FILE="ingress-tls.key"
$ export CERT_FILE="ingress-tls.crt"
$ export CERT_NAME="ingress-tls"
$ kubectl create secret tls ${CERT_NAME} --key ${KEY_FILE} --cert ${CERT_FILE} -n rook-ceph
Ingressの作成
ダッシュボード用のIngressのマニフェストファイルが用意されているため、以下のように書き換えます。
$ vi dashboard-ingress-https.yaml
spec:
tls:
- hosts:
- rook-ceph.kube.home.lab
secretName: ingress-tls
rules:
- host: rook-ceph.kube.home.lab
$ kubectl create -f dashboard-ingress-https.yaml
Ingressが作成できていることを確認します。
$ kubectl -n rook-ceph get ingress NAME CLASS HOSTS ADDRESS PORTS AGE rook-ceph-mgr-dashboard <none> rook-ceph.kube.home.lab 10.0.50.201 80, 443 47
ダッシュボードへのログイン
ブラウザから https://rook-ceph.kube.home.lab に接続します。パスワードが求めらるので、ユーザ名は admin となり、パスワードについては、以下のコマンドでパスワードを確認します。
$ kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode && echo
ログインをすると以下のような画面が表示されます。

Cluster>Hostsからは、Ceph Clusterにあるworkerノードと、mon、mgr、osdがどのノードで起動しているかの状態が確認できます。

Cluster>OSDsからは、osdのステータスや、osdのデバイスの種類、ディスク容量が確認できます。

Block>imagesからは、前回作成したWordpress用のPVが確認できます。

発生した事象について
mgrが1台停止し、HEALTH_WARNのステータスとなることがありました。
bash-4.4$ ceph status
cluster:
id: 13a113cd-9060-4f1a-9fef-44d1bfe4fe26
health: HEALTH_WARN
1 mgr modules have recently crashed
services:
mon: 3 daemons, quorum a,b,c (age 2d)
mgr: a(active, since 15m)
osd: 4 osds: 4 up (since 2d), 4 in (since 2d)
data:
pools: 2 pools, 33 pgs
objects: 99 objects, 201 MiB
usage: 599 MiB used, 399 GiB / 400 GiB avail
pgs: 33 active+clean
こちらのissueの状態と同じでした。
暫定対処として、mrgのmoduleの追加と、mgrのpodを再起動しました。
cluster.yamlに以下の設定を追加し、applyします。cephコマンドで、mgrのモジュールにrookが追加されたことを確認します。
$ vi cluster.yaml
spec:
mgr:
modules:
- name: rook
enabled: true
$ kubectl apply -f cluster.yaml
$ kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- bash
bash-4.4$ ceph mgr module ls
MODULE
balancer on (always on)
crash on (always on)
devicehealth on (always on)
orchestrator on (always on)
pg_autoscaler on (always on)
progress on (always on)
rbd_support on (always on)
status on (always on)
telemetry on (always on)
volumes on (always on)
dashboard on
iostat on
nfs on
prometheus on
restful on
rook on
モジュールの追加だけだと、healthのステータスが変わらなかったため、podの再起動を行います。
$ kubectl rollout restart deploy -n rook-ceph rook-ceph-mgr-b
ステータスを戻すために、cephのコマンドでcrash情報をアーカイブしました。
bash-4.4$ ceph crash ls
ID ENTITY NEW
2023-01-21T22:35:55.341102Z_52cb8854-e243-4e2a-99c6-4ed8e66c2ac1 mgr.a *
bash-4.4$ ceph crash archive 2023-01-21T22:35:55.341102Z_52cb8854-e243-4e2a-99c6-4ed8e66c2ac1
bash-4.4$ ceph status
cluster:
id: 13a113cd-9060-4f1a-9fef-44d1bfe4fe26
health: HEALTH_OK
services:
mon: 3 daemons, quorum a,b,c (age 2d)
mgr: a(active, since 31m), standbys: b
osd: 4 osds: 4 up (since 2d), 4 in (since 2d)
data:
pools: 2 pools, 33 pgs
objects: 99 objects, 201 MiB
usage: 599 MiB used, 399 GiB / 400 GiB avail
pgs: 33 active+clean