Japan Rook Meetup #2に関するブログ枠です。基本的に、意見ほぼなしのまとめです。GlusterFS とかはなんとなく触ったことがあるのですが、Rook とか Ceph とかはほぼ触ったことがなかったので、新鮮に勉強させていただきました。何かここが違うなど問題があれば、twitter 等でご指摘いただければと思います。
Kubernetes で外部ストレージを利用したい時
k8s 上で Storage Operation を実現。storage は運用が大変だが、その自動化ができる。
CNCF。Operator + Custom Resouce で k8s 拡張可能。
また、沢山の Storage システムに対応したフレームワーク
● Rook(major version)
# cephのステータス確認
ceph status
# e.g.
# https://github.com/rook/rook/blob/v1.2.0/cluster/examples/kubernetes/ceph/upgrade-from-v1.1-apply.yaml
kubectl apply -f upgrade-from-v1.1-apply.yaml
# e.g. v1.2.5へ
kubectl -n $ROOK_SYSTEM_NAMESPACE set image deploy/rook-ceph-oeprator rook-ceph-operator=rook/ceph:v1.2.5
# e.g.
# https://github.com/rook/rook/blob/v1.2.0/cluster/examples/kubernetes/ceph/upgrade-from-v1.1-crds.yaml
kubectl apply -f upgrade-from-v1.1-crds.yaml
● Rook(minor version)
# e.g. v1.2.5へ
kubectl -n $ROOK_SYSTEM_NAMESPACE set image deploy/rook-ceph-oeprator rook-ceph-operator=rook/ceph:v1.2.5
(注)Ceph の delete/create が伴う場合があるそう。
● Ceph(v14.2.4 -> v14.2.7)
# cephのステータス確認して、HEALTH_OKかどうか
ceph status
cluster: id: 3casefd74-edfg-2352-b54j-51jk12tj10
health: HEALTH_OK
● External Cluster
既存の Ceph Cluster に対して、Rook を用いた k8s との連携ができる。
■ メリット
■ デメリット
■ 利用例
Rook + ceph-ansible
https://github.com/ceph/ceph-ansible
Q. Ceph OSD の update で、node を変更しない以外のパターン以外で、新規の node に migration をかけることは可能か?
A. 検証していないが、多分できると思っている。
Q. Control Plan の upgrade する時に、実際にデータアクセスに影響があるということでしょうか?
A. Ceph OSD の pod を再起動されることになるので、クライアントからのリクエストの latency が高くなるだろうと思っている。影響の少ない時間帯で実施するなどの対応が必要だろうと思っている。
OSD の作成方法には大きく2つの方法があるとのこと
● 1.1. 従来の方法
OSD の設定にノード上のデバイスを直接指定する
● 1.2. OSD on PVC v1.1~
OSD の設定に PVC template を指定する。それを受けて、CSI driver が PV を作成する。Cluster 管理者は OSD pod がどこにあるかを気にしなくて良いさらに、デバイスの管理もしなくて良くなる。
● 2.1. OSD on PVC で LV サポート
■ 目的・背景
■ 既存の課題
以下の条件を満たす CSI ドライバがない
つまり、デバイス追加は手作業で PV 作成する必要がある。
■ TopoLVM
● 2.2. 従来方式で udev persistent name をサポート
v1.1 以前では、/dev 直下は気付いたら変わりうる。e.g. sda -> sdb
v1.2 以降では、新機能 devicePathFilter(サイボウズ作)
● 2.3. その他変更
cech-crash collector
FileStore OSD が obsolete(既存の FileStore OSD はサポートし続ける)
● 3.1. Failure domain をまたいだ OSD の均等分散配置
k8s の TopologySpreadConstraints 機能のサポート(OSD on PVC に必須)
■ TopologySpreadConstraints の目的
■ これまでの課題
OSD pod の偏りが生まれてしまい、ラックの障害耐性がない場合が有り得る。次期安定版から、対応予定で、これでようやく OSD on PVC が使えるものとなると思っている。
● 3.2. OSD on LV-backed PVC のテスト追加
しかし、3 つの壁が。。。
■ 壁 1: master で OSD on LV-backed PVC が動かない
■ 壁 2: テストがテスト環境を破壊
■ 壁 3: ローカル環境でテストがパスしない
調査中
● 3.3. FileStore の新規作成が不可能に
obsolute ではなく、不可能へ。
● 3.4. ストレージプロバイダ
● 3.5. その他の課題
コア部分と前ストレージプロバイダが同じリポジトリ管理しているので、開発がしにくい
● 3.6. 今後の貢献予定
● 4.1. プロジェクトの成熟度
● 4.2. Rook/Ceph を使う製品
Q. TopoLVM に関して、LVM のレイヤーを declaretive なやり方で、VG?を作ってくれるものという認識であっていますでしょうか?
A. はい。その通りです。Storage Class で TopoLVM のものを指定していただければ、LV を勝手に切ってくれて、それをブロックデバイス、ないし、ファイルシステムとして利用できるものです。
Q. FileStore が obsolute になって、BlueStore への移行がこれから出てくると思うのだが、マイグレーションパスの開発は進んでいるのでしょうか?
A. 現在、ドキュメント整備中です。基本的には、そのドキュメントがみてやっていただければ良いようになっていく予定です。
● 1. Rook-Ceph External Cluster の概要
Rook-Ceph を構築したクラスター外に存在する、Ceph クラスターのストレージリソースを利用すること
■ 本機能の背景
そうではないユースケースとは…
■ Rook-Ceph クラスター構築(通常)
# e.g. v1.2
git clone --single-branch --branch release-1.2 https://github.com/rook/rook.git
cd cluster/examples/kubernetes/ceph
1. kubectl create -f common.yaml
2. kubectl create -f operator.yaml
3. kubectl create -f cluster-test.yaml
https://rook.io/docs/rook/v1.2/ceph-quickstart.html
■ Rook-Ceph クラスター構築(external cluster)
# e.g. v1.2
git clone --single-branch --branch release-1.2 https://github.com/rook/rook.git
cd cluster/examples/kubernetes/ceph
1. kubectl create -f common.yaml
2. kubectl create -f operator.yaml
3. kubectl create -f common-external.yaml
4. ConfigMap/Secretリソースに外部のCeph clusterの情報としていれる
- namespace
- FSID
- client admin
- monitor endpoint
5. kubectl create -f cluster-external.yaml
クラスター構築後は
● 2. Rook-Ceph External Cluster の利用方法
● 3. Rook-Ceph External Cluster 利用時の注意点
● 参考リンク
● モチベーション
● 環境
● 遊び方
● 何を測るか
■ 1. 素の EBS(gp2)vs Rook-Ceph 3x replica RBD
■ 2. Ceph クラスタの OSD 数
■ 3. レプリカ数
Q. MIN_SIZE(Ceph pool の最小サイズ?)は同じにしているのかな?
A. 同じ一にしています。2x でも死んでも計測し続けられるようにしています。
Q. best practice で、1 SSD 1 device あたり 〇〇 OSD に良いみたいな指針をみた気がするのですが。そういう指針に沿うと良いとか有りますか?
A. 有効に使う 1 SSD に対して、1 OSD にしても、あまり IO がこなければもったいないので、2 とか 4OSD にした方が良いという話もあります。感覚としては、一旦、1 SSD に対して、1~2 OSD が良いかなと。NVMe みたいに、並列に Queue がバシバシ入るものなら、4,6OSD でも良いかなと。もう、その辺はどの程度の負荷になるか。容量にするか。によって、変えてもらえればと思います。
オンラインイベント初だったが、発表の音声ログなど残っていれば、そんなに問題ないなと思ったりしました。