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. サーバーサイドエンジニアオールスターズ in 関⻄︕
    Kubernetes向けストレージプラグイン
    TopoLVMの紹介
    2019-07-07
    サイボウズ株式会社
    ⽯井 正將

    View Slide

  2. 今⽇の内容
    ▌サイボウズってどんな会社︖
    ▌働き⽅・開発環境
    ▌Kubernetes向けストレージプラグイン TopoLVM
    l Dynamic Volume Provisioning
    l Topology-aware Volume Provisioning
    l Capacity-aware Scheduling
    ▌We are hiring!
    1

    View Slide

  3. サイボウズってどんな会社︖
    2

    View Slide

  4. サイボウズってどんな会社︖ (1)
    ▌クラウドベースのグループウェアを作っている会社
    ▌もともとはパッケージ製品の販売
    ▌2011年からクラウドサービス を開始
    • ビジネスは右肩上がり
    Ø インフラのアーキテクチャが古いため
    次世代インフラの開発が必要になってきた
    3

    View Slide

  5. サイボウズってどんな会社︖ (2)
    ▌フロントエンドからインフラまで全て⾃社開発
    Ø さまざまなスキルを持った⼈が在籍
    ▌品質やセキュリティを担保するためのチームも
    ▌働き⽅改⾰などで有名ですが
    堅実なモノづくりをしています
    4

    View Slide

  6. 働き⽅・開発環境
    ▌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

    View Slide

  7. ▌Kubernetes をベースとしたインフラ
    Ø 宣⾔的操作でシステムの運⽤コストを⼤幅削減 (NoOps を⽬指す)
    数千のアプリケーションコンテナ
    3〜5台の管理サーバ
    インフラ刷新プロジェクト Neco
    数千台ノードで構成されるKubernetesクラスタ
    ・・・
    Kubernetes + α
    Elasticsearch や MySQL のマネージドサービス
    管理
    デプロイ
    App App App App
    Neco
    製品開発
    チーム
    6

    View Slide

  8. 開発中のS/Wの紹介
    Kubernetes向けストレージプラグイン
    TopoLVM

    View Slide

  9. 開発の背景
    ▌以下4つの要件を満たす Kubernetes のストレージプラグインが必要
    1. LVM(Logical Volume Manager)を扱える
    2. Dynamic Volume Provisioning
    • 必要な時に、動的にボリュームを確保
    3. Topology-aware Volume Provisioning
    • クラスタの物理的な構成を意識した、ボリュームの確保
    4. Capacity-aware Scheduling
    • LVMの空き領域を考慮して、アプリケーション(Pod)をノードに配置
    Ø 上記を満たすストレージプラグインは存在しない
    8

    View Slide

  10. TopoLVM
    ▌サイボウズで開発している ストレージプラグイン
    n OSS として公開中
    • https://github.com/cybozu-go/topolvm
    n CSI ver 1.1に準拠
    • CSI(Container Storage Interface) とは、Kubernetes 等の
    コンテナ管理ツールが ストレージ管理機能を呼び出すための共通仕様
    Ø 絶賛開発中︕
    ▌特徴
    Ø 前⾴の要件をすべて満たす
    9

    View Slide

  11. ▌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)
    アクセス

    View Slide

  12. Dynamic Volume Provisioning
    ▌必要な時に、動的にボリュームを確保する仕組み
    n 通常
    1. ボリュームを事前に確保(インフラ管理者)
    2. アプリケーションが上記ボリュームを使うことを宣⾔(アプリ開発者)
    n Dynamic Volume Provisioning を実現すると…
    1. アプリケーションが使う時に、動的にボリュームを確保(アプリ開発者)
    (yamlファイルを書くだけ)
    Ø インフラ管理者の作業量が減り、運⽤が楽に
    11

    View Slide

  13. Topology-aware Volume Provisioning
    12
    ▌クラスタの物理的な構成(トポロジー)を意識した、ボリュームの確保
    • マルチノードな環境では、ボリュームへのアクセスに物理的な制約がある
    Ø アプリケーションとボリュームがバラバラに配置されると、アプリケーションが動作しない
    ▌TopoLVM ではLVMを使うため、アプリケーションとボリュームを同⼀ノードに配置
    ノード ノード
    ストレージ
    App App
    ストレージ
    App App
    LV
    LV LV
    LV
    異なるノードのボリュームには
    アクセスできない

    View Slide

  14. 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なら
    どっちでもいいや

    View Slide

  15. 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 が
    追加で判定
    やったぜ︕

    View Slide

  16. TopoLVMの全体像
    ▌複数のモジュールからなるマイクロサービス
    l 1モジュール1機能
    l モジュール間の通信はgRPC
    Ø 詳しくはWebで︕
    https://github.com/cybozu-go/topolvm
    15

    View Slide

  17. まとめと今後
    ▌まとめ
    l ノードのローカルストレージ(LVM)を管理するための ストレージプラグイン を開発
    l LVM + トポロジー & ノードの空き容量を考慮したスケジューリングは世界初︕︖
    ▌今後
    l KubeCon North America で Kubernetes コミュニティに紹介予定(CfP 投稿済)
    l Elasticsearch や MySQL のクラスタとの組み合わせ
    l ⼤規模クラスタに適⽤して安定性の検証
    l ドキュメントを充実させ、誰でも使えるように︕
    16

    View Slide

  18. We are hiring!
    ▌サイボウズ ⼤阪オフィスでは以下の開発/運⽤エンジニアを募集しています
    ※ 今後、製品をNeco(Kubernetes)上に移⾏するためのクラウド基盤エンジニアも、
    募集を開始予定
    Ø リモートワークや他社との兼業など、いろいろな働き⽅が可能です
    (ハイスペックなPCも⽀給されます。4KディスプレイもOK︕)
    17
    l Webアプリケーションエンジニア(kintone/PHP)
    l フロントエンドエンジニア
    l モバイルエンジニア
    l サイトリライアビリティエンジニア(SRE) New!
    l インフラ刷新プロジェクト Neco 開発者
    l ⽣産性向上エンジニア New!

    View Slide