前回は、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