はじめに
2019年12月にRook v1.2が公開されました。すでに1か月以上経っていますが、Rook v1.2からの変更点について、Release Noteを元にまとめておきます。なお、CephについてはGithub上の流れが追いやすくIssue/mergeのリンクまで載せられていますが、EdgeFSについては開発の流れがなかなか見えず、記載も少なくなっております。
Rook v1.2の変更点
Ceph
・Ceph versionを探索するjobが走るとき、node affinity/tolerationの設定を利用できる
CephCluster
をデプロイすると、ceph versionを探索するjobが以下のように起動します。この時に起動するNodeをnodeAffinity/tolerationで指定できるようになります。
[root@vm0 ~]# kubectl get pods -n rook-ceph -w [中略] rook-ceph-detect-version-wmxpr 0/1 Pending 0 0s rook-ceph-detect-version-wmxpr 0/1 Pending 0 0s rook-ceph-detect-version-wmxpr 0/1 Init:0/1 0 1s rook-ceph-detect-version-wmxpr 0/1 PodInitializing 0 5s rook-ceph-detect-version-wmxpr 0/1 Completed 0 6s rook-ceph-detect-version-wmxpr 0/1 Terminating 0 6s rook-ceph-detect-version-wmxpr 0/1 Terminating 0 6s
設定はCluster CRのMON用の設定と同じです。CephCluster
をデプロイする時に利用するcluster.yaml
のSpec.placement
設定を書き換えることで利用可能です。
※参考リンク:
Rook Doc - Ceph Cluster CRD #Placement Configuration Settings
・skipUpgradeChecks
の追加
Cephのアップグレードを実行する際、Daemonによるステータスのチェックをスキップすることができます。 この機能は利用者の責任となり、公式では非推奨の機能です。
cluster.yaml
のSpec.skipUpgradeChecks
をtrue
にすることで利用可能です。
・MON Quorum DR guideのアップデート
Rook-Cephでは何らかの理由でMONがQuorumを失った場合、手作業での復旧が可能です。こちらのドキュメントでその手順を公開しています。
・PreservePoolsOnDelete
の追加
CephObjectStore
CephFilesystem
で利用可能で、紐づいたメインリソース(filesystem, object store)が削除されてもstorage poolが削除されません。
この機能によりデータ損失への対策が強化されました。
再びメインリソースがデプロイされた場合、削除前に紐づいていたたstorage poolとメインリソースが紐づきます。
テスト用yamlファイル(filesystem.yaml
object.yaml
)ではtrue
にセットされています。
※参考リンク
Rook Doc - Ceph Shared Filesystem CRD #Filesystem Settings
Rook Doc - Ceph Object Store CRD #Object Store Settings
・Ceph Crashcollectorがcrash telemetryを回収、Ceph Dashboardに送信する機能を追加
Ceph CrashcollectorはCeph podが走る場所で同時に起動し、Ceph daemon core dumpを回収しmgrに送付します。v1.2からは新たにcrash telemetryを収集し、Ceph Dashboardに送信します。
telemetryはクラスターに関するデータを開発者に送信し、利用のされ方や将来的に問題となりうる事項を伝えます。telemetryは3つのチャンネルを含み、crash telemetryはその一つです。crash telemetryはデーモンのクラッシュに関する情報(デーモンのタイプやバージョン、クラッシュした箇所の特定につながるスタックトレース)を提供します。
toolbox
Podでceph telemetry
コマンドを実行することで情報を取得することもできます。
toolbox Podからtelemetry情報を表示
# telemetry情報の表示コマンド [root@vm0 ceph]# kubectl exec -it rook-ceph-tools-7f96779fb9-rm54b -n rook-ceph -- ceph telemetry show Error ENOTSUP: Module 'telemetry' is not enabled (required by command 'telemetry show'): use `ceph mgr module enable telemetry` to enable it command terminated with exit code 95 # telemetry moduleを有効にするためのコマンドを実行 [root@vm0 ceph]# kubectl exec -it rook-ceph-tools-7f96779fb9-rm54b -n rook-ceph -- ceph mgr module enable telemetry # telemetry情報の表示コマンド [root@vm0 ceph]# kubectl exec -it rook-ceph-tools-7f96779fb9-rm54b -n rook-ceph -- ceph telemetry show { "crush": { "tunables": { "profile": "jewel", "minimum_required_version": "jewel", "has_v3_rules": 0, "has_v4_buckets": 1, "choose_total_tries": 50, "require_feature_tunables3": 1, "require_feature_tunables5": 1, "legacy_tunables": 0, "chooseleaf_descend_once": 1, "chooseleaf_stable": 1, "choose_local_fallback_tries": 0, "has_v2_rules": 0, "straw_calc_version": 1, "allowed_bucket_algs": 54, "has_v5_rules": 0, "require_feature_tunables2": 1, "optimal_tunables": 1, "choose_local_tries": 0, "chooseleaf_vary_r": 1, "require_feature_tunables": 1 }, "bucket_types": { "1": 3, "11": 1 }, "num_rules": 3, "compat_weight_set": false, "num_weight_sets": 0, "bucket_sizes": { "1": 3, "3": 1 }, "num_types": 12, "device_classes": [ 3 ], "num_devices": 3, "bucket_algs": { "straw2": 4 }, "num_buckets": 8 }, "balancer": { "active": false, "mode": "" }, "fs": { "count": 0, "total_num_mds": 0, "feature_flags": { "ever_enabled_multiple": false, "enable_multiple": false }, "num_standby_mds": 0, "filesystems": [] }, "crashes": [], "license": "sharing-1-0", "created": "2020-01-14T05:16:59.084291", "metadata": { "osd": { "distro_description": { "CentOS Linux 7 (Core)": 3 }, "rotational": { "1": 3 }, "kernel_version": { "3.10.0-1062.9.1.el7.x86_64": 3 }, "arch": { "x86_64": 3 }, "cpu": { "Intel(R) Xeon(R) CPU E5-2673 v4 @ 2.30GHz": 3 }, "osd_objectstore": { "filestore": 3 }, "kernel_description": { "#1 SMP Fri Dec 6 15:49:49 UTC 2019": 3 }, "os": { "Linux": 3 }, "ceph_version": { "ceph version 14.2.5 (ad5bd132e1492173c85fda2cc863152730b16a92) nautilus (stable)": 3 }, "distro": { "centos": 3 } }, "mon": { "distro_description": { "CentOS Linux 7 (Core)": 1 }, "kernel_version": { "3.10.0-1062.9.1.el7.x86_64": 1 }, "arch": { "x86_64": 1 }, "cpu": { "Intel(R) Xeon(R) CPU E5-2673 v4 @ 2.30GHz": 1 }, "kernel_description": { "#1 SMP Fri Dec 6 15:49:49 UTC 2019": 1 }, "os": { "Linux": 1 }, "ceph_version": { "ceph version 14.2.5 (ad5bd132e1492173c85fda2cc863152730b16a92) nautilus (stable)": 1 }, "distro": { "centos": 1 } } }, "mon": { "count": 1, "v2_addr_mons": 1, "features": { "optional": [], "persistent": [ "kraken", "luminous", "mimic", "osdmap-prune", "nautilus" ] }, "ipv4_addr_mons": 2, "ipv6_addr_mons": 0, "v1_addr_mons": 1, "min_mon_release": 14 }, "report_timestamp": "2020-01-16T02:17:16.122911", "channels": [ "basic", "crash", "device" ], "usage": { "pools": 2, "total_used_bytes": 19868684288, "pg_num:": 16, "total_bytes": 316661342208, "total_avail_bytes": 296792657920 }, "hosts": { "num_with_osd": 3, "num_with_mds": 0, "num_with_mgr": 1, "num": 3, "num_with_mon": 1 }, "report_version": 1, "pools": [ { "min_size": 2, "erasure_code_profile": {}, "pg_autoscale_mode": "on", "pool": 2, "size": 3, "cache_mode": "none", "target_max_objects": 0, "pg_num": 8, "pgp_num": 8, "target_max_bytes": 0, "type": "replicated" }, { "min_size": 2, "erasure_code_profile": {}, "pg_autoscale_mode": "on", "pool": 3, "size": 3, "cache_mode": "none", "target_max_objects": 0, "pg_num": 8, "pgp_num": 8, "target_max_bytes": 0, "type": "replicated" } ], "services": {}, "channels_available": [ "basic", "ident", "crash", "device" ], "rbd": { "num_pools": 0, "num_images_by_pool": [], "mirroring_by_pool": [] }, "config": { "cluster_changed": [ "mgr/dashboard/server_port", "mgr/dashboard/ssl", "mgr/dashboard/ssl_server_port", "mgr/orchestrator_cli/orchestrator", "mon_allow_pool_delete", "mon_pg_warn_min_per_osd", "osd_pool_default_pg_autoscale_mode", "rbd_default_features" ], "active_changed": [ "client_mount_gid", "client_mount_uid", "crush_location", "daemonize", "err_to_stderr", "keyring", "leveldb_block_size", "leveldb_cache_size", "leveldb_compression", "leveldb_log", "leveldb_write_buffer_size", "log_stderr_prefix", "log_to_file", "log_to_stderr", "mon_allow_pool_delete", "mon_cluster_log_to_file", "mon_cluster_log_to_stderr", "mon_host", "mon_initial_members", "mon_pg_warn_min_per_osd", "ms_learn_addr_from_peer", "osd_data", "osd_journal", "osd_max_object_name_len", "osd_max_object_namespace_len", "osd_memory_target", "osd_objectstore", "osd_pool_default_pg_autoscale_mode", "osd_uuid", "public_addr", "public_bind_addr", "rbd_default_features", "setgroup", "setuser", "setuser_match_path" ] }, "osd": { "count": 3, "require_min_compat_client": "jewel", "cluster_network": false, "require_osd_release": "nautilus" }, "leaderboard": false, "report_id": "f53e9921-eab2-4e12-ad8a-96b43a35947a" } [root@vm0 ceph]#
※参考リンク:
・PriorityClassNames
をRook/Cephコンポーネントに追加できる
Kubernetesの機能であるPriorityClass
をRook/Cephのコンポーネントに実装できるようになりました。PriorityClass
は特定の重要なPodに優先度をつけるために利用するリソースで、Kubernetesクラスター上のリソースに空きがなく既存のPodを削除しなければならないとき、重要なPodが削除されないようにする仕組みです。
※参考リンク:
Kubernetes Doc - Pod Priority and Preemption # PriorityClass
Rook Doc - Ceph Cluster CRD # Priority Class Names Configuration Settings
・Ceph Client CRDの追加
Ceph Clientの設定をCRDを通じて設定できます。利用ケースとしては、libRBDを利用するアプリケーションとRookとを統合する場合(OpenStackのバックエンドにCephを利用する場合など)となります。
なお、CSI及びFlexDriverを利用する場合は自動的にClient CRDが作成されるため、別途作成する必要はありません。
※参考リンク
・Status.phases
の追加
Rook-Ceph CRDにStatus.phases
プロパティが追加され、Processing
Ready
Failed
のいずれかの状態を表示します。OperatorがCeph CRDに関する何らかのタスクを実行中の場合Processing
、処理に失敗した場合Failed
、そしてすべてのタスクを完了した場合Ready
が表示されます。
・ROOK_UNREACHABLE_TOLERATION_SECONDS
の追加
operator.yaml
で指定可能なプロパティであるROOK_UNREACHABLE_TOLERATION_SECONDS
が追加され、Rookに関連するPod(OSD、MON、MGRなど)を置くノードからの応答が指定時間以内にない場合、別のノードにデプロイする処理が走ります。デフォルトでは5秒にセットされています。
OSDs
・OperatorをアップデートしてもOSD Podが再起動しない
ver 1.2以降は、operatorが新しいバージョンにアップデートしても、OSD Podが再起動しないようになりました。ただしOSDs on PVCは例外のようです。
・devicePathFilter
の追加
新たなCRDプロパティであるdevicePathFilter
が追加され、OSDに利用するdeviceを明示的に指定することができるようになりました。こちらの記事に機能追加までの経緯など詳しく書かれています。
※参考リンク:
Rook Doc - Ceph Cluster CRD #Storage Selection Settings
Cybozu Inside Out - ストレージオーケストレーターRookへのサイボウズのコミット方針
Github - ceph: support device selection for OSDs by device path name patterns #4285
・OSDのadmin socketは/run/ceph
配下に移動
・OSDのon-host logの場所は<datadirhostpath>/log/<namespace>
に変更
・OSD on PVC向けの、LVMバックのPVをサポート
Rook ver1.1からの新機能であるOSD on PVC機能が、LVMのLogical Volumeに対応しました。この機能もこちらの記事に詳しく書かれています。
※参考リンク:
Cybozu Inside Out - ストレージオーケストレーターRookへのサイボウズのコミット方針
Github - ceph: support OSD on PVC backed by LV #4219
・tuneSlowDeviceClass
の追加
OSDをgp2
などのストレージデバイスで利用する場合、想定よりパフォーマンスが出ない場合があります。これを防ぐため、tuneSlowDeviceClass
という設定項目を追加し、true
に設定されている場合はOSDのチューニングを行ってパフォーマンスを向上します。
※参考リンク:
Rook Doc - Ceph Cluster CRD # Storage Class Device Sets
Github - Ability to set device class on OSDs when on PVCs #4298
Github - ceph: add CR flag to tune slow device class for OSD on PVC in the Cloud #4308
EdgeFS
・シングルノード、シングルデバイスのサポート
Rook EdgeFSはデフォルトで3つのノードが必要でしたが、sysRepCount
を設定することでその設定を上書きすることができます。sysRepCount
を1に設定するとシングルノードで利用することができます。
またfailureDomain
を設定することでデータ複製の方法を指定します。failureDomain
をdevice
にした場合、各ノードに接続されたデバイスごとにレプリケーションを作成しますが、host
に設定するとノードごとに一つレプリケーションを作成します。
※参考リンク:
Rook Doc - EdgeFS Cluster CRD # Cluster Settings
・rtkvs disk engineとSamsung KV SSDのサポート
※参考リンク:
Rook Doc - EdgeFS Cluster CRD # Storage Configuration Settings
Github - Support for Samsung KVSSD and other generic Key-Value backends #3997
Github - EdgeFS: support for rtkvs disk engine and Samsung KVSSD #3995
・Data Payload ChunkのS3への直接保存
AWSへのサポートを強化し、data payload chunkを直接S3に保存できるようになりました。これによりストレージ課金の大幅な削減を見込めます。payloadS3URL
という設定項目にS3バケットのURLを指定すると利用可能です。
※参考リンク:
Rook Doc - EdgeFS Cluster CRD # Storage Configuration Settings
Github - EdgeFS: data payload forwarding to an external S3 service #4431
Github - EdgeFS: support for payload on external S3 server #4432
・ISGWの複数サービスなしで、ISGWフルメッシュ機能を設定できる
※参考リンク:
Rook Doc - EdgeFS ISGW (Inter-Segment GateWay) CRD
・S3バケットのinstant snapshotの作成
新しいEdgeFSのバージョンでは、S3バケットのinstant snapshotの作成が可能になります。作成されたsnapshotのメタデータは、接続されたすべてのEdgeFSセグメントに配布されるので、snapshot対象のデータを複製・アクセスする際に、すべてのデータを転送する必要がなくなります。
その他
・RookのサポートするKubenetesの最小バージョンが1.12に変更
・hostNetwork
が有効の場合、Ceph Object Gatewayが同じホスト上で起動しないよう自動的に設定される
・Rook/EdgeFS OperatorでDISCOVER_DAEMON_UDEV_BLACKLIST
を利用可能
Ceph/EdgeFSのStorage Providerは、デバイスを探索するためにDiscover daemonを起動します。operator.yaml
にあるDISCOVER_DAEMON_UDEV_BLACKLIST
を設定すると、指定した文字列に該当するudevをDiscover daemonの探索対象から除くことができます。
指定しない場合はデフォルトの値((?i)dm-[0-9]+,(?i)rbd[0-9]+,(?i)nbd[0-9]+
)が設定されます。
※参考リンク:
Github - ceph: make the discover daemon filter configurable #4211
・topology
の廃止
CephCluster
CRからtopology
設定が廃止されます。OSD topologyを設定するにはnode labelが必要となります。
※参考リンク:
Rook Doc - Ceph Cluster CRD # OSD Topology
・ディスク上のstoreType: Filestore
OSDがdeprecated
Ceph Cluster CRDで設定するstoreType
は、OSDに利用するストレージデバイスのタイプを指定することができます。この設定が反映されなくなり、ディレクトリ上のOSDはstoreType: Filestore
、ディスク上のOSDはstoreType: Bluestore
に自動的に設定されます。
すでにディスク上にデプロイされているstoreType: Filestore
OSDはそのまま維持されます。
※参考リンク:
Rook Doc - Ceph Cluster CRD # OSD Configuration Settings