フラミナル

考え方や調べたことを書き殴ります。IT技術系記事多め

2021年のk8sとストレージ管理で気になったことを調べる

f:id:lirlia:20210617021613p:plain

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)についてはここにまとめたので参照

blog.framinal.life

外部ストレージに置いたNVMe-SSDをFCやInfiniBand経由でアクセスさせる話が、kubernetesにも登場していたらしい。Samsungの事例なんて2016だから相当前からなんだなあ。

f:id:lirlia:20210617012428p:plain

正直、自身で大規模なk8sクラスタをオンプレで運用しない限りほぼ関係ない技術。ただステートフルセットでDBやディスクI/Oが半端ないものを動かす時にはあったほうがいいんだろうなあ〜という感じ。非常にニッチ。

PersistentMemoryとCSI Driver

PersistentMemory(永続メモリ:PMEM)とは

永続メモリー入門 | Oracle オラクルエンジニア通信 - 技術資料、マニュアル、セミナー Blog

簡単にいうと主記憶装置(メモリ/DRAM)並みに早いのに、データが永続化(不揮発性)なメモリのこと。実際の製品は NVDIMM / Optane DC Persistent Memory(Intel 3D XPoint DIMM) など。

f:id:lirlia:20210617004454p:plain

f:id:lirlia:20210617004550p:plain

PMEMの使い方

永続メモリーはブロック指向のアプリケーションでも使用される可能性がありますが、これがパフォーマンス上の利点を十分に活用していないことは容易に理解できます。PMEMの完全なパフォーマンス上の利点を確認できるのは、アプリケーションがバイト・レベルで動作するように特別に設計されている場合のみです

通常のアプリはHDD/SSDに対するブロックベースのアクセスを行うが、PMEMはメモリのためアドレスベース(バイト指向)のアクセスの方が性能が出る。

f:id:lirlia:20210617005305p:plain

上記のサイトに詳しく書かれている。


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以外で頑張ってるなあ)

オブジェクトストレージ向け標準I/F(COSI)

k8sにてオブジェクトストレージ(S3でいうバケット)の作成、管理、Podからマウントをコントロールするための標準I/Fが実装されはじめたとのこと。

qiita.com

f:id:lirlia:20210617014734p:plain

ストレージ(CSI)の自動復旧

qiita.com

ボリュームを提供するストレージやネットワークやノード自体の障害により、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見る気力はなかった。

docs.google.com

アプリの静止点をとってスナップショットとってバックアップまでができれば非常にありがたい。現状だとストレージ側の機構でバックアップとるか、アプリケーションの専用コマンドでdumpをするしかなかった。