hidemium's blog

日々学んだことをアウトプットする。

Rook Cephのダッシュボードのインストール

前回は、Rook Cephを使って分散ストレージのインストールを試してみました。今回は、Rookのダッシュボードのインストールを試してみました。

hidemium.hatenablog.com

構成

ダッシュボードのインストール

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

前回までに、Ingressk8s_gatewayのインストールとサーバ証明書の作成を行っているため、ダッシュボード用にSecretとIngressの作成を行っていきます。

hidemium.hatenablog.com

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

ダッシュボード用のIngressを作成します。

$ 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の状態と同じでした。

When I deply rook-ceph, the ceph returns "mgr modules have recently crashed" · Issue #11316 · rook/rook · GitHub

暫定対処として、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

参考