ストレージオーケストレーター Rook : 第6話 CephのDashboardを叩け!

f:id:ututaq:20191125022735p:plain
連投やで

ども。レッドハットでストレージを中心にクラウドインフラを生業にしている宇都宮です。
この業界の恒例となった12月のアドベントカレンダーですが、なんとRookもアドベントカレンダーをやります!Special thanks to tzkobaさん!

qiita.com

Rook勢では知らない人は居ないであろう tzkoba さん、makotowさんががっつり書きますよ!
僭越ながら宇都宮も12/1から8連投で投げさせていただきます!肩ちぎれるまで根性で投げますよ!12月はRook MeetupもあるしOpenShift.RUNもあるしなんかすごいぞ!アハハ!

引き続き、RookとOpenShift Japan CommunityのTwitterアカウント、@japan_rook@openshiftjpのフォローお願いしまーす!

Ceph Dashboard

はい、てなわけで前回はCephFSを使ってみました。今回はCeph Dashboardを使ってみましょう。
CephはKraken(v11)から"ceph-mgr"というdaemonが登場しました。ceph-mgrはceph-monを補助するように、監視機能を提供したり外部の監視ツール/ソフトウェアのサービスと連携したりする役割を担います。ceph-mgrはLuminous(v12)からceph-monとセットでデプロイされるようになっていて、標準でCephクラスタの利用状況をGUIで表示するDashboardが搭載されています。

もちろんRook-Cephでもceph-mgrはデプロイされるのでDashboardは利用できます。今日はそれをちょっと使ってみましょう。

Dashboardを有効にする

Kubernetesの環境は前回と同じものをそのまま使います。
kubectl create -f operator.yamlまでは前回と同じでいいですが、kubectl create -f cluster.yamlのところ、つまりCephクラスタを作るところで一回止まりましょう。
Ceph Dashboardを使うためには、まずCephクラスタのマニフェストファイル(cluster.yaml)の中で、dashboardをenableに設定する必要があります。デフォルトでenabled: trueになっているので、意図的にfalseにしてない限り変更する必要はないでしょう。
ちなみにコメントアウトされてるパラメータを設定することでポートやURLを編集できます。

[utubo@tutsunom ceph]$ grep -A 7 "dashboard:" cluster.yaml 
  dashboard:
    enabled: true
    # serve the dashboard under a subpath (useful when you are accessing the dashboard via a reverse proxy)
    # urlPrefix: /ceph-dashboard
    # serve the dashboard at the given port.
    # port: 8443
    # serve the dashboard using SSL
    ssl: true

念の為CephClusterリソースでもチェックして、Serviceも確認しておきましょう。

[utubo@tutsunom ceph]$ kubectl describe cephcluster|grep -A 2 Dashboard
  Dashboard:
    Enabled:           true
    Ssl:               true
[utubo@tutsunom ceph]$ kubectl get svc rook-ceph-mgr-dashboard
NAME                       TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE
rook-ceph-mgr-dashboard    ClusterIP   100.70.46.106    <none>        8443/TCP            3d10h

はい、大丈夫ですね。

Dashboardを外部に公開する

Ceph Dashboardのサービスを外部に公開します。方法はNodePortでもLoadBalancerでもIngressでも、全て設定するyamlがあるので好きなのでいいと思います。ここでは一番楽チンなLoadBalancerでいきます。

[utubo@tutsunom ceph]$ ls -l dashboard-*
-rw-rw-r-- 1 utubo utubo 362 11月 21 21:14 dashboard-external-http.yaml
-rw-rw-r-- 1 utubo utubo 363 11月 21 21:14 dashboard-external-https.yaml
-rw-rw-r-- 1 utubo utubo 839 11月 21 21:14 dashboard-ingress-https.yaml
-rw-rw-r-- 1 utubo utubo 365 11月 21 21:14 dashboard-loadbalancer.yaml
[utubo@tutsunom ceph]$ 
[utubo@tutsunom ceph]$ cat dashboard-loadbalancer.yaml 
apiVersion: v1
kind: Service
metadata:
  name: rook-ceph-mgr-dashboard-loadbalancer
  namespace: rook-ceph
  labels:
    app: rook-ceph-mgr
    rook_cluster: rook-ceph
spec:
  ports:
  - name: dashboard
    port: 8443
    protocol: TCP
    targetPort: 8443
  selector:
    app: rook-ceph-mgr
    rook_cluster: rook-ceph
  sessionAffinity: None
  type: LoadBalancer
[utubo@tutsunom ceph]$ 
[utubo@tutsunom ceph]$ kubectl create -f dashboard-loadbalancer.yaml
service/rook-ceph-mgr-dashboard-loadbalancer created
[utubo@tutsunom ceph]$ 
[utubo@tutsunom ceph]$ kubectl get svc -l app=rook-ceph-mgr
NAME                                   TYPE           CLUSTER-IP       EXTERNAL-IP                                                               PORT(S)          AGE
rook-ceph-mgr                          ClusterIP      100.70.230.202   <none>                                                                    9283/TCP         3d10h
rook-ceph-mgr-dashboard                ClusterIP      100.70.46.106    <none>                                                                    8443/TCP         3d10h
rook-ceph-mgr-dashboard-loadbalancer   LoadBalancer   100.65.39.6      xxxx7c64cbfaa4e71949f59d4c10687c-1467982743.us-east-1.elb.amazonaws.com   8443:31564/TCP   39s

できた。あとはWebブラウザからEXTERNAL-IPに表示されてるURLに8443番ポートでアクセスすると見られます。

Dashboardに接続する

そしたら公開されたDashboardに接続してみましょう。

f:id:ututaq:20191126000117p:plain
ストイックでカッコイイ。

イエーイ。
さっそくログインしたいところですが、usernameとpasswordは何を使えばいいんでしょうか。
DashboardをenableにしてCephクラスタを作ると、Rookはデフォルトのdashboardユーザーであるadminと、そのSecretであるrook-ceph-dashboard-admin-passwordを作成します。このSecretからadminのパスワードを調べればいいです。パスワードは普通にkubectl getで見えますが、表示される文字列はbase64でエンコードされてるのでデコードするように注意しましょう。

[utubo@tutsunom ceph]$ kubectl get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode && echo
XXXXXXXXXX

10文字のpasswordが出てくるので、これを使ってDashboardにログインします。

f:id:ututaq:20191126000558p:plain
箱に文字。分かりやすい。

ログインしたらこんな感じでステータスやらCephクラスタの構成やらの一覧がバンと表示されます。上の方のメニュー選んでいくとクラスタのパラメータ値とか割と事細かく情報が見ることができて、結構使えると思います。

f:id:ututaq:20191126000754p:plain
意外とグラフィカル。小学X年生の付録にあった立体メガネを思い出す。

Cephクラスタを視認性高くモニタリングすることができるのが、Ceph Dashboardです。

まとめ

今回はサクッとCeph Dashboardの紹介をしてみました。
今回はデフォルトのadminユーザーを使いましたが、もちろん他のユーザーを作れます。Dashboardのユーザーアクセス制御はRBACで、情報ごとにCRUDの権限を設定してRoleを作成できるので、一般ユーザーさんに公開することもできます。

はい、というわけで今日はここまで。

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。