この記事は Classi Advent Calendar 2016 - Qiita 7日目の記事です。前日はkitaharamikiyaによるFabric Beta によるテストアプリの配信 - Qiita でした。
12月3日に builderscon - Discover Something New に行ってきました。そこでkubernetesをAWS上で動かすという紹介をやっていたので、自分でも試しに触ってみました。と言ってもほとんどチュートリアルをやっただけです。事前にお断りしますがこれがClassiのサービスに入るわけではありません。ただこういう素振りは手を動かしてこそ身になります。
なおバージョンは0.9.1です。
完成図
チュートリアルを進めた結果ざっくりとこんな感じのものができました。
ローカル環境から kube-aws validate --s3-uri=<S3URL>
と実行すると、事前に作成したS3へ設定ファイルがアップされました。その後、 kube-aws up --s3-uri=<S3URL>
を実行するとCloudFormation経由で図に書いてあるRoute53へ登録を行ったり、VPC作成、ELBなどの設定が行われて、kubernetesを使う準備ができます。
それぞれを複数台,MultiAZになっているので、仮にどちらかのサーバがダウンしてもAutoScaleが働いて別サーバが立ち上がる構成になってます。実際のプロダクション環境の場合は多重障害を懸念するのと、サーバ負荷の関係でNodeサーバは3台以上立ち上げる構成にすると思います。実際にサンプルアプリを配置すると各NodeにそれぞれDockerがビルドされました。
この絵を手で書いてるときに思ったのがこちら。MongoDBと似てるとなるとお金かかりそうな気がする。
AWS上にkubernetesを作っていたらどこかでみた構成だなーとおもったらMongoDBに似てる気がした。masterがmongosで etcdがmongocでnodeがmongod
— Eiji Hachiya (@hachi_eiji) 2016年12月4日
普通にプロビジョニングをするのか、Dockerなどでインフラもアプリもまとめるのかはサービス次第なのですが自分はアプリケーションサーバなど頻繁に変わるものはDockerにしたいタイプです(Amazon LinuxのDocker Imageもできましたし)。可能な限りベンダーロックインは避けたいのでECSもなぁという気持ちはあります。
まだきちんと調べきれてない/触れていないところ
- 上の図では書いてますが、controllerとetcdの通信経路。(AZをまたいで通信してるのか?)
- 不要になったDocker Imageを廃棄する方法
明日は
未定らしいです。なければ frontrend 勉強会に行ってきた記事でも書きます