Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Necoのストレージ TopoLVMで何を実現するのか
Search
Cybozu
PRO
February 27, 2020
Technology
3.3k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Necoのストレージ TopoLVMで何を実現するのか
Cybozu
PRO
February 27, 2020
More Decks by Cybozu
See All by Cybozu
新卒1年目QAが リリース基準の"なぜ"をたどってみた
cybozuinsideout
PRO
1
670
サイボウズ 開発本部採用ピッチ / Cybozu Engineer Recruit
cybozuinsideout
PRO
11
84k
kintone リサーチ副部/UXリサーチャー 業務紹介
cybozuinsideout
PRO
0
130
私たちが『JaSST協賛』から『外部コネクト』チームになった理由
cybozuinsideout
PRO
0
450
LLMでもいつものテスト技術〜意外と半分はこれまでのテストでした〜
cybozuinsideout
PRO
1
1k
kintone開発のプラットフォームエンジニアの紹介
cybozuinsideout
PRO
0
1.5k
LLMアプリの品質保証
cybozuinsideout
PRO
1
730
技術広報チームに丸投げしない!「一緒につくる」スポンサー活動
cybozuinsideout
PRO
0
270
テクニカルライター (グループウェア) について
cybozuinsideout
PRO
0
250
Other Decks in Technology
See All in Technology
【CEDEC2026】『Relink』を拡張せよ - 『GRANBLUE FANTASY: Relink - Endless Ragnarok』の開発速度と品質を守るCI運用
cygames
PRO
0
110
オートロックマンションなのに、各部屋は施錠なし!? 攻撃者が組織内ネットワークで大暴れする理由 / The Front Door Is Locked, but the Rooms Are Wide Open: Why Attackers Move Freely Inside Enterprise Networks
nttcom
0
1.5k
トヨタ⽣産⽅式(TPS)⼊⾨
recruitengineers
PRO
1
350
AIがAPIを書く時代に、私たちは何を設計すべきか
nagix
0
210
モバイルアプリ開発概論2026
recruitengineers
PRO
1
290
[しろおび夏祭り2026] チャットするAIから、作業するAIへ - 使われ方の変化と、その裏側で起きていること
kk0n
0
1.6k
Flutterをカメラで動かしたかった話
sony
0
120
取引先から届く 「セキュリティチェックシート」の読み解き方
kamadamakoto
0
110
LLMリーダーボードアップデートに向けたAgentic Math_SWEのトレースについて
nejumi
0
210
データ組織の転換期 一足飛びしない段階的戦略
leveragestech
PRO
0
150
【CEDEC2026】次世代デジタルカードゲームのサーバー設計と運用 〜『Shadowverse: Worlds Beyond』の舞台裏~
cygames
PRO
0
820
もう一度考える SRE チームの作り方・育て方 / Rethinking SRE #1: Building and Growing SRE Teams
rrreeeyyy
5
970
Featured
See All Featured
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
210
The Language of Interfaces
destraynor
162
27k
Deep Space Network (abreviated)
tonyrice
0
250
Abbi's Birthday
coloredviolet
3
9.1k
Tell your own story through comics
letsgokoyo
1
1k
Accessibility Awareness
sabderemane
1
170
30 Presentation Tips
portentint
PRO
1
360
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
160
The Pragmatic Product Professional
lauravandoore
37
7.4k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.8k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
760
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
340
Transcript
Necoのストレージ TopoLVMで何を実現するのか 2020-02-18 サイボウズ株式会社 伊藤 祐司
今⽇の内容 ▌実現することと背景 ▌機能 ▌実装 ▌公開情報 ▌今後
⽤語についての注意点 ▌PV lPersistent Volume : Kubernetesのobjectの 1種で、Podに紐づく永続ストレージの宣⾔
TopoLVMで 実現することと背景
Necoのストレージで実現すること スイッチ Boot server Compute server • 業務関連Pod • NVMe
Storage server • HDD ⾼速 ローカル ストレージ ⼤容量 分散オブジェクト ストレージ ⾼可⽤ ネットワーク ストレージ Elasticsearch, MySQLなど ⾼IOPSなマネージド サービスに利⽤ ⽂書、画像、 動画ファイルの保存 ステートフルな アプリケーションの 永続化ボリューム Necoの基本ラック構成
なぜTopoLVMが必要になったか ▌NecoではNodeに⾼速なNVMeを積み、そ れらをMySQL, Elasticsearch, Cephなどで 使う ▌アプリケーションやミドルウェアが必要と するサイズを事前に計画するのは困難
TopoLVMで実現すること ▌NodeのローカルストレージをLVMで管理 し、Podに必要な領域を動的・柔軟に切り出 して提供する。
TopoLVMで実現すること スイッチ Boot server Compute server • 業務関連Pod • NVMe
Storage server • HDD ⾼速 ローカル ストレージ ⼤容量 分散オブジェクト ストレージ ⾼可⽤ ネットワーク ストレージ(Ceph) Elasticsearch, MySQLなど ⾼IOPSなマネージド サービスに利⽤ ⽂書、画像、 動画ファイルの保存 ステートフルな アプリケーションの 永続化ボリューム Necoの基本ラック構成 LVM割り当て、 PV作成の⾃動化
TopoLVMの 機能
Dynamic provisioning & Topology ▌LVMによるボリューム管理 ▌Persistent Volume Claim(PVC)をトリガ とし、動的に領域を確保 ▌可能な限り、空き容量の多いNodeからの
ディスク領域の確保
Scheduler extender ▌KubernetesのスケジューラはCPUとメモリに のみ基づいている ▌TopoLVMからスケジューラに対しストレージ の状態に基づいた情報を渡している lストレージの空き容量に応じた優先度 lストレージの空きが無いNodeへのPod割り当ての 回避
その他、多様な機能 ▌Raw Block Volume ▌Ephemeral inline volume lPodが直接利⽤してPodの終了とともに削除さ れる短期的なストレージの利⽤ ▌Volume
metrics lPrometheusで監視可能なメトリクスを出⼒
TopoLVMの 実装
実装に関連するKubernetesの機能 ▌Container Storage Interface(CSI) lストレージ実装の抽象化を⾏うための機能 lTopoLVMの機能の多くは、CSIを通して利⽤ される ▌Kubernetes schedulerの拡張 (Scheduler
extender)
TopoLVMのコンポーネント ▌topolvm-scheduler (DaemonSet, Deployment) kube-schedulerと連携してスケジューラを拡張 ▌topolvm-controller (Deployment) CSIと連携してクラスタ全体のvolumeを管理 ▌topolvm-node (DaemonSet)
各Nodeに関する処理をハンドリングする ▌lvmd (Systemdサービス) 実際にLVMを操作する
Dynamic Provisioningの概要 Deployment external-provisioner topolvm-controller API server Persistent Volume Claim
Node topolvm-node (DaemonSet) Storage Persistent Volume lvmd (Daemon) 1.PVCを検出 2. CreateVolume APIを呼び出し 3.LVを作成 4.LVを検出 5.論理ボリュームを作成 Local Volume (CR) 6. volumeIDを伝える 7. PVを作成
TopoLVMの 公開情報
もっと知りたい ▌Github lhttps://github.com/cybozu-go/topolvm/ ▌Kubernetesでローカルストレージを有効活⽤しよう lCybozu Inside Out (blog) lhttps://blog.cybozu.io/entry/2019/11/08/090000 ▌Introducing
a New Local Storage for Kubernetes: TopoLVM lKintone Engineering Blog lElasticsearchからの利⽤⽅法について lhttps://blog.kintone.io/entry/topolvm
試してみたい ▌汎⽤環境向け lhttps://github.com/cybozu- go/topolvm/blob/master/deploy/README.md ▌Rancher Meetup #11 in Osakaの資料 lTopoLVMをRancherで動かしてみた話
https://speakerdeck.com/masa213f/topolvm-rancher New!!
Deployの⼤まかな流れ 1. lvmdのインストール Kubernetesのhostとなる環境のsystemd, lvmを設定する 2. cert-managerの準備 3. topolvm-schedulerをDaemonSetにするかDeploymentにするか 決める
4. TopoLVMを適⽤しないnamespaceへのラベルつけ 5. TopoLVMのデプロイ 6. topolvm-schedulerの設定 kube-schedulerと同じnodeに 7. StorageClassの設定
コミュニケーションツール ▌Github issue ▌Slack New!!
TopoLVMの 今後
TopoLVMの今後 ▌OSS活動 lKubeCon EUでの発表(@sat, @kazmaz11) lRook/Cephとの連携 ▌機能開発 lVolume Expansion
補⾜スライド
コンポーネントの全体像 Deployment Deployment (or DaemonSet) external-provisioner external-attacher topolvm-controller topolvm-scheduler Scheduler
Extender Control Plane scheduler API server Persistent Volume Claim Pod Node Local Volume (CRD) Node DaemonSet node-driver-register topolvm-node lvmd Storage TopoLVM Kubernetes CSI Other object/resource
PVCからLV,PVを作成する(1) Deplyment external-provisioner external-attacher topolvm-controller Controle Plane API server Persistent
Volume Claim Pod Node metadata.annotations ["topolvm.cybozu.com/capacity"] 0. PVCが作成される 1. PVCの作成を検知 2. CreateVolume APIを呼び出し Local Volume (CRD) 3. lvを作る先のnodeを決め、LV(CRD)を作成 ・空き容量が最も⼤きいnode ・csiから渡された候補の中からTopoLVMで管理 しているnodeを選択 Nodeのストレージの空き容量
PVCからLV,PVを作成する (2) Node Daemonset node-driver-register topolvm-node lvmd Storage Controle Plane
API server Persistent Volume Claim Pod Node metadata.annotations ["topolvm.cybozu.com/capacity"] Local Volume (CRD) status.volumeID 1. LV(CRD)をwatch 3. status.volumeIDを更新 2. LV(CRD)で指定されたパラメタをもとに vg内にlvを作成, volumeIDを取得 ストレージの空き容量を設定
PVCからLV,PVを作成する (3) Deplyment external-provisioner external-attacher topolvm-controller Controle Plane API server
Persistent Volume Claim Pod spec.containers[0].resources .limits["topolvm.cybozu.com/capacity"] .requests["topolvm.cybozu.com/capacity"] Node metadata.annotations ["topolvm.cybozu.com/capacity"] 2. CreateVolume APIに対し、 volumeIDなどの情報を戻す 1. volumeIDが設定されるのを 待っている PVはCSIが作成する Schedulingのため、Podが使う ストレージの合計を設定 Local Volume(CRD) status.volumeID
ノードの空き容量に応じたスケ ジューリング Deplyment (or Daemonset) topolvm-scheduler Scheduler Extender Controle Plane
scheduler API server Pod spec.containers[0].resources .limits["topolvm.cybozu.com/capacity"] .requests["topolvm.cybozu.com/capacity"] Node metadata.annotations ["topolvm.cybozu.com/capacity"] predicate prioritize Podを配置可能なNodeを教える 0〜10の範囲で配置におけるNodeの 優先度を教える min(10, max(0, log2(capacity >> 30 / divisor))) あらかじめ設定していた情報 がscheduler経由で渡される