Update 2014-10-02
: Kubernetes on CoreOS with Fleet and flannel on IDCFクラウド - Part7: flannel版GuestBookUpdate 2014-09-27
: Kubernetes on CoreOS with Fleet and flannel on IDCFクラウド - Part6: Rudder renamed to flannelUpdate 2014-09-22
: Kubernetes on CoreOS with Fleet and Rudder on IDCFクラウド - Part5: FleetとRudderで再作成するUpdate 2014-09-05
: Kubernetes in CoreOS with Rudder on IDCFクラウド - Part4: GuestBook exampleUpdate 2014-09-04
: Kubernetes in CoreOS with Rudder on IDCFクラウド - Part3: RudderでSDN風なこと
グーグルが自社データセンターをオープンソース化した方法とその理由という記事を読みました。Docker管理の側面から見ていたのですが「Dockerアプリケーションの運用も可能になる」が正しく、KubernetesからGoogleのデータセンターとアプリ開発、管理の秘密を垣間見る価値の大きさをあらためて感じます。
GoogleのCraig McLuckieさんが、以下のように言っています。
我々が社内で得ているのと同じ恩恵を顧客にも得てほしい、と思っています。Kubernetesを使って、我々が社内で使うのと似たようなポータブルで無駄の無いオープンソース・システムで、アプリケーションを作成、管理に役立てて欲しい
スタンドアロンのCoreOSにKubernetesをマニュアルインストールできた程度なのですが先に進みません。
Kubernetesの中で、SaltとCoreOSとMesosとの関係が混乱してきたので自分なりに整理しようと思います。
Googleのオープンソースへの関わり方に興味が尽きません。
Kubernetes configured using Salt
Saltの役割は予めIaaSに作成したインスタンスに対して、Kubernetesの構成管理を行うことです。
クラスタ構築のシェルスクリプトには、IaaSごとのCLI実行とsalt-bootstrapの設定、Saltによる構成管理がまとめてあります。
- IaaSのCLIでインスタンスを作成
- インスタンス起動時に
salt-bootstrap
が実行されSalt master/minionのインストール - SaltでKubernetesクラスタの構成管理
たとえば、Azureのデプロイスクリプトの場合、インスタンス作成はsalt-cloudではなく、シェルスクリプトからazure vm create
コマンドの-d
オプションを使いsalt-bootstrap
をcustom-dataとして渡しています。
Kubernetes on CoreOS
CoreOS上にKubernetesクラスタの構成管理とスケジュール管理を行います。
今のところkubeletなどの管理サービスは直接OSにインストールされるので、管理サービスもコンテナとしてfleetで管理できるメリットもあります。
IaaS毎にKubernetesクラスタを構築するまでの方法は異なるので、IaaS上にCoreOSクラスタにネットワークも含めて抽象化して、Kubernetesを動かすのは合理的だと思います。
Rudderというツールで、CoreOSのKubernetesへの貢献もでてきましたが、フットワークの軽さと技術力の高さが見えます。
systemdにfleetの要素が追加されますが、ここはがんばって理解しようと思います。master.ymlくらいのcloud-configは自分でも書けるようにならないと。
Podとコンテナのスケジュール管理はfleetでなくKubernetesが行います。fleetは低レベルなため粒度を細かくしたコンテナの管理を直接表現するのは難しい感じがするので、Kubernetesに任せるの良いと思います。スケジュール管理以外にもプロキシーにVulcandを使うよりよい気もします。
fleetの抽象化のため、CoreOS上にPanamaxやDeisでコンテナ管理をするのも良い案です。
Kubernetes on Meeos
MesosphereにはDatacenter-as-a-ComputerというGoogleに影響を受けた壮大な考えがあります。
データセンター全体を大きなリソースプールとして、KubernetesもSparkやHadoopなどと同様にリソースを共有して使いたい場合に、Mesosは最適です。
Mesos自体はクラスタ全体の最適なリソース管理を行うため、これまでDockerのスケジュールはMarathonが行っていました。今回の提携により、Dockerの場合はMarathonがKubernetesに置き換わるのでしょうか。
Mesosのアーキテクチャは理想的ですが、現実としてSparkとHadoopとDockerを共存させるほどの巨大なプールが必要になっていないので様子見します。
まとめ
今後の学習方針をまとめました。
- Kubernetesインスタンスは、IaaSが提供するCLIを活用してデプロイする、salt-cloudは使わない
- インスタンスはCoreOSを使い、Kubernetes構成管理はcloud-configを使う
- 1と2はシェルスクリプトでまとめ、Kubernetes構築を自動化する
- コンテナのスケジュール管理はKubernetesを使う
- CoreOSでKubernetesの構築ができたら、その他LinuxOSへSaltを使いKubernetesの構成管理をする(3,4を行う)
いずれにせよ、Kubernetesから目が離せないです。