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

イエーイ。
さっそくログインしたいところですが、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にログインします。

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

Cephクラスタを視認性高くモニタリングすることができるのが、Ceph Dashboardです。
まとめ
今回はサクッとCeph Dashboardの紹介をしてみました。
今回はデフォルトのadminユーザーを使いましたが、もちろん他のユーザーを作れます。Dashboardのユーザーアクセス制御はRBACで、情報ごとにCRUDの権限を設定してRoleを作成できるので、一般ユーザーさんに公開することもできます。
はい、というわけで今日はここまで。