- Kubernetes Native Storage
- NVMe-oFのCSI Driver
- PersistentMemoryとCSI Driver
- オブジェクトストレージ向け標準I/F(COSI)
- ストレージ(CSI)の自動復旧
- バックアップの強化
Kubernetes Native Storage
OpenEBS/Longhornが書いてあったのでみていく。
OpenEBSができること
- Local Volumes - PVの作成、管理
- Replicated Volumes - PVを複数Nodeに分散化し、Node障害時にもI/Oが行えるようにする
Welcome to OpenEBS Documentation ·
- Local Volumes
- rawブロックデバイスやパーティションやディレクトリ、ZFS、LVMなどの領域にPVを作る
- PVをStateful Podにマウントする(I/O時にOpenEBSは一切経由しない)
- Local Volumeへのモニタリング、バックアップ・リストア、DR、スナップショットをZFSやLVMの機能を使って実現する
- Replicated Volumes(Distributed Volumes:DV)
- OpenEBSは、エンジンの1つ(Mayastor、cStor、またはJiva)を使用して、分散永続ボリュームごとにマイクロサービスを作成する
- Stateful PodがOpenEBS エンジンにデータを書き込と、クラスタ内の複数のノードにデータを同期的に複製する。OpenEBS エンジンはPodとしてデプロイされk8sに管理される。もしStateful Podが稼働するNodeがダウンした場合には、他のNodeにリスケジュールされOpenEBSは他のノードにコピーされたデータをPodに提供する
- Stateful PodはDVにiSCSIまたはNVMeoFでアクセスできる
その他だいぶ古い話ではあるがCybozuの方が調べた内容をぺたり。この記事は技術選定としてどのように調べていくか?という点でも勉強になります。後でじっくり読む。
NVMe-oFのCSI Driver
NVMe-oF(NVMe over Fablic)についてはここにまとめたので参照
外部ストレージに置いたNVMe-SSDをFCやInfiniBand経由でアクセスさせる話が、kubernetesにも登場していたらしい。Samsungの事例なんて2016だから相当前からなんだなあ。
- Samsung事例
- GitHub - intel/csi-intel-rsd: Container Storage Interface (CSI) Driver for Intel® Rack Scale Design (Intel® RSD) NVMeoF
正直、自身で大規模なk8sクラスタをオンプレで運用しない限りほぼ関係ない技術。ただステートフルセットでDBやディスクI/Oが半端ないものを動かす時にはあったほうがいいんだろうなあ〜という感じ。非常にニッチ。
PersistentMemoryとCSI Driver
PersistentMemory(永続メモリ:PMEM)とは
永続メモリー入門 | Oracle オラクルエンジニア通信 - 技術資料、マニュアル、セミナー Blog
簡単にいうと主記憶装置(メモリ/DRAM)並みに早いのに、データが永続化(不揮発性)なメモリのこと。実際の製品は NVDIMM / Optane DC Persistent Memory(Intel 3D XPoint DIMM) など。
PMEMの使い方
永続メモリーはブロック指向のアプリケーションでも使用される可能性がありますが、これがパフォーマンス上の利点を十分に活用していないことは容易に理解できます。PMEMの完全なパフォーマンス上の利点を確認できるのは、アプリケーションがバイト・レベルで動作するように特別に設計されている場合のみです
通常のアプリはHDD/SSDに対するブロックベースのアクセスを行うが、PMEMはメモリのためアドレスベース(バイト指向)のアクセスの方が性能が出る。
上記のサイトに詳しく書かれている。
PMEMの使い方は二通りありDRAMと同じように純粋なメモリとして使う場合と、通常のディスクのようにマウントしext4/xfsファイルシステム を適用しブロックデバイスのように扱うやり方である。これをApp Direct Modeモードという。(ダイレクトアクセス(またはDAX)とは、DRAMのバッファにデータをコピーせずに、永続メモリーの内容に直接アクセスする機能を指す)
※マウント時はdax(ダイレクトアクセス)でマウント mount -o dax
PMEMを使っている製品
Oracle Exadata X8M ではREDOログの書き込みをI/Oではなく、RDMAでストレージサーバ上のPMEMに直接書き込みをすることで高速化をしている。
HPEのSuperdome FlexシリーズにもOptane DC Persistent Memoryを載せることが可能。
※汎用PCにも乗ってくれないかなあ… ※Dellの128GBで11万で売ってた。きっとそのうち安くなるはず...
デルのメモリをアップグレード - 128GB - 2666MHz Intel Opt DC Persistent Memory (Cascade Lake のみ) | Dell 日本
PMEM用のCSI
Intelが推進。(dpdkやsriovしかりCPU以外で頑張ってるなあ)
- GitHub - intel/pmem-csi: Persistent Memory Container Storage Interface Driver
- https://intel.github.io/pmem-csi/devel/README.htm
オブジェクトストレージ向け標準I/F(COSI)
k8sにてオブジェクトストレージ(S3でいうバケット)の作成、管理、Podからマウントをコントロールするための標準I/Fが実装されはじめたとのこと。
ストレージ(CSI)の自動復旧
ボリュームを提供するストレージやネットワークやノード自体の障害により、KubernetesでPodがマウントしているにもボリュームが利用できなくなっている場合があります。
このような場合、Kubernetesでボリュームを示すリソースであるPV(PersistentVolume)およびPVC(PersistentVolumeClaim)のステータスでは判断できず、Podの中のコンテナで動作するアプリケーションにてRead/Writeを実行したことで始めて障害に気がつくことがあります。
もしかすると、頻繁にRead/Writeが発生するアプリケーションであれば、すぐに障害に気がつくかもしれません。しかし、稀にしかRead/Writeが発生しないアプリケーションの場合は、障害に気がつかないままとなっている場合があります。
そこで、ボリュームの状態を定期的に監視するための機能としてVolume Health Monitorが開発されています
現時点でStateful PodでPVを使用している場合、いい監視方法がないんですよね。(あれば教えてください)個人的にやったケースではProbeでmountコマンドを定期的に叩き、マウントされているかどうか?をチェックするというものです。
ただこれだとファイルシステム の破損だったりは気づけないですし、ディスクの劣化なんかも気づけません。一応AWS EBSだったのでCloudWatchと組み合わせたり、動かすアプリのログとかで気づけなくもないのですが色々考えないといけないということでこのアップデートには期待したいですね。
※そう考えるとStatefulsetはまだまだ発展途上ということか
バックアップの強化
ワーキンググループみたけど情報見つからず、youtubeのmeeting見る気力はなかった。
アプリの静止点をとってスナップショットとってバックアップまでができれば非常にありがたい。現状だとストレージ側の機構でバックアップとるか、アプリケーションの専用コマンドでdumpをするしかなかった。
- Kasten K10
- Kanister:
- アプリケーションごとにBlueprintというテンプレートを用意することで、アプリケーションごとのやり方でバックアップ/リストアを行うというアプローチをとっている(ただしwriteをロックする処理とかは実装されていない/自分で用意する必要あり)
- Kubernetes NativeなバックアップツールKanisterの検証 - Qiita
- Velero
- k8sリソースやPVを丸ごとバックアップする
- バックアップ対象のPodにfsfreeze sidecarを入れることで、ファイルシステムレベルでの静止点を取ってからバックアップが可能になる
- Kubernetesのリソース・PersistentVolumeをバックアップするVeleroの検証 - Qiita