KubeCon + CloudNativeCon North America 2018 現地レポート 3日目

こんにちは、Necoプロジェクトのsatです。カンファレンス最終日、3日目のレポートです。

0日目から2日目のレポートはこちらです。

blog.cybozu.io

blog.cybozu.io

blog.cybozu.io

2日目までは執筆者各人がその日に参加したセッションの中からいくつか面白かったものを選んで書くというスタイルでしたが、最終日の今日は少し毛色を変えて1日目と3日目に合計4つのセッションがあったRookというソフトウェアを集中的に紹介したいと思います。Rookとは分散ストレージソフトウェアの一つであるCephをkubernetesによって管理するためのオーケストレーターです。

Cephについてご存じないかたは、本記事を見る前にCephの概要について述べた以下の記事をごらんください。

blog.cybozu.io

Intro: Rook - Jared Watts, Upbound

これはRookの基礎について紹介するセッションでした。

Rookは前述の通りkubernetesを使ってCephを管理するソフトウェアです。RookはまたCNCFのincubating level(孵化段階の)プロジェクトでもあります。

github.com

kubernetesはボリュームプラグインという仕組みによってアプリケーションに提供する永続ストレージのプロバイダを追加できます。Cephもそのバックエンドの一つとして利用できます。ただし、そのためにはユーザが自分自身でCephクラスタを構築、管理する必要があります。kubernetesを拡張してこれらの面倒事を自動管理してくれるソフトウェアがRookです。

f:id:cybozuinsideout:20181214141409j:plain

Rookが提供する機能は単なるクラスタを自動構築、管理だけではありません。Cephは通常クラスタを管理するためにユーザがコマンドを発行する必要があります。これに対してRookではkubernetesが扱う各種リソースと同様にCephクラスタを宣言的に扱えます。例えばCephクラスタを定義するyamlファイルにモニタの数を3つと書いておけば、モニタの数が3つであるクラスタを自動的に構築し、かつ、モニタのうちの一つがダウンしたとしても自動的にモニタの数が3に戻るようにRookがよきにはからってくれます。この宣言的な管理を自前で実装するのではなくkubernetesに任せるというのがRookの巧みなところです。

f:id:cybozuinsideout:20181214141413j:plain

セッションの後半にはRookを使って実際にCephクラスタを構築するデモがありました。Cephのクラスタを幾度となく構築した経験がある筆者から見ると、「なんて楽なんだ」というのが率直な感想です。kubernetesに短いyamlファイルを投入するだけでモニタやOSDなどのCephの各コンポーネントがPodとして次々に立ち上り、次第にCephクラスタが出来上がってゆく様は圧巻でした。

Deep Dive: Rook - Travis Nielsen, Red Hat

このセッションは前述の"Intro: Rook"に比べてRookのさらに詳細について扱うものでした。

前半はRookにおけるCephの各種リソースの定義についての話でした。ここではそのうちの一部について紹介いたします。

  • Cephクラスタを示すリソース: 指定されたバージョンのCephを使ってクラスタを作る。この定義を変更すればCephを自動的にアップグレードしてくれる。Rookのバージョンも同様に管理できる
  • OSDを示すリソース: どのノードのどのストレージデバイスをOSDとして提供するかを定義できる。それに加えてストレージデバイスが並列アクセスが高速なNVMe SSDだった場合に、デバイスごとに複数のOSDを定義してI/Oを高速化させられる

今後もいろいろ定義できる項目が増えていくことでしょう。

後半にはいくつかのデモがありました。たとえばRookによってCephの一つ前の安定版(コードネームはLuminous)から最新の安定版(コードネームはmimic)にアップグレードするといったものがありました。クラスタを定義するyamlファイルの中のCephのバージョンに相当する部分を一か所書き換えるだけでアップグレードができるというのは筆者にとっては驚きでした。

Adding a New Storage Provider to Rook - Jared Watts, Upbound

このセッションはRookに新しいストレージプロバイダを追加する方法についてのものでした。

ここまでCephの話ばかりしていましたが、実はRookはCeph以外のストレージソフトウェアも永続ストレージのプロバイダとして使えるようにするためのフレームワークを持っています。すでに現在NFS, Cassandra, CockroachDBなどをサポートしています。ソースコードを見たところ、現在のRookの主たるプロバイダはあくまでCephであり、残りのストレージソフトウェアは一部の機能しか実装していない評価版のような位置づけのようです。たとえばストレージプロバイダのAPIのバージョンはCephが先月末に唯一最初の安定版といえるv1になった以外はalpha版扱いです。

