PaaS をどう使い分けるのか?
最近、Cloud Foundry(CF) と Kubernetes(k8s) に注目しており、PaaS や CaaS などと言われたりして、実際、何が異なるのかを整理する必要があると感じました。 正直、エンジニアとしては名称などどうでもよくて、これらのツールをどう使い分けたら機能するのかというところに興味があるわけです。
そんな中、CF,k8s の両方のコミッターだった KarlKFI さんがStack Over Flow で答えていた内容が参考になったため、翻訳と自分なりの整理を試みたいと思います。
*そもそも CF, k8s がわからんぞという方は、 CF: jakopenさんのスライド
k8s: コンテナ管理システム「Kubernetes」について調べてみました
を参考にされてみてください。
Cloud Foundry vs Kubernetes
CF では Application PaaS, k8s は Container PaaS (あるいは CaaS) と呼べるでしょう。 CF では内部的にコンテナが使いますが、それをユーザには意識させません。そして、アプリケーション開発に主眼を置いているため、ビルドパックやOrg, Spaceによるユーザごとのアプリケーション管理が可能です。
一方で、k8s はアプリごとコンテナ数やDockerファイルから直接コンテナを作る機能などのように、k8s上のコンテナに直接影響を与えるような設定をユーザが設定できるようにしています。
しかし、これらの境目は技術的な流行りによって変わりつつあるところで、
- CF が Docker Image を実行できるようになる(かも) Lattice accepts Docker images
- Kubernetes が Docker Image を生成できる機能を追加する(かも) Open Shift また、k8s を生み出した Google も CFのgold sponserになる など、これからの動向は予想できません。
細かい箇所で異なる点では、 k8s:
- コンテナの集合であるPod(仮想NICを共有する)自体をスケールすることができる
- コンテナのイメージを直接デプロイできる
- OSSのコミュニティが CF より大きく活発 (訳注:これは指標がわかりません。githubのコミッターは CF の方が多いです CF k8s)
- 拡張性が高く、3rdパーティーのプラグインなどを追加できる
- Web GUI もある
CF:
- 認証機能が成熟しており、ユーザのグループ分けなどがサポートされている(Org, Space, Role などを設定)
- 開発したアプリ(php, node.js, python,… のフレームワークを使ったものなど) をデプロイできる
- ロードバランシングの機構が含まれている(k8sも実装が進んでいる)
- bosh で k8s と同じようにコンテナのオーケストレーション(デプロイやライフサイクルの監視)が行われている
- ログやメトリクス(グラフ描画するためのデータ)の集積が行いやすい
- Web GUI は エンタープライズから提供されることが多い
CF bosh vs k8s
CF と k8s を比較すると上のような話になりますが、実は CF には bosh と呼ばれるオーケストレーションツール上で動作させるため、この bosh と k8s を比較したほうが技術的には妥当な感じがします。
bosh は CF の App だけではなく、様々なコンポーネントの面倒も見ています。また、多種類のIaaS(例:OpenStack, VMWareやvSphereなどなど)上で動作できます。 ただし、boshのコミッターである KarlKFI も「悪夢のように使い方が難しい」 ツールとなっているようです。
一方で、k8s 自体をデプロイする際の抽象化はまだまだ甘いところがありますが、改善はされているようです。 例えば、k8s をDC/OS 上にワン・コマンドで展開する機能が実装されたりしているようです。
結局、どう使い分けるの?
プラットフォームを構築する側からすれば、技術的に似た(コンテナのオーケストレーション)ことを行うため、構築する難しさは乗せるIaaS層やネットワーク、社内の事情によって変化するでしょう。 そのため、目を向けるべきは 誰がPaaSを使うのか? ということです。例えば、簡単なアプリを新規に作ってサクッと公開したいという場合に、Docker Image を用意して、コンテナの設定を行って、…という k8s より CF の方が向いているでしょうし、反対に複雑で大規模な構成のシステムや昔作った秘伝のタレ的なDocker Imageをリリースして、コンテナの調整をしてしまいたいという場合には、k8s の方が向いているでしょう。
もちろん、いつどのような機能がそれぞれのプラットフォームに追加されるのかがわからないため、常に動向を調べる必要がありますが、PaaSを使う人の目線で考えるというのは欠かせない点かなと思いました。