FreeBSDの準仮想化機構「jail」によるコンテナホスティングプラットフォーム「jaisting」を公開しました
はじめに
初めまして、筆者です。この度、この度、FreeBSDの準仮想化機構「jail」によるコンテナホスティングプラットフォーム(以下、プラットフォームをPFと呼ぶ)「jaisting」をパブリックにリリースする事になりましたので、リリース記事をここに執筆します。なお、以前のプロトタイプ向けの記事はこちらをご覧下さい。
「FreeBSDのjailホスティングシステム「jaisting」を作りました」
開発経緯について(改めて)
パブリックリリースにあたって、改めて開発経緯について執筆します。現在、ちょくちょく参加させていただいているFreeBSD勉強会においてiocageと呼ぶjail管理ツールの事を聞きました。 iocageはFreeNASを開発しているチームを中心に開発されています。iocageは非常に簡単にjailシステムを作成・管理する事ができます。筆者も当初はiocage上で用意されているバックエンドライブラリ側を利用して開発に至っていましたが、CLIと混在していること、Pythonコードを読むのも実は初めてであるという様々な諸事情があり、コードの理解に難航する事が多々ありました。そんな中、iocageのPRから派生したバックエンド専用ライブラリプロジェクトであるlibiocの事を知り、Contoributersとも相談(?)した事により、今回のプロジェクトではlibiocを採用する事としました。現在、こちらのバックエンドライブラリの改修に関しても並行して行っております(まだmergeはされていませんが)
そもそもの開発経緯としては、筆者はこれまでDockerを中心としたコンテナ管理を仕事として行なってきたのですが、近年発表されているコンテナオーケストレーションツールを触りつつも、大規模なコンテナオーケストレーションを行うような実績・経験がない事、UI的にも不満が残るところがあること、そもそもコンテナオーケストレーションツールが必要なアーキテクチャというのがどういうものなのか、VMでクラスタリングしていた時と比較しての優位性が感じられなかった等の様々な疑問・不安があり、あまり馴染めないところがありました。そこで、これまでの経歴と関連させてオーケストレーションとは打って変わりホスティングツールとしてソフトウェアの設計を行う事としました。更に言うと、今までFreeBSDを触りつつも貢献できていない罪悪感に駆られ←、Web開発とコンテナのノウハウから何かできないと思いつつ、開発を進める事としました。
今後の展望
今後の展望ですが、FreeBSDの機能を潤沢に使いプラットフォーム経由でフラットにコンテナ作成・管理、ネットワーク作成、NAT、FWの機能を設定できるようなPFを目指します。また、一応ライバル(と言うのもおこがましいですが)となるツールはKubernetesというところもあり、闘っていくという所まではいかないかもしれないですが、一先ずスケーリング機能はホスティングPFと言えども関係なく採用したいと思います。
現在サポートしている機能
* jail作成・起動・停止・削除機能
jailコンテナをPF経由でフラットに管理できるように上記4つの機能を導入しました。
* IPv4アドレス設定機能
jailに紐付けさせるブリッジインタフェースとL3レベル(プライベートな)で疎通が取れるようにIPv4アドレスをvnetインタフェースに紐付けられる設定をフォームから行えるようにしました。
* FreeBSDソースの取得
jailを作成するにあたってFreeBSDのソースを取得する機能を追加しました。
機能要件
* FreeBSD 12-RELEASE 以上
12以降、vimageをデフォルトのカーネルでサポートしているため、12-RELASE以上とさせていただきます。
* ZFS
libiocによるjailに関係する設定ファイルを管理する都合上ホストOSとなるFreeBSDはZFSで構築することが必須となります。
* Python3.6以上
libiocやDjangoを利用するためにPython3.6以上をインストールしてください
* Django
PFを構築するためのバックエンドフレームワークとして利用しています。
* yarn
フロントエンドはDjangoとは独立して構築していますので、フロントエンド関係のパッケージをインストールするためのパッケージマネージャーとして必要となります。
* postgresql-server
現在、libioc側でjailの設定を保存しているのでほぼDBにデータを格納しておりませんが、ログインデータはDBサーバに保存するように設計してありますので、面倒ですがインストールしていただけますと幸いです。
その他の必要なパッケージはREADMEをご覧ください。
ソースコードについて
最後に、jaistingのリポジトリを共有します。
URL: https://github.com/himrock922/jaisting
まとめ
という事で初パブリックリリースとして改めて、まとめ記事を書きました。今後もサポートしなければならない機能が多々あり時間との戦いでもあります。とは言え、フラットにコンテナ管理ができるPFとして魅力的なモノを作っていくので応援のほどよろしくお願いします。また、開発に協力して下さる方も募集しておりますで、ご興味があれば是非PRやissueを送っていただけますと幸いです。
それではまた。