Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kubernetes向けストレージプラグインTopoLVMの紹介 / TopoLVM intro

Kubernetes向けストレージプラグインTopoLVMの紹介 / TopoLVM intro

サーバーサイドエンジニアオールスターズ in 関西!で発表したスライドです。
https://techplay.jp/event/736485

サイボウズで開発しているKubernetes向けのストレージプラグイン"TopoLVM"の紹介をしています。

Masayuki Ishii

July 07, 2019
Tweet

More Decks by Masayuki Ishii

Other Decks in Technology

Transcript

  1. 働き⽅・開発環境 ▌cybozu.com の次世代インフラを開発(インフラ刷新プロジェクト Neco) ▌Slack や Zoom を使った、リモート開発(東京7, ⼤阪2, ⽯川1

    の 計10⼈) ▌モブプログラミング l 3〜4⼈1チーム×3チーム、メンバーは週1でローテーション ▌開発環境 l デスクトップPC (CPU: Core i7-7700, メモリ: 32GB) + 4Kディスプレイ l 会議⽤MacBook Pro l 在宅勤務⽤ノートPC Ø 異動して4ヶ⽉、キャッチアップできている 5
  2. ▌Kubernetes をベースとしたインフラ Ø 宣⾔的操作でシステムの運⽤コストを⼤幅削減 (NoOps を⽬指す) 数千のアプリケーションコンテナ 3〜5台の管理サーバ インフラ刷新プロジェクト Neco

    数千台ノードで構成されるKubernetesクラスタ ・・・ Kubernetes + α Elasticsearch や MySQL のマネージドサービス 管理 デプロイ App App App App Neco 製品開発 チーム 6
  3. 開発の背景 ▌以下4つの要件を満たす Kubernetes のストレージプラグインが必要 1. LVM(Logical Volume Manager)を扱える 2. Dynamic

    Volume Provisioning • 必要な時に、動的にボリュームを確保 3. Topology-aware Volume Provisioning • クラスタの物理的な構成を意識した、ボリュームの確保 4. Capacity-aware Scheduling • LVMの空き領域を考慮して、アプリケーション(Pod)をノードに配置 Ø 上記を満たすストレージプラグインは存在しない 8
  4. TopoLVM ▌サイボウズで開発している ストレージプラグイン n OSS として公開中 • https://github.com/cybozu-go/topolvm n CSI

    ver 1.1に準拠 • CSI(Container Storage Interface) とは、Kubernetes 等の コンテナ管理ツールが ストレージ管理機能を呼び出すための共通仕様 Ø 絶賛開発中︕ ▌特徴 Ø 前⾴の要件をすべて満たす 9
  5. ▌Kubernetes からのリクエストをもとに処理を⾏う Ø controller と node の2種類のモジュール TopoLVMの位置づけ Kubernetes TopoLVM

    (controller) 10 ノード ・・・ ストレージ App App LV リクエスト LV TopoLVM (node) クラスタ全体の ボリュームを管理 (1クラスタに1インスタンス) ノードのローカルストレージ (LVM)を操作 (ノード1台に1インスタンス) ノード ストレージ App App LV LV TopoLVM (node) アクセス
  6. Dynamic Volume Provisioning ▌必要な時に、動的にボリュームを確保する仕組み n 通常 1. ボリュームを事前に確保(インフラ管理者) 2. アプリケーションが上記ボリュームを使うことを宣⾔(アプリ開発者)

    n Dynamic Volume Provisioning を実現すると… 1. アプリケーションが使う時に、動的にボリュームを確保(アプリ開発者) (yamlファイルを書くだけ) Ø インフラ管理者の作業量が減り、運⽤が楽に 11
  7. Capacity-aware Scheduling (1) ▌Kubernetes は、スケジューリングの際に CPU と メモリ しか考慮しない Ø

    アプリケーションが要求したサイズのボリュームを、確保できないかもしれない 13 ノード1 CPU: 8コア ⭕ 空きメモリ: 1GB ❌ ストレージ: 100GB Kubernetes ノード2 CPU: 4コア ⭕ 空きメモリ: 8GB ⭕ ストレージ: 100GB ノード3 CPU: 8コア ⭕ 空きメモリ: 8GB ⭕ ストレージ: 空きなし 「ボリュームの要求」 サイズ: 50GB ファイルシステム: xfs (yaml) App Kubernetes は CPU/メモリしか⾒ない ボリューム 50GB 欲しいんですが… 「アプリの動作条件」 CPU: 2コア メモリ: 2GB コンテナイメージ: XXX ノード2, 3なら どっちでもいいや
  8. Capacity-aware Scheduling (2) ▌TopoLVM では、Kubernetes の Scheduler extender を作成 •

    アプリケーションのスケジューリング処理にフックを追加 Ø TopoLVM が ストレージの空き容量をチェック ▌Capacity-aware なスケジューリングを実現するのは TopoLVM が初 14 ノード1 CPU: 8コア ⭕ 空きメモリ: 1GB ❌ ストレージ: 100GB ⭕ ノード2 CPU: 4コア ⭕ 空きメモリ: 8GB ⭕ ストレージ: 100GB ⭕ ノード3 CPU: 8コア ⭕ 空きメモリ: 8GB ⭕ ストレージ: 空きなし ❌ App TopoLVM が 追加で判定 やったぜ︕
  9. まとめと今後 ▌まとめ l ノードのローカルストレージ(LVM)を管理するための ストレージプラグイン を開発 l LVM + トポロジー

    & ノードの空き容量を考慮したスケジューリングは世界初︕︖ ▌今後 l KubeCon North America で Kubernetes コミュニティに紹介予定(CfP 投稿済) l Elasticsearch や MySQL のクラスタとの組み合わせ l ⼤規模クラスタに適⽤して安定性の検証 l ドキュメントを充実させ、誰でも使えるように︕ 16
  10. We are hiring! ▌サイボウズ ⼤阪オフィスでは以下の開発/運⽤エンジニアを募集しています ※ 今後、製品をNeco(Kubernetes)上に移⾏するためのクラウド基盤エンジニアも、 募集を開始予定 Ø リモートワークや他社との兼業など、いろいろな働き⽅が可能です

    (ハイスペックなPCも⽀給されます。4KディスプレイもOK︕) 17 l Webアプリケーションエンジニア(kintone/PHP) l フロントエンドエンジニア l モバイルエンジニア l サイトリライアビリティエンジニア(SRE) New! l インフラ刷新プロジェクト Neco 開発者 l ⽣産性向上エンジニア New!