h-otterの備忘録

インフラを中心にコンピュータ関連をいいかんじにやっていきます

n0stackの紹介

n0stack とは

n0stackとは自作クラウド基盤です。

github.com

これは「ちゃんと動くプライベートクラウド基盤を作る」ことを目指しています。 ちゃんと動くことの具体例としては、

  • APIのレスポンスに待たされない
    • OpenStackはmemcachedを入れないと使い物にならないほど遅く、入れても遅いなぁと思う程度に遅い
  • 基盤自体の構築が簡単
    • OpenStackはPackStackなどのオーケストレータを使わないと構築が難しい
  • ソースコードが読みやすい
    • OpenStackは多くの機能を持っているため便利な反面、ソースコードが多いためビルドが遅くデバッグが大変
    • Kubernetesは抽象化が強く、ある interface{} を何が実装しているのかわからないことが多い
  • 内部APIを作らない
  • VM管理だけではなくアプリケーション開発のプラットフォームにする
    • OpenStackはVMがいい感じにたつ以上の機能をなかなか実現できていない
    • KubernetesはOperatorなどの登場などのにより様々なミドルウェアを利用することができ、便利

という感じです。 特にこれといった新規性があるわけではないですが、これらを実現することは広い知見と深い技術力が必要だと感じていて、結構楽しいです。

これらの目的を満たすために以下のような要素技術を利用しています。

  • Golang
    • シングルバイナリでデプロイが簡単
    • 型付きでコードジャンプが便利
  • gRPC
    • API定義が明確
  • etcd
    • リレーションがないためAPI間が疎結合になる
    • 強い一貫性
    • MQよりも管理やデプロイが簡単
  • リソース志向 + RPC
    • Kubernetesはリソース志向のCRDだが、ステートフルなものを管理するのは難しいため

また、n0stackは様々な構成で動くようなアプリケーションにするつもりはありません。 というのも、OpenStackやKubernetesは確かに多くの機能が実装されているため、様々な環境で動かすことができます。 しかし、多くの機能を実装しているということは多くのバグを抱えやすいということです。 特にクラウド基盤は結合した時にバグるということが多く、結局安定の構成 + アプライアンスのサポートで何とかするみたいなことが多いです。 ならば、初めから多くの機能を一つのアプリケーションで実装することをあきらめ、クラウド基盤を自分で実装できるように支援するようなものを作りこんだほうがいいのではないかと考え始めました。 言い換えれば、ウェブアプリケーションフレームワークならぬクラウド基盤フレームワークを作るということです。 こうすることで、VM管理基盤を自作していた時代のように開発の難しさに頭を悩ませることなく、OpenStackのように長いコンフィグを読み解く必要もなく、ソースコードリーディングは簡単にできるといったメリットが考えられます。

今後の予定

自分の文章が拙いことが最近の悩みなので、その練習がてらやったことをブログに書いていく予定です。

ついでに開発風景をyoutube配信とかもしてみています。 いろんな方とコミュニケーションをとれると面白そうですし、他人の作業風景を見てみたいといわれることが多いのでちょっと流してみてます。 面倒になったら適当にやめると思います。

www.youtube.com

現在 v1alpha by h-otter · Pull Request #232 · n0stack/n0stack · GitHub でブレーキングチェンジ中なので使ってみることはお勧めしませんが、作業が進んでいくのを見守ったりコメントをいただければ嬉しいです。 これからn0stackをよろしくお願いします。