本セッションでは既に取り込まれているMinioのプロバイダを例に、プロバイダを追加するにはkubernetesにどのようなリソースを定義してどのようなコードを書けばいいかということを紹介していました。個人的にはCeph以外のプロバイダを使うことは無いと思いますが、開発全体が活発で、かつ、個々のプロバイダがRook本体と独立して開発できるのはいいことだと思います。

Meet the Maintainer: Rook - Jared Watts, Upbound

これはRookに興味のある参加者がRookのメンテナに直接質問できるセッションです。

筆者は本イベントに参加する前にRookについて興味を持っていたため、その動向を追ってきました。それに加えて各種Rookのセッションを見たことによって、いくつかの疑問が湧きました。せっかくなので本セッションにおいてそれらについてメンテナに質問してみました。

  • Q: 現在RookはRADOSオブジェクトのレプリカをそれぞれ同じノードに置かないように設定できるが、それ以外の設定はできない。私が作ろうとしているCephクラスタにおいては各レプリカを別ラックに置きたいと思っている。直近でこのような設定をできるようにする予定はあるか
  • A: 今後しばらくはRookによってクラスタを組んだ後にRookを介さずに直接Cephを操作することによってそのようなことを実現するしかない。将来的にはサポートするかもしれない。

  • Q: 最新版のv0.9までは毎回のように非互換が発生していた。これではプロダクション環境でRookを使いにくい。今後しばらくはこのような状況が続くと考えてよいか

  • A: 今後は非互換を発生させないようにする見込み。もちろんRookに閉じた話ではなくCephに非互換が発生した場合はこの限りではない

  • Q: Cephには大量のリバランス処理をきっかけとしてネットワークの帯域を使い果たし、一切クラスタにアクセスできなくなるという問題が起こりうる。実際そのようなケースをこれまでにいくつか見てきた。この問題に対処するための帯域制御機能をRookに実装する予定はあるか

  • A: 今のところはそのような帯域制御はユーザ自身がするしかない。Rookがそのような仕組みを用意することはやろうと思えばできるだろうが、そのような機能を追加する予定は今のところ無い

知りたいことにすべて丁寧に回答してもらえたので非常に満足できたセッションでした。

ここで余談をひとつ。本イベントは多くのセッションについてスライドが公開されていたり、ものによっては発表時の動画が公開されることすらあります。それでも現地に行く価値はどこにあるのでしょうか。それは上記のような質疑を含む参加者同士の対話です。みなさまもこの手のイベントに参加する際はご自身の持つ課題についてメンテナを含む他の参加者と議論してみてください。イベントがもっと楽しくなりますよ。

Rookについての現在の印象

Rookは宣言的にCephクラスタを扱えること、および、そのために既にある程度成熟しているkubernetesを利用しているという2つの点において、なかなか筋がいいソフトウェアに見えます。現在はまだ粗削りですが、Red Hat社やQuantum社などの企業のエンジニアやホビープログラマなどの多様な人々によって活発に開発が進んでいることより、将来的には「kubernetesでCephを使うのならばRookを使うのが常識」という状況になっても不思議ではありません。今後も引き続き開発動向を追っていく予定です。

KubeCon全体の総評

とにかく人数が多くて熱のこもったイベントだったというのが全体の印象です。筆者はこれまでOpen Source SummitなどのOSSに関する国際イベントにいくつも出てきましたが、八千人もの大人数が参加する規模ものはかつて無かったです。世間のコンテナ熱、kubernetes熱を見るに、次回以降もますます盛り上がっていくことでしょう。

もちろん我々は単に驚いて圧倒されていたわけではなく、得るものがたくさんありました。ここではそのうちの1つを紹介いたします。我々はkubernetesの最新、かつ深い知識を得るために本イベントにやってきました。ところが、幸か不幸かレベルが高いと記載されているセッションに参加しても既に知っている内容が多かったです。このため、次回以降は参加するだけではなく、自分たちのセッションを持つことによって我々の知見をkubernetesのコミュニティに共有することが一つの目標になりました。

これまで4日にわたってKubeCon + CloudNativeCon North America 2018の様子をお届けしてまいりましたが、これにてすべて終了です。ここまで読んでくださった方に感謝いたします。我々のレポートがみなさんにとって何かしら役に立つものであれば幸いです。