VM上のk3sの問題の解決 — ディスクのレイテンシが高い/IOPSが遅い
概要
k3s を実行している VM では、Ceph をバックエンドとするブロックボリュームがスナップショットからクローンされた際、RBD イメージがフラット化されていないと、ディスクのレイテンシが異常に高くなり、IOPS が低下する現象が見られます。 書き込み操作が行われるたびに、親スナップショットに対するコピー・オン・ライトのオーバーヘッドが発生し、ディスク使用率が低く見える場合でもI/Oが飽和状態になります。 fstrim を実行しても、この問題は解決しません。 RBD画像を平坦化することで、この問題は解決されます。
詳細
以下の症状を参考にして、このKBがお客様の環境に当てはまるかどうかを確認してください。
- 症状 A — ディスクの使用率は低いのにレイテンシが高い:
df -hコマンドでは使用率が正常値(例:200 GiB のボリュームで 13%)と表示されるにもかかわらず、アプリケーションの読み取り/書き込みパフォーマンスが低下している。 - 症状 B — Ceph ボリュームにアクティブな親参照がある:
rbd infoコマンドの実行結果で、スナップショットを指すparent:フィールドが表示され、ゲスト側の使用率が低いにもかかわらず、rbd duコマンドの実行結果ではUSEDがPROVISIONEDに近くなっている。 - 症状 C —
fstrimを実行しても改善が見られない: ゲスト上でfstrim -avを実行すると、エラーなく完了しますが、レイテンシに変化は見られません。 - 根本原因: Ceph RBDボリュームはスナップショットからクローンされたものであり、そのイメージは一度もフラット化されていませんでした。 すべての書き込み操作は、親スナップショットチェーンに対してコピーオンライトをトリガーするため、レイテンシが大幅に増加し、実効IOPSが低下します。
親参照の確認
Cephクラスタで以下のコマンドを実行し、親子関係があるかどうかを確認します:
rbd du cinder-volumes/<volume-id>
出力に(以下に示すような)parent: 行が含まれている場合、そのボリュームは依然として元のスナップショットにリンクされた状態であるため、フラット化する必要があります。
parent: cinder-volumes/volume-04d1fa55-7990-43a9-8018-9c1658fe87f9@snapshot-46874354-44b6-448e-be22-daa70ef24fc0
overlap: 200 GiB
対象バージョン
すべてのCubeCOSバージョン。
決議
導入スケジュールに最も適した修正手順を選択してください。
オプション 1: RBD イメージをフラット化(推奨 — サポート対象の操作)
画像をフラット化すると、親スナップショットとの依存関係が切断されます。 すべてのデータはボリューム自体にコピーされるため、コピー・オン・ライトによるオーバーヘッドが排除されます。 この操作はオンラインで実行され、VMの再起動は必要ありませんが、コピー中はCephのI/Oが一時的に増加します。
Cephクラスタで以下のコマンドを実行してください:
rbd flatten cinder-volumes/<volume-id>
完了するまで進捗状況を監視する:
Image flatten: 100% complete...done.
フラット化が完了したら、rbd info に parent: フィールドが表示されなくなったことを確認してください。
ディスクのレイテンシは直ちに基準値に戻るはずです。
オプション 2: k3s のデータディレクトリをリダイレクトする(ユーザー側での回避策)
フラット化がすぐにはできない場合は、k3sをレイテンシの低いボリュームまたはパスに指定することで、その影響を軽減できます。 サーバーの起動時に --data-dir フラグを使用して、別の場所を指定してください:
k3s server --data-dir /path/to/fast-volume/k3s
--data-dir オプションおよびサポートされているパスに関する詳細については、k3s サーバー CLI リファレンスを参照してください。
補足情報
- コピー・オン・ライトによるパフォーマンスの低下は、子ボリュームとその親スナップショットとの重複部分に比例します。 大きな重複(例:
rbd duに示されているような 200 GiB)は、レイテンシに最も深刻な影響を与えます。 fstrimはファイルシステム/ゲストレベルで動作し、Ceph レイヤーのコピー・オン・ライト・チェーンには影響を与えません。 これは想定通りの動作です。object-mapやfast-diffといった RBD 画像の特徴(上記の例にも含まれているもの)は、原因にはなっていないため、無効にする必要はありません。
次は?
RBD画像を平坦化した後:
- ゲスト上で
fioまたはiostatを使用してベースラインの IOPS を確認し、レイテンシが想定通りのレベルに戻っていることを確認してください。 - ボリュームのプロビジョニングワークフローを見直し、今後作成されるクローンが本番環境のワークロードにアタッチされる前にフラット化されるようにしてください。
- 複数のVMで同様の症状が見られる場合は、
rbd lsおよびrbd infoを使用して、すべてのCephボリュームについてアクティブな親参照の監査を行ってください。