dockerとkubernetesが作る未来
DESCRIPTION
EnterpriseOSSの勉強会で発表した資料ですTRANSCRIPT
Dockerと
Kubernetesが作る未来
PaaS勉強会 主宰
Kazuto Kusama @jacopen
Kazuto Kusama @jacopen
Enlightened L11
#DARSANA
PaaS勉強会
Cloud FoundryやOpenShift、その他様々なPaaSをテーマにした勉強会
PaaS勉強会
第23回 PaaS勉強会@蒲田 12/19 19:00~
http://paas.connpass.com/event/10059/
Docker、便利ですよね
お前それProduction環境でも 同じこと言えんの?
たとえば
1つのコンテナを上げるだけなら簡単
たとえば
1つのコンテナ内で複数のサービスを上げることは好ましくない
たとえば
サービスごとにコンテナを立ち上げる
たとえば
コンテナ間のネットワークはどうしよう・・・?
たとえば
ホストが異なった場合はどうしよう・・・
たとえば
たくさんのホストに、たくさんの コンテナを作る場合、どうしよう
たとえば
Dockerホストが障害でダウンしたらどうしよう
現在のDockerは、運用を 考えると足りないモノが多い
解決方法はある• シングルホストのネットワークは、Dockerの
Link機能で・・・ • マルチホストはAmbassadorパターンで・・・ • コンテナの管理はfigを・・・ • コンテナの監視はsensuで・・・ • 以下略
出来るけどやっぱり面倒
• 試験環境や開発環境なら、それでもいい
• Production環境でそれをやれるかどうか? 運用はどうする?
技術的にやれるかどうかと 運用出来るかどうかは別
そこで Kubernetes
これから話す、3つのポイント• Kubernetesとは何か
• 実際どんな感じに使えるのか
• Kubernetesと、どう関わっていくか
Kubernetesとは
Kubernetesとは• Googleが公開した、コンテナ管理のツール
• 複数のホストにまたがるコンテナの管理
• 長いのでk8sって略されることが多い
Kubernetesで実現できること✓ 複数ホストにコンテナを展開
✓ 関連するコンテナごとにグルーピング
✓ コンテナの死活監視
✓ コンテナ間のネットワーク
✓ コンテナの負荷分散
様々なベンダーが支持を表明• Docker
• Microsoft
• IBM
• Red Hat
• CoreOS
いろんな環境で使えます• Google Compute Engine • Microsoft Azure • AWS • Azure • CoreOS • vSphere • Vagrant
実際に使ってみよう
Master Minion
2つの役割
管理するやつ コンテナ動かすやつ
それぞれVM もしくは ベアメタル
Master
Minion
実験環境
Minion
Minion Minion
Master
Minion
MasterのAPIを クライアントツールで叩く
Minion
Minion Minion
API
client
$ ./cluster/kubecfg.sh -p 8080:80 run dockerfile/nginx 2 myNginx
Master
Minion
Replication Controllerが 複数ホストのコンテナを監視
Minion
Minion Minion
API
Replication Controller
$ ./cluster/kubecfg.sh resize myNginx 3
Master
Minion Minion
Minion Minion
API
Replication Controller
Master
Minion Minion
Minion Minion
API
Replication Controller
コンテナの数が減ったら 自動で立ち上げる
正確には「Pod」単位で管理
コンテナ
コンテナ
Pod
$ ./cluster/kubecfg.sh -c service.json create services
{ "id": "frontend", "kind": "Service", "apiVersion": "v1beta1", "port": 8000, "containerPort": 80, "selector": { "name": "nginx" }, "labels": { "name": "frontend" }}
ServiceL3のロードバランサーみたいなもの。
左のjsonを使ってserviceを構築すると、port8000へのアクセスを、nginx podのport80へ転送する
Minion Minion
Service
tcp:8000
tcp:80tcp:80
redis-masterredisslave redisslave
frontend frontend frontend
Frontend Replication Controller
Redis Slave Replication Controller
Redis Slave service Redis master service
Frontend service
Kubernetesを使うことで✓ 複数ホストにコンテナを簡単に展開できる
✓ Replication Controllerが、常にコンテナの 状態をみてくれる
✓ Servicesで、複数コンテナへアクセスを分配出来る
✓ これらを、物理ホストを意識すること無く 展開出来る
Kubernetesとどう関わっていくべきか
これでDockerをProductionに
Productionで使えるんですか! もうマルチホストいけるんですか!
まだベータです
ベータじゃないすか!
それでも使ってみたい!という人は
自前でKubernetesを組む• Githubで公開されているので、それを使って自前の環境に構築する
https://github.com/GoogleCloudPlatform/kubernetes
Software Design2014年12月号で
k8sの使い方を書きました
Kubernetesを構築してくれるサービスを使う• Google Container Engine (GKE)
• 他にもいっぱい出てくるはず • vSphereとか
• Azureとか
Kubernetesを内部に持つ サービスを使う
• OpenShift v3
• Red Hatが開発しているPaaS
• 次期バージョン v3 からDocker対応
内部のコンテナ管理にKubernetesを利用
KubernetesはPaaSじゃない?
PaaSにはいろいろな定義がありますが・・・
Webサービスの開発ライフサイクルを支援
をPaaSと定義すると
•ユーザー管理 / 認証・認可
•コードのバージョン管理
•コードからのデプロイ
•ロギング
•アプリケーションのメトリクス取得
•コンテナの管理
•コンテナの実行
Dockerと
Kubernetesが作る未来
未来が分かるなら苦労しない
• 10年前は、こんなにスマホが普及するなんて想像していなかった
• 6年前、こんなにクラウドが当たり前になるなんて想像していなかった
• 2年前、こんなにコンテナ技術が流行るなんて想像していなかった
PaaSを切り口に考えてみると
第1世代のPaaS
• 2007年~2010ごろまで
• プロプライエタリ
• 決め打ちの言語・フレームワーク・DB
第2世代のPaaS
• 2011年~
• プロプライエタリ / オープン
• 様々な言語・フレームワーク・DB
• 仮想化技術をフル活用
第3世代のPaaS
• 2014年~
• コンテナネイティブ
• どの環境でも、同じものが使える
• より早く、より柔軟に、よりオープンに
• 第3世代のPaaSを実現していくために最も重要なパーツがDocker
• GAE、Azure、ElasticBeanstalk、OpenShift、Cloud Foundryなど、多くのPaaSがDocker対応を表明。
• IaaSもDocker対応を謳うところが増えている
• Kubernetesは、それらを支える土台になるかもしれない
でも、未来はどうなるか分からない
12月4日 Dockerがマルチホストのコンテナ環境構築/管理を行うツールを発表
12月1日 CoreOSが独自のコンテナ実行基盤Rocketを発表
参考情報
Kuberneteshttps://github.com/GoogleCloudPlatform/kubernetes/
Kubernetes Advent Calendar
Rockethttps://github.com/coreos/rocket
Docker swarmhttps://github.com/docker/swarm
http://paas.connpass.com/event/10059/第23回 PaaS勉強会
http://qiita.com/advent-calendar/2014/kubernetes