TT Lab
ブログ

한국어 English 日本語 中文

はじめる
ブログ

ブログ

Rook-Ceph 解説 2: Rook operator がやってくれること、やってくれないこと

ステータス: ドラフト(2026-10-29)、ソースと公式ドキュメント基準、実測なし。 基準のバージョンは Rook v1.21.1(タグが指すコミット 09d2f0d8d883b70b30de796c4390371be725ff3b、2026-10-26 リリース)と、Rook チャートがサブチャートとして組み込む ceph-csi-operator v1.1.0 (コミットく 98eee8980fc69e5c9c02c80958abe06c3faba5eb)です。記事内のソースリンクはすべてこのコミットに固定しています。TT Lab の検証クラスターで operator が作成したリソースを直接数える作業は、第 4 篇(元データが集まり次第執筆します)で行います。作成ルール:実測データが基本であり、測定できなかったものは「未実測」、原文から見つからなかったものは「未確認」と表示します。

目次

1. operator と Rook の位置づけ

Kubernetes の operator は、人間が行っていた運用の知識をコントローラーに移し替えたプログラムです。ユーザーが「こういう状態であってほしい」という希望をカスタムリソース(CR、Custom Resource)として記述しておくと、operator が現在の状態と比較して、足りないものを作成し、過剰なものを削除します。この比較と調整を 1 回実行することを reconcile と呼びます。

Rook の公式ドキュメント(Storage Architecture)では、Rook の役割を 3 つの層に分けています。Ceph の設定を自動化する Rook operator、ボリュームを作成してアタッチする Ceph-CSI ドライバー、そして実際にデータを保存する Ceph デーモンです。同じドキュメントに最も重要な 1 行があります。 「Rook is not in the Ceph data path.」 アプリケーションの読み書きは第 1 篇で見たとおり、アプリと OSD の間を直接往復し、operator はその経路上に立ちません。そのため、operator のポッドが一時的に停止しても、すでにアタッチされているボリュームの I/O が operator を経由することはありません。operator が停止したときに遅延するのは、新しい OSD や mon の交換といった、operator が担当する「変更作業」です。

2. CRD の一覧と reconcile が作るもの

v1.21.1 の deploy/examples/crds.yamlには、CRD(CR の種類を定義するスキーマ)が 21 種類あります。

CephBlockPool, CephBlockPoolRadosNamespace, CephBucketNotification, CephBucketTopic, CephCOSIDriver, CephClient, CephCluster, CephFilesystem, CephFilesystemMirror, CephFilesystemSubVolumeGroup, CephNFS, CephNVMeOFGateway, CephObjectRealm, CephObjectStore, CephObjectStoreAccount, CephObjectStoreUser, CephObjectZone, CephObjectZoneGroup, CephRBDMirror, ObjectBucket, ObjectBucketClaim

よく使われるものが reconcile で作成するものを、Ceph 側と Kubernetes 側に分けて整理すると以下のようになります。

CR 하나가 만드는 것 (Rook v1.21.1) CR 위: Ceph 안 · 아래: 쿠버네티스 CephCluster MON·MGR·OSD 를 세운다 Deployment·Service·Job·Secret CephBlockPool 풀과 CRUSH 규칙 쿠버네티스 자원 없음 CephFilesystem 풀과 파일시스템 MDS Deployment(활성의 두 배) CephObjectStore 풀·realm·zone RGW Deployment·Service CephObjectStoreUser RGW 사용자 S3 키 Secret ObjectBucketClaim 버킷 같은 이름의 Secret·ConfigMap CephFilesystemSubVolumeGroup 서브볼륨 그룹 CSI ClientProfile CephClient cephx 사용자 키 Secret StorageClass 는 operator 가 아니라 클러스터 차트가 만든다
図:1 つの CR が Ceph 側と Kubernetes 側に作るもの
CR Ceph 側での作成内容 Kubernetes 側での作成内容 根拠
CephCluster MON・MGR・OSD を起動し、クラスターを作成する mon ごとの Deployment と Service、mgr Deployment、ノードごとの OSD prepare Job、OSD ごとの Deployment、ノードごとの crash collector・exporter、 rook-ceph-mon-endpoints ConfigMap、 rook-ceph-mon·rook-ceph-admin-keyring Secret、CSI が使用する cephx キー Secret 4 つ(rook-csi-rbd-provisioner·rook-csi-rbd-node·rook-csi-cephfs-provisioner·rook-csi-cephfs-node, cluster.go#L541)、PDB quickstart のポッド一覧, CephCluster CRD ドキュメント
CephBlockPool プールと CRUSH ルール。障害ドメインを変更すると新しいルールを作成してプールに適用する なし(StorageClass は operator ではなくチャートやユーザーが作成する) CephBlockPool CRD
CephFilesystem メタデータプール、データプール、ファイルシステム MDS Deployment。 activeCount の 2 倍を作成し、余剰分はスタンバイにする CephFilesystem CRD
CephObjectStore RGW 用プール、realm・zonegroup・zone RGW Deployment(rook-ceph-rgw-<이름>-a)と Service CephObjectStore CRD
CephObjectStoreUser RGW ユーザー 接続キーが含まれる Secret rook-ceph-object-user-<스토어>-<이름> CephObjectStoreUser CRD
ObjectBucketClaim バケットを新しく作成するか、既存のバケットに権限を付与する OBC と同名・同名前空間の Secret(キー)および ConfigMap(アドレス)、クラスター範囲の ObjectBucket Object Bucket Claim
CephFilesystemSubVolumeGroup CephFS のサブボリュームグループ CSI 用 ClientProfile controller.go#L337
CephBlockPoolRadosNamespace プール内の RADOS ネームスペース CSI 用 ClientProfile controller.go#L353
CephClient cephx ユーザーと権限(caps) キーが含まれる Secret rook-ceph-client-<이름> CephClient CRD

残りは用途のみ簡単に記載します。CephNFS(NFS ゲートウェイ)、CephRBDMirror・CephFilesystemMirror(他クラスターへのミラーリング)、CephObjectRealm・ZoneGroup・Zone(RGW マルチサイト)、CephBucketTopic・Notification(バケットイベント通知)、CephCOSIDriver(COSI ドライバー)、CephNVMeOFGateway(NVMe over Fabrics ゲートウェイ)、CephObjectStoreAccount(RGW アカウント)です。

CephCluster の reconcile は順序が決められています。 cluster.go の reconcileCephDaemonsに沿って進めると、設定上書き用 ConfigMap を作成し、 mon を起動し(L121)、クラスターのアイデンティティが生成されたことを確認し、mgr を起動し(L149)、OSD を起動します(L164)。MDS と RGW はこの関数には含まれていません。それぞれ CephFilesystem と CephObjectStore を担当する別のコントローラーが reconcile を行います。

3. mon の配置とフェイルオーバー

第 1 篇で見たように、MON は過半数が生存していなければクラスターが動作しません。そのため、Rook が最も細心の注意を払って保護するのが mon です。Rook ドキュメントの Monitor Healthとソースを合わせて読むと、以下のようになります。

アイデンティティは Service の IP です。 Ceph における mon のアイデンティティは IP アドレスであり、変更してはなりません。ポッド IP は再起動のたびに変わるため、Rook は mon ごとに Kubernetes Service を 1 つずつ作成し、その ClusterIP を固定のアイデンティティとして使用します。

データはノードにバインドされます。 mon のメタデータは、CephCluster の dataDirHostPath(デフォルト /var/lib/rook)配下のホストディスクや、 volumeClaimTemplate で作成されたボリュームに保存されます。そのため、mon ポッドは再起動時に同じノードに戻る必要があり、そのおかげで既存のデータから処理を継続できます。

配置は canary で決定します。 新しい mon をどのノードに配置するか決定する際、Rook はまず名前の末尾に -canary を付与したテスト用 Deployment を起動して Kubernetes スケジューラーにノードを選ばせ、その結果を mon の配置場所として使用します (scheduleMonitor、mon.go#L731-L740). allowMultiplePerNode: false の場合、mon 同士が同じノードに配置されないようにする anti-affinity が必須ルールとして組み込まれ、 true の場合、重み 50 の優先ルールになります(第 3 篇で確認するクラスターチャート values のコメント)。

検査は 45 秒ごと、置き換えは 10 分後です。

mon 하나가 쿼럼에서 빠졌을 때 Rook v1.21.1 기본값: 45초마다 검사, 10분 뒤 교체 기다리는 10분(MonOutTimeout) 0 눈금 한 칸 = 45초 10분 처음 발견 시각을 적고 기다린다 그사이 파드 재시작을 기대 10분 뒤에도 없으면 새 mon-d 를 canary 로 배치 뜨면 mon-b 를 지운다 예외 timeout 0: 바꾸지 않는다(계획된 정비용) mon 이 있던 노드가 지워졌다: 기다리지 않고 바로 파드가 노드에 배치조차 안 됨: 한 번 더 기다린다(2배) 한 번의 검사에서 바꾸는 mon 은 하나뿐
図:1 つの mon がクォーラムから外れたときに Rook が待機して置き換える順序

health.goに HealthCheckInterval = 45 * time.Second つの定数があります。 MonOutTimeout = 10 * time.Minute と

  1. です。流れは以下の通りです。
  2. 45 秒ごとに Ceph にクォーラムの状態を問い合わせます。
  3. クォーラムに存在しない mon を初めて検知した時刻を記録しておきます。その間、Kubernetes は Deployment を通じてそのポッドを再度起動しようと試みます。ドキュメントには、「新しい mon に置き換えるよりも、既存の mon を復旧させる方が常に望ましい」と記載されています。failoverMon10 分経過しても復帰しない場合は、新しい名前(これまでの最大番号の次、例えば mon-a・b・c であれば mon-d)で新しい mon を構築します。古い mon の Deployment は 0 にスケールダウンしておき(ホストネットワークを使用する mon は、新しい mon が同じホスト IP で起動しないようにするためにスケールダウンしません)、新しい mon が失敗した場合はロールバックします ().
  4. 、health.go#L7421 回の検査で置き換えられる mon は 1 つだけです().

health.go#L331例外が 3 つあります().

(例:ノードのドレイン)、タイムアウト時間だけさらに待機します。ドキュメントの表現では「待機時間が 2 倍になる」となります。 healthCheck.daemonHealth.mon.interval·timeout これら 2 つの値は CephCluster の ROOK_MON_OUT_TIMEOUT·ROOK_MON_HEALTHCHECK_INTERVAL で変更できます。operator の環境変数 が存在する場合はそちらが優先されます(過去の動作との互換性、 health.go#L58-L103)。).ドキュメントでは、間隔が短すぎるとmonが頻繁に入れ替わりすぎ、長すぎると新しいmonが立ち上がる前に他のmonが死亡してクォーラムを失うリスクがあると警告しています。

monが替わるとアドレスも変わります。Rookはmonを立ち上げるたびに、CSI側にmonアドレスを再度通知します(第5節のCephConnection、 mon.go#L1261-L1269).

4. OSD prepare Jobがディスクを選定する方式

OSDは「ディスクを探し、準備し、デーモンを起動する」の2段階で作成されます。前の段階はノードごとに1つずつ実行されるJobが行い、後ろの段階はoperatorが行います。名前は osd.go#L64-L69に定義されています。Jobは rook-ceph-osd-prepare-<노드>、OSDデーモンは rook-ceph-osd-<번호> です。

OSD prepare Job 이 디스크를 고르는 길 Rook operator: 노드마다 Job 을 띄운다 Job rook-ceph-osd-prepare-<노드> ① lsblk 로 장치 목록 rbd·nbd·drbd·zram 은 처음부터 뺀다 ② 이미 쓰이는 장치 거르기 마운트·파일시스템 서명·기존 OSD 는 건너뜀 ③ ceph-volume inventory 에 묻기 쓸 수 없다는 답이면 이유를 로그에 남김 ④ 설정과 맞추기 useAllDevices·deviceFilter·devices ⑤ 준비: ceph-volume raw prepare 암호화·장치당 OSD 여럿·메타 장치면 lvm batch ConfigMap rook-ceph-osd-<노드>-status OSD Deployment rook-ceph-osd-<번호> ④ 에서 LVM 논리 볼륨과 loop 장치는 useAllDevices 로 고르지 않는다
図:OSD prepare JobがデバイスをフィルタリングしてOSDを作成するまでの流れ

prepare Job内で起きることをソースコードの順序に沿って追っていくと、以下のようになります。

  1. デバイスリスト。 lsblk でノードのブロックデバイスを探します。このとき rbd·nbd·drbd·zram デバイスはリストから完全に除外します。前者の3つはネットワークストレージのため読み取りが停止する可能性があり、zramは揮発性メモリであるためです (disk.go#L37-L39、v1.21.1の変更点)。
  2. 使用中のデバイスの除外(getAvailableDevices, daemon.go#L347-L410)。 マウントされたデバイス、ファイルシステムシグネチャのあるデバイス、すでにBlueStore OSDが含まれているデバイスをスキップします。
  3. ceph-volumeへの問い合わせ。 残ったデバイスごとに ceph-volume inventory --format json <장치> を実行し、「使用可能」と答えたものだけを残します。 拒否された理由はそのままログに記録されます(device.go#L399-L428).
  4. ユーザー設定との一致確認。 useAllDevices: true であれば残りのデバイスをすべて使用しますが、LVM論理ボリュームとloopデバイスは選択しません。 deviceFilter (デバイス名の正規表現)、 devicePathFilter、ノードごとの devices リストがある場合は、それに一致するものだけを使用します。
  5. 準備。 基本は ceph-volume raw prepare です。暗号化を有効にしたり、1つのデバイスに複数のOSDを配置したり(osdsPerDevice が2以上)、メタデータデバイスを分離する場合はrawモードを使用できないため、 ceph-volume lvm batch に移行します (allowRawMode, volume.go#L497-L525).
  6. 結果の報告。 作成したOSDのリストをConfigMap rook-ceph-osd-<노드>-status に書き込みます (status.go#L47)。 operatorがこれを読み取り、OSDごとにDeploymentを作成します。

公式ドキュメントの要件(Prerequisites)でも同様のことが述べられています。OSDとして使用できるのは、パーティションもファイルシステムもないrawデバイス、ファイルシステムのないrawパーティション、ファイルシステムのないLVM論理ボリューム、そして block モードのPVです。そのため、「ディスクを新たに追加したのにOSDが作成されない」場合は、まず lsblk -f でファイルシステムシグネチャが残っていないか確認します。逆に、何のシグネチャもない空のディスクは useAllDevices: true で確認されることもなくOSDになります。これが第3篇でこのデフォルト値を警告する理由です。

prepare Jobはデバイスのサイズに応じてメモリを一度多く消費します。ドキュメントでは、大容量ディスクの場合は1〜2Gi程度になるとして、このJobにはメモリの上限を設定しないよう推奨しています。一度準備されたOSDは次回のprepareで「すでに存在する」としてスキップされるため、大量のメモリ消費は初回のみです。

5. CSIのデプロイ:v1.21では3つのコンポーネントが分担する

CSI(Container Storage Interface)は、Kubernetesがストレージベンダーのドライバを呼び出すための標準規格です。PVCが作成されると、CSIドライバの provisioner(コントローラー側)がストレージにボリュームを作成し、ポッドがノードに起動すると、そのノードの nodeplugin がボリュームをアタッチ・マウント(map・mount)してくれます。

以前のRookはCSIドライバを直接デプロイしていました。v1.21では、この作業を3つの主体が分担します。初めてインストールする人が最もつまずきやすいポイントであるため、順番に記載します。

v1.21 의 CSI: 셋이 나눠 맡는다 Rook operator mon 이 뜬 뒤 ceph-csi-drivers 차트 + Rook values rook-ceph 차트 하위 차트로 설치 CephConnection ClientProfile Driver(rbd·cephfs) OperatorConfig ceph-csi-operator operator 파드 mon 주소·키 이름 ceph-csi-operator 가 Driver 마다 만든다 <드라이버>-ctrlplugin Deployment 볼륨을 만든다(provisioner) <드라이버>-nodeplugin DaemonSet, 모든 노드 노드에 붙인다(map·mount) PVC → ctrlplugin 이 RBD 이미지·CephFS 서브볼륨을 만들고 파드가 뜨면 kubelet 이 그 노드의 nodeplugin 으로 붙인다
図:v1.21におけるCSI:Rook、ceph-csi-driversチャート、ceph-csi-operatorが分担する作業
  1. ceph-csi-operator。 rook-ceph チャートがサブチャート(ceph-csi-operator 1.1.0)として一緒にインストールします (Chart.yaml、条件 csi.installCsiOperator)。このoperatorが実際のドライバポッドを作成します。
  2. ceph-csi-driversチャート。 どのドライバを有効にするかを記述した Driver CR、 OperatorConfig、ドライバポッドが使用するRBACを作成します。このチャートはRookのリポジトリからではなく、ceph-csi-operatorのHelmリポジトリから取得し、Rookが調整したvaluesファイル(deploy/charts/ceph-csi-drivers/values.yaml)を指定してインストールします。デフォルトではRBDとCephFSが有効になり、NFSとNVMe-oFは無効になります。ドライバ名は rook-ceph.rbd.csi.ceph.com のようにoperatorのネームスペースをプレフィックスとして付与します。アップグレードドキュメントには、 このチャートをインストールしないとサービスアカウントが存在しないためCSIドライバが失敗状態になると記載されています(v1.20からの要件、 Rook Upgrades).
  3. Rook operator。 monが起動した後、operatorのネームスペースに CephConnection CR(monアドレスリスト、read affinity、RBDミラー数)とデフォルトの ClientProfile(RBD・CephFSが使用するSecret名)を作成・修正します (ceph_connection.go#L37-L103, config.go#L149-L190)。 どちらも名前はCephClusterのネームスペースとなります。サブボリュームグループとRADOSネームスペースごとにClientProfileを個別に作成する点は、第2節で見た通りです。

ceph-csi-operatorは Driver CRを1つ受け取ると、CSIDriverオブジェクト、名前が -ctrlplugin で終わるDeployment(provisionerとサイドカー)、 -nodeplugin で終わるDaemonSet(すべてのノード)、liveness Service、NetworkPolicy、設定用ConfigMapを作成します (driver_controller.go#L254-L264)。 そのため、Rookクイックスタートのポッドリストに rook-ceph.rbd.csi.ceph.com-ctrlplugin-… と rook-ceph.rbd.csi.ceph.com-nodeplugin-… が表示されます。

StorageClass の provisioner は、このドライバ名と完全に一致していなければなりません。名前のプレフィックスを変更したい場合は(CSI_DRIVER_NAME_PREFIX)、初回インストール時のみ行うようドキュメントで警告されています。すでに応用・運用中のクラスターで変更すると予期せぬ動作が発生すると記載されています (Ceph CSI Drivers).

6. アップグレードの順序

Rookはアップグレードを2つに分けています。 Rook自体(管理層) と Ceph(データ層) です。

Rookのアップグレード。 チャートは rook-ceph → ceph-csi-drivers → rook-ceph-cluster の順序でアップデートします。ドキュメントで明らかにされているv1.21での破壊的変更は3つです。

また、v1.21ではブロックStorageClassにCSI Secretパラメータが新しく追加されましたが、StorageClassの parameters は変更できないため、チャートをアップデートする前に ceph-block StorageClassを削除するよう案内されています。同じ名前のStorageClassが再作成されるため、既存のPVには影響がないと記載されています。

Cephのアップグレード。 CephClusterのイメージを変更すると開始されます (Ceph Upgrades). Rookは、デーモンを1つずつ停止しても問題ないかを確認し、変更し、状態が安定するのを(monはクォーラム、OSDはPGがclean、MDSはup)待ってから次のデーモンに移行します。第2節で見たreconcileの順序通り、CephCluster内ではmon、mgr、OSDの順であり、MDSとRGWはそれぞれのコントローラーが担当します。OSDが1つ停止しても問題ない状態になるのを待つ時間は waitTimeoutForHealthyOSDInMinutes(デフォルト10分)です。サポートされているCephはSquid v19.2.0以上およびTentacle v20.2.1以上であり、v20.2.0はread affinityを有効にした際にデータ破損の問題が確認されているため推奨されません。Rookはv20.2.0でread affinityを自動的に無効化します (ceph_connection.go#L105-L116).

7. クラスターのクリーンアップ:cleanupPolicy

CephClusterを削除してもデータは削除されません。これがデフォルトであり、誤って削除されたCRによってデータが消失するのを防ぐための仕組みです。 チャートのドキュメントでも、 rook-ceph-cluster を削除しても /var/lib/rook とOSDディスク上のデータは残るため、ディスクを再利用するには手動で消去する必要があると記載されています。

完全に削除するには、まずCephClusterを確認用フレーズを記述します (Cleanup, CephCluster CRD: Cleanup policy).

フィールド デフォルト 意味
confirmation 空文字列 yes-really-destroy-data の場合にのみクリーンアップを実行する。この値を記述した瞬間、operatorは新しい設定の反映を停止し、削除のみを待機する。CRを削除する前であれば元に戻すことができる
sanitizeDisks.method quick quick はCephメタデータのみ、 complete はディスク全体を削除する
sanitizeDisks.dataSource zero 上書きするバイト数。 random ははるかに低速である
sanitizeDisks.iteration 1 上書き回数
allowUninstallWithVolumes false そのクラスターで作成されたPVが残っている場合、削除を待機する

確認用フレーズが設定された状態でCephClusterを削除すると、operatorはCephデーモンポッドが存在していたノードを記憶し、それらのポッドがすべて消えるまで5秒間隔で待機した後、ノードごとにJob(cluster-cleanup-job-<노드>、ラベル rook-ceph-cleanup)を立ち上げて dataDirHostPath を削除し、OSDディスクを消去します (cleanup.go#L62-L100)。 ドキュメントでは、アプリケーションのボリュームとPVCを事前にクリーンアップすることを強く求めています。そうしないと、ボリュームがマウントされたままになりノードの再起動が必要になる場合があります。CSI operatorのCR(operatorconfigs·drivers·clientprofiles·clientprofilemappings·cephconnections)も個別に削除する必要があります。

確認用フレーズなしで削除してしまった場合は、ノードごとに dataDirHostPath を手動で削除し、ディスクを消去する必要があります(ドキュメントの sgdisk --zap-all, dd, blkdiscard、LVM・デバイスマッパーのクリーンアップ手順)。特に dataDirHostPath を残したまま再インストールすると、新しいクラスターでmonが起動しなくなるとチャートのvaluesのコメントで警告されています。

8. toolbox

Cephを調査するための基本ツールは ceph コマンドです。Rookは、このコマンドが含まれるコンテナを toolbox というDeployment(rook-ceph-tools)として提供します (Toolbox)。 クラスターチャートでは toolbox.enabled がデフォルトの false であり、有効にするとCephイメージと同じイメージで起動します。コマンドを一度だけ実行して結果をログに残すJob方式もあり、toolboxを使用せずにkubectlプラグインを利用する方法もあります。

kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- ceph status
kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- ceph osd tree
kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- ceph df

第4篇でTT Labの実習クラスターにおけるこれら3つの出力を、第1篇の概念と照らし合わせて確認する予定です。

9. operatorが実行しないこと

operatorを導入すると「これで全て自動でやってくれるだろう」と期待しがちです。原文で確認した、Rookが実行しない、またはデフォルトでは実行しない作業です。

実行しないこと 誰が実行するか 根拠
データパスへの介入 アプリとOSDが直接行う Storage Architecture 「Rook is not in the Ceph data path」
StorageClass・VolumeSnapshotClass の作成 クラスターチャート(またはユーザー) チャートテンプレート cephblockpool.yaml
CSI ドライバー Driver CR の作成 ceph-csi-drivers チャート、ポッドは ceph-csi-operator 第5節
故障した OSD のクラスターからの除外 基本は人間。 removeOSDsIfOutAndSafeToRemove: true なら out であり削除しても安全な OSD を operator が除外する CephCluster CRD ドキュメント
データの再配置 Ceph(down が 10 分続くと out、第 1 編) Ceph ドキュメント
PG 数の修正 Ceph の PG オートスケーラー(第 1 編) Ceph ドキュメント
CR 削除時のディスクとホストパスのクリーンアップ 基本は人間。 cleanupPolicy 確認メッセージがある場合のみ operator 第 7 節
lvm2 インストール、カーネルバージョンの調整 ノードマネージャー Prerequisites, Rook Upgrades
mon メタデータ・キーリングのバックアップ 外部ツール。Rook は clusterMetadata アノテーションでそのようなツールを rook-ceph-mon-endpoints·rook-ceph-mon·rook-ceph-admin-keyring で選択できるようにしているだけである CephCluster CRD ドキュメント

もう一つ指摘しておくことがあります。 useAllNodes: true のときノードの taint や affinity を変更してノードが Rook の対象から外れた場合、そのノードの OSD は operator ポッドを削除して再起動することで「確認」して初めて削除されます。誤ってデータを失わないための仕組みであり、ドキュメントでは本番環境では useAllNodes: false でノードを明示するよう推奨しています。

一言メモ。 Rook はきめ細やかな管理者です。mon に異常があれば 10 分間待ち、空きディスクを見つければ OSD を作成し、削除しろと言われれば「本当に?」と必ず確認します。しかし、データを直接運ぶことはしません。それは Ceph デーモンの役割だからです。そのため、operator が少し休止しても、すでにアタッチされているボリュームは無事です!

参考

ソースとドキュメントはいずれも 2026-10-29 に上記のコミットで閲覧しました。

ログインするといいねできます

コメント

まだコメントはありません。

ログインするとコメントできます