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.2k
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
270
サイボウズ 開発本部採用ピッチ / Cybozu Engineer Recruit
cybozuinsideout
PRO
10
82k
kintone リサーチ副部/UXリサーチャー 業務紹介
cybozuinsideout
PRO
0
80
私たちが『JaSST協賛』から『外部コネクト』チームになった理由
cybozuinsideout
PRO
0
350
LLMでもいつものテスト技術〜意外と半分はこれまでのテストでした〜
cybozuinsideout
PRO
1
890
kintone開発のプラットフォームエンジニアの紹介
cybozuinsideout
PRO
0
1.3k
LLMアプリの品質保証
cybozuinsideout
PRO
1
630
技術広報チームに丸投げしない!「一緒につくる」スポンサー活動
cybozuinsideout
PRO
0
240
テクニカルライター (グループウェア) について
cybozuinsideout
PRO
0
210
Other Decks in Technology
See All in Technology
SONiC Scale-Up Working Group から探る Scale-UpやUltraEthernet機能の実装方法
ebiken
PRO
2
120
手塩にかけりゃいいってもんじゃない
ming_ayami
0
430
AAIFに入ってみた ~内から見えるコミュニティ動向~
sato4
0
160
フロンティアAIのゲート化と地政学リスク
nagatsu
0
130
On-behalf-of Token exchange with AgentCore Identity
hironobuiga
2
150
Socrates × Looker 〜セマンティックレイヤーで進化するデータ分析エージェント〜
hanon52_
3
2.1k
日本 Fintech 未来予測レポート 2027〜2028年(オリジナル版)
8maki
0
1.9k
やさしいA2A入門
minorun365
PRO
12
1.7k
AI-DLCを活用した高品質・安全なAI駆動開発実践 / AI Driven Development with AI-DLC
yoshidashingo
0
170
タクシーアプリ『GO』の実践的データ活用
mot_techtalk
3
190
LLMと共に進化するプロセスを目指して
ymatsuwitter
13
4k
Android の公式 Skill / Android skills
yanzm
0
130
Featured
See All Featured
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Designing Experiences People Love
moore
143
24k
Exploring anti-patterns in Rails
aemeredith
3
400
Paper Plane (Part 1)
katiecoart
PRO
0
8.8k
It's Worth the Effort
3n
188
29k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
4 Signs Your Business is Dying
shpigford
187
22k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.7k
Agile that works and the tools we love
rasmusluckow
331
21k
Docker and Python
trallard
47
3.9k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.9k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
270
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経由で渡される