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
サイボウズ 開発本部採用ピッチ / Cybozu Engineer Recruit
cybozuinsideout
PRO
12
86k
新卒1年目QAが リリース基準の"なぜ"をたどってみた
cybozuinsideout
PRO
1
770
kintone リサーチ副部/UXリサーチャー 業務紹介
cybozuinsideout
PRO
0
150
私たちが『JaSST協賛』から『外部コネクト』チームになった理由
cybozuinsideout
PRO
0
560
LLMでもいつものテスト技術〜意外と半分はこれまでのテストでした〜
cybozuinsideout
PRO
1
1.1k
kintone開発のプラットフォームエンジニアの紹介
cybozuinsideout
PRO
1
1.6k
LLMアプリの品質保証
cybozuinsideout
PRO
1
780
技術広報チームに丸投げしない!「一緒につくる」スポンサー活動
cybozuinsideout
PRO
0
290
テクニカルライター (グループウェア) について
cybozuinsideout
PRO
0
270
Other Decks in Technology
See All in Technology
AWSとAzureのマルチクラウド活用における強い味方___AWS_Kiroを使った二刀流スキル作成.pdf
duelist2020jp
0
130
internal/testlog で遊ぼう
rokuosan
0
280
形式手法特論:Hyperproperty とモデル検査 #kernelvm / Kernel VM Study Tokyo 19th
ytaka23
1
880
dbt と Snowflake と tag
kevinrobot34
2
290
会計事務所と顧問先の契約関係をOIDC・OAuthで表現する
terara
0
480
hookで自作する Claude Code の「実況ボード」
shinyasaita
2
220
AI駆動開発はどこまで来たのか? ファインディの最新実態調査で読み解く現在地 Devin Con Tokyo
akiratom
4
1.9k
AI駆動開発をチームに根付かせる - 「1行も書かない」チームがHarnessを育てた1年 -
kenichirokimura
6
3.3k
ブラウザで変わるID連携(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
350
どんな手を使っても絶対間に合わせるスケジューラ
asari194617
0
1.5k
ClaudeCodeでセキュリティ監視業務を半自動化_1年の運用でわかったAIに任せる設計の5つのポイント
kintotechdev
3
890
AIエージェントのためのデータ設計
daiz21
0
520
Featured
See All Featured
Side Projects
sachag
455
43k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
830
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.1k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
260
Building Applications with DynamoDB
mza
96
7.2k
Code Review Best Practice
trishagee
74
20k
Git: the NoSQL Database
bkeepers
PRO
432
67k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
220
My Coaching Mixtape
mlcsv
0
300
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
500
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
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経由で渡される