TECHSTEP

ITインフラ関連の記事を公開してます。

Rook v1.3での変更点まとめ

はじめに

2020年4月8日、Rook v1.3がリリースされました。今回は新しいRookバージョンの変更点について、リリースノートを中心にまとめます。

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にする

requireSafeReplicaSizeCephBlockPoolCRDを作成する際に指定する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を利用できるようになりました。CephBlockPoolCRDの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”をサポート

CephClusterCRDで利用できるPlacement Configurationに、Kubernetesの機能の一つであるTopologySpreadConstraintsを選択できるようになります。TopologySpreadConstraintsを利用することで、特定のノード上に複数のOSD Podが配置されるようコントロールすることができます。詳細は以下の参考リンクを確認ください。

※参考リンク:

Cybozu Inside Out - ストレージオーケストレーターRookへのサイボウズのコミット方針

Github Issues - Ceph: support topologySpreadConstraints #4387

・Multusの利用が可能に

MultusKubernetes CNIのひとつであり、一つのPodに対して複数のNICを付与することができるようになります。RookではCephCluster CRDでspec.network.providermultusにすることで利用可能であり、これにより監視用・クライアント通信用・クラスターネットワーク用など複数の用途でネットワークを分割することが可能になります。

なお、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として設定されます。

  • TLC flash devices (metadata・data)
  • Optane (metadata) + QLC flash devices (data)

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を利用できるSMBCRDが追加されました。これによりスケールアウトするCIFS/SMBサービスをEdgeFS上で利用できます。同一の地理的クラスター内でスケールすると、EdgeFSのアーキテクチャにより、SMB共有はISGWで接続されたあらゆるリージョンから利用可能になります。

なおSMBCRDは現時点で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