はじめに
2020年4月8日、Rook v1.3がリリースされました。今回は新しいRookバージョンの変更点について、リリースノートを中心にまとめます。
We are excited to announce that the Rook v1.3 release is out! 🥳😎 Check out all the improvements and as always let us know your feedback! https://t.co/r7TAgaK8Rd
— rook (@rook_io) 2020年4月7日
Rook v1.3の変更点
Ceph
・Ceph Octopusをサポート、Ceph Nautilusは引き続きサポート
Rook-Cephでの最小サポートはCeph Nautilus 14.2.5になります。またCeph Mimicのサポートは無くなり、現在利用しているRookクラスターがCeph Mimicを利用している場合は、Rookバージョンを上げる前にCephバージョンをNautilusまで上げる必要があります。
・replica sizeを1にするにはrequireSafeReplicaSize
をfalseにする
requireSafeReplicaSize
はCephBlockPool
CRDを作成する際に指定するReplica Sizeが1
になり、データ損失が発生した際にリカバリーができなくなる事態を避けるために追加されています。デフォルトではtrue
に設定されています。
CephBlockPool
CRDを作成する際、requireSafeReplicaSize
をfalseにすることでreplica sizeを1
に指定することが可能にあります。
・cleanUpPolicy
によりdataDirHostPath
を削除することができる
これまではRook-Cephをアンインストールする際、dataDirHostPath
に指定したディレクトリに保存されたログ等のデータをユーザーが手で削除する必要がありました。これをcleanUpPolicy
を利用することで楽に削除できるようになりました。特に検証などで繰り返しクラスターを削除する際には役立ちそうな機能です。
※参考リンク:
Github - rook/rook: Ceph cluster clean up policy
Rook Doc v1.3 - Ceph Cluster CRD # Cluster Settings
・Rook monitor、MDS、OSDにliveness probeが追加される
MON/OSD/MDS等のDaemonがスタックしたり応答ができない状態になった際に検知できるよう、KubernetesのLiveness probeが追加されました。
なお、rbd-mirrorについては他のDaemonとはsocket nameが異なること、コマンド実行結果の出力名が異なるため、今回は見送っているようです。
※参考リンク:
Github Issues - ceph: add liveness probe to mon, mds and osd daemons #5128
・CephObjectStore
CRでPoolを指定することなくObject storeを作成できる
DashboardなどRookクラスターの外部からPoolの管理を許可することでCephObjectStore
で指定することなくPoolを作成できるようになります。
・DebugレベルでのOperatorログがより簡潔になった
・integration testが改善された
External ClusterやPVC上で稼働するクラスターに対するものも含め、改善がされています。これは後述するController runtimeへの変更が関係しています。
・compressionMode
を利用してPoolを設定することができる
Ceph Bluestore OSDで利用できるInline Compressionを利用できるようになりました。CephBlockPool
CRDのcompressionMode
を指定することで、データ圧縮を異なる4つのレベルで実行できます。
none
: データ圧縮を行わないpassive
: 書き込み操作の中に圧縮可能なセットが含まれる場合は圧縮するaggressive
: 書き込み操作内に圧縮不可能なセットが存在しない限り圧縮するforce
: データが何であれ圧縮しようとする
※参考リンク:
Rook Doc v1.3 - Ceph Block Pool CRD # Spec
・Ceph OctopusでのOSDはホストPID Namespaceを利用せずPod PID Namespaceを利用する
ホストのPID Namespaceを利用しないことでよりセキュアになります。またOSDはこれ以降ホストプロセスを見ることはありません。
※参考リンク:
Github Issues - ceph: do not use host PID anymore #4933
・Ceph Daemonは”topologySpreadConstraints”をサポート
CephCluster
CRDで利用できるPlacement Configurationに、Kubernetesの機能の一つであるTopologySpreadConstraints
を選択できるようになります。TopologySpreadConstraints
を利用することで、特定のノード上に複数のOSD Podが配置されるようコントロールすることができます。詳細は以下の参考リンクを確認ください。
※参考リンク:
Cybozu Inside Out - ストレージオーケストレーターRookへのサイボウズのコミット方針
Github Issues - Ceph: support topologySpreadConstraints #4387
・Multusの利用が可能に
MultusはKubernetes CNIのひとつであり、一つのPodに対して複数のNICを付与することができるようになります。RookではCephCluster
CRDでspec.network.provider
をmultus
にすることで利用可能であり、これにより監視用・クライアント通信用・クラスターネットワーク用など複数の用途でネットワークを分割することが可能になります。
なお、Multusの利用はまだexperimentalのステータスとなります。
※参考リンク:
Rook Doc v1.3 - Ceph Cluster CRD # Network Configuration Settings
OSD
・Ceph 14.2.8以上のバージョンでOSDの作成をサポート
・directoryベースのOSD、Filestore OSDのサポートが終了
これまでRook-Cephではdirectory-baseのOSDやFilestore OSD利用可能でしたが、新しいバージョンからはBluestore OSDのみが利用可能になります。なお、すでに稼働中のFilestore OSD / directory-based OSDは引き続き利用可能となります。
※参考リンク:
Rook Doc v1.3 - Ceph Cluster CRD # OSD Configuration Settings
Github Issues - Docs: Removal of OSD on directory, Filestore OSD and Rook legacy OSD support #4724
・Rook v0.9以前のバージョンで作成されたOSDのサポートを終了
・OSDを利用する際、デバイス名でなくudev pathを指定することで利用できる
OSDデバイスを指定する際、/dev/disk/by-path/pci-.*-sas-.*
のようにudev pathを指定することができるようになりました。こちらの機能の詳細や経緯については、以下の参考リンク先を参照してください。
※参考リンク:
Github Issues - Support device selection for OSDs by udev device name patterns. #4275
Cybozu Inside Out - ストレージオーケストレーターRookへのサイボウズのコミット方針
OSD on PVC
・OSD on PVCがmetadataデバイスをサポート
OSD on PVCを利用する際、よりパフォーマンスを最適化するため、metadataとdataとを異なるPVCに指定することができるようになりました。これにより、OSD on PVCを利用する際、metadataはSSD、dataはHDDを利用するよう指定することができます。
metadataとdataとのパフォーマンスの違いについては、以下参考リンク先を参照してください。
※参考リンク:
うつぼのブログ - Rook-CephでSSDとHDDを使い分ける
・OSD on PVCがPVC expansionをサポート
OSD on PVCを利用しているとき、対象のストレージデバイスのサイズが拡張されると、それを受けてOSDのサイズが増加し、クラスターのキャパシティが増加します。
※参考リンク:
Github Issues - ceph: implement osd block expansion on PVC #4844
・OSD on PVCでLVMを利用しなくなる
OSD on PVCではOSDを構成する際にLVMを利用することはなくなり、RAWデバイスを利用するようになりました。なお既にLVMを用いて作成されているOSD on PVCは、引き続きLVMによって管理されます。
※参考リンク:
Github Issues - ceph: osd do not use the rook binary for osd on pvc #4435
・OSD on PVC CRUSH device storage classがcrushDeviceClass
annotationをセットすることで変更される
OSD on PVCでmetadataをPVCに配置できるようになると、Ceph CRUSH device classはハードデバイスのrotational によって制御される必要があります。
例えばクラスターを構成するデバイスが以下のような組み合わせの場合、データデバイスのrorationalが0
に設定されるため、どちらもSSDとして設定されます。
cluster-on-pvc.yaml
では以下のような記載が追加されており、annotations
に追加することでcrushDeviceClass
を利用可能になります。ここではhybrid
を指定することができます。
volumeClaimTemplates: - metadata: name: data # if you are looking at giving your OSD a different CRUSH device class than the one detected by Ceph # annotations: # crushDeviceClass: hybrid
※参考リンク:
Github Issues - ceph: set crush device class via annotations on PVC #4888
Github Issues - crushDeviceClassFlag customization for OSD on PVC with metadata PVCs #4881
Ceph-CSI
・CSI v2.0.0が最小サポートとなる
・CSI v2.0.1がデフォルトでインストールされるバージョンとなる
・CSI driverはrook-ceph-operator-config
というConfigMapを利用して設定できる
rook-ceph-operator-config
というConfigMapに、CSI driverの設定内容を追加することができます。これにより、NodeAffinityやTolerations等の設定を行うことができます。
※参考リンク:
Github Issues - Ceph: add CSI configurations to ConfigMap #5032
Github Issues - Ceph: adds "rook-operator-config" configmap #4817
EdgeFS
・Time zonesのサポートを拡張
これまで、特に地理的分散の環境でEdgeFSを利用した際、Time Zoneを適切に検知・報告されないケースが見られていました。これは地理的に分散された環境でアプリケーションを動作させるうえで重要となるため、timezoneの検知についてサポートが改善されました。
・Rook SMB CRDの登場
Microsoft WindowsのCIFS/SMBを利用できるSMB
CRDが追加されました。これによりスケールアウトするCIFS/SMBサービスをEdgeFS上で利用できます。同一の地理的クラスター内でスケールすると、EdgeFSのアーキテクチャにより、SMB共有はISGWで接続されたあらゆるリージョンから利用可能になります。
なおSMB
CRDは現時点でExperimentalステータスの機能になります。
※参考リンク:
Rook Doc v1.3 - EdgeFS Scale-Out SMB CRD
YugabyteDB
・Master / TServer PodはYugabyteDB推奨のResource Request/Limitsが設定される
Resourceをコントロールすることで、既知のメモリ制限の問題を回避することをサポートします。
※参考リンク:
Rook Doc v1.3- YugabyteDB Cluster CRD
Cassandra
・JMX Prometheus exporterが追加
※参考リンク:
Github Issues - cassandra: JMX prometheus exporter #3228
その他
・Kubernetes サポートバージョンが1.11以上になる
Rookを稼働させることのできるKubernetesのバージョンは1.11より上のものになります。またそのうちIntegrationtestが行われたのは1.12以外のバージョンになります。
・Rook v1.3はGo 1.13のGo moduleでビルドされている
・Minioのサポートが無くなる
Rook v0.8あたりで追加されたMinioがサポートされなくなりました。
・v1.3よりRookではController runtimeを採用
Rookで利用される種々のCRDを制御するControllerが、CRD Controllerを記述するうえで最もよく利用されるcontroller-runtimeに変更されました。これにより、以下のような改善が得られます。
- 標準的・共通パターンに従う
- desired stateの堅牢性を向上する。各リソースのwatcherにより、リソース状態の変更が生じた際に、KubernetesのもつReconciliation loopを活用し、各controllerはそれを反映します。
- 各イベントのreconciliationが高速化する
- 各Controllerは
CephCluster
の外部に独自のRecociliation loopを持ち、独立して動作し、より素早く対応することができます。
参考リンク
Github - rook/rook Release Note v1.3
Rook blog - Rook v1.3: Storage Operator Improvements
Ceph blog - Rook v1.3: Octopus, OSD enhancements, and more!
medium - Rook v1.3: these significant features you should know