新しいopenshiftのしくみを調べてみた
DESCRIPTION
第22回 PaaS勉強会で発表した資料ですTRANSCRIPT
新しいOpenShiftのしくみを調べてみた第22回PaaS勉強会
@jacopen Kazuto Kusama
PaaSNTT CommunicationsCloudn
Based on
2012/06/21 第7回 Cloud Foundry輪読会
http://www.slideshare.net/jacopen/openshift-13407714
2013/08/23 第13回 Cloud Foundry輪読会
http://www.slideshare.net/jacopen/open-shift-25522848
日本で一番最初にOpenShiftの 勉強会をやったのは、
Cloud Foundry輪読会!
クラウドファウンドリーとオープンシフトゎ……
ズッ友だょ……!!
Kubernetes
Kubernetes
• Googleが開発したコンテナ管理ツール • 複数ホストに渡るコンテナの管理ができる • PaaSではなく、あくまでもScheduler
Software Design 2014年12月号にKubernetesの記事かきました
PaaSはデベロッパーのワークフローを助ける
Kubernetesには… • 書いたコードをDockerイメージにする仕組みが無い • チームコラボレーションの機能が無い。そもそも複数ユーザーで使えない
• ログ収集の機能が弱い • メトリクス収集機能が弱い
あくまでもSchedulerであり、PaaSではない。弱いところをカバーしたPaaSがあればいいのにな。
第20回の懇親会で
某氏「そういえば新しいOpenShiftは試しました?あれ、かなりKubernetesですよ」
ぼく「え、マジっすか。じゃあ次回やります」
というわけでやります
新しいOpenShift
!? V4 → V3?
OpenShift Origin Release 4
2.x Architecture https://github.com/openshift/origin-server
OPENSHIFT v3
OpenShift v3 Platform
• OpenShiftの3代目アーキテクチャ
• Docker, Kubernetes, Atomicを取り込んだ、まったく新しいアーキテクチャになった
• これまでのOriginとは別リポジトリで開発されている
• Golang!
https://github.com/openshift/origin
まだまだalpha
動かしてみよう
セットアップ
$ hack/build-go.sh #goの実行環境が必要
ソースからビルド
$ wget https://github.com/openshift/origin/releases/download/v0.1/openshift-origin-v0.1-deef796-linux-amd64.tar.gz
precompile済バイナリのダウンロード
or
セットアップ
$ openshift start
起動
これだけで、OpenShift / Kubernetes / etcdなど必要なものが全て立ち上がります。(バイナリ1個なのに・・・)
セットアップ
$ export OPENSHIFT_DEV_CLUSTER=true$ vagrant up
Vagrantを使う手も
DEMO
OpenShiftコマンド
今の所、openshiftのバイナリ1つでサーバーにもクライアントにもなる。
$ openshift start [master|node] #サーバーが起動する$ openshift kube #Kubernetesのkubecfg
かなりKubernetes
Kubernetesの構成
Proxy
docker
Kubelet
Container ContainerContainer
pod pod pod
Kubernetes Node (Minion)Kubernetes Master
API Server
Scheduler
Kube Controller
Replication Controller
etcd
OpenShiftの構成
Proxy
docker
Kubelet
Container ContainerContainer
pod pod pod
Kubernetes Node (Minion)Kubernetes Master
API Server
Scheduler
Kube Controller
Replication Controller
etcdOpenShift Master
API Server
Deployment Controller
Build Controller Kubernetes masterを
OpenShift masterがラップ
API(抜粋)
OpenShift API http://localhost:8080/osapi/v1beta1/builds http://localhost:8080/osapi/v1beta1/deployments http://localhost:8080/osapi/v1beta1/routes http://localhost:8080/osapi/v1beta1/projects http://localhost:8080/osapi/v1beta1/users http://localhost:8080/osapi/v1beta1/accessTokens
Kubernetes API http://localhost:8080/api/v1beta2/pods http://localhost:8080/api/v1beta2/services http://localhost:8080/api/v1beta2/replicationControllers
DEMO
概念
Kubernetesの概念はそのまま残ります
• Pod • Service • ReplicationController
概念
OpenShiftによって追加されるもの
• Build • Template • Deployment • Route • Project • User • Image/ImageRepository
全部解説すると時間がかかりすぎるので
Request Routing
Kubernetes (Scheduler)
Router Router State API
Router State
URLに応じて、振り先のコンテナを変えるリクエストルータ。ステートの追加・削除・変更を行うAPIも。
Image build
Kubernetes (Scheduler)
Router Router State API
Router State
Source Repo API Git Repositories
Image Builds Image Reposigories
2.xと同じように、Gitによるデプロイが可能。
コードからDocker Imageを作成(Image build)
Docker repository
Kubernetes (Scheduler)
Router Router State API
Router State
Source Repo API Git Repositories
Image Builds Image Reposigories
生成されたDocker Imageは、内部のDocker Repositoryに保存される。作ったイメージを公開もできるらしい
Multi tenancy
Kubernetes (Scheduler)
Router Router State API
Router State
Source Repo API Git Repositories
Image Builds Image Reposigories
複数ユーザーで使える機能(PaaSなので必須だよね!)
Account(User?),Project,Rolesなどの概念を持つ
Account Project
Role
Event
Kubernetes (Scheduler)
Router Router State API
Router State
Source Repo API Git Repositories
Image Builds Image Reposigories
クラスタ内の様々なイベント(ホストに繋がらない、ルータのエラー、nodeの削除等々)を収集。Policy Engineでアクションの規定などができる
Account Project
Role
Event aggregator API Event Bus
Policy Engine
Logging / Metrics
Kubernetes (Scheduler)
Router Router State API
Router State
Source Repo API Git Repositories
Image Builds Image Reposigories
コンテナのログ収集や、リソースのメトリクス収集の仕組みもできるようだ(journaldを使う)
Account Project
Role
Event aggregator API Event Bus
Policy EngineLogging
Resouce Usage Metrics Application Metrics
2.xのカートリッジはどうなるの?
OpenShift on OpenShift
OpenShiftで必要なコンポーネントは、OpenShiftと同じインフラで動き、管理される。Kubernetesが管理するコンテナとして各コンポーネントが動作する
⇒ PaaSを運用している身からすると、すごくいい考えだと思う。PaaSを提供するためのコンポーネント運用は結構大変
まとめ• OpenShift v3は、まだま始まったばかり。すぐに使えるというものではない
• Kubernetesをコアに据えるなど、上手くDockerの流れに乗ろうとしているなという印象
• Flynn や Deisと比べて、出来ることはあまり変わらないが、開発力が圧倒的なので最有力候補か?
• まだモノが出来上がっていなくて消化不良なので、継続して追っていきたい