6. RED HAT ENTERPRISE LINUX 76
ブラウザ
CLI
etcd
web UI
scheduler
controller
API server
kublet
openshift sdn
docker service
OpenShift v3 主要コンポーネント
OpenShift Master
OpenShift Node
OpenShift CLI
7. RED HAT ENTERPRISE LINUX 77
ブラウザ
CLI
etcd
web UI
scheduler
controller
API server
kublet
open-vswitch + atomic-openshift-sdn-ovs
OpenShift v3 コンポーネント (パッケージ単位)
atomic-openshift-node
atomic-openshift-master (master)
atomic-openshift-clients
docker
8. RED HAT ENTERPRISE LINUX 78
ブラウザ
CLI
etcd
web UI
scheduler
controller
API server
kublet
openshift sdn
① コンテナデプロイ要求
② スケジューリング
…/nodeX.example.com/リソース情報
③ API アップデート
④アップデート情報の監視
⑤コンテナ(Pod)デプロイ
OpenShift v3 デプロイフロー概略
docker service
9. RED HAT ENTERPRISE LINUX 79
Open Shift v3 主要コンポーネント (Master)
OpenShift Master
l?? サービス名: atomic-openshift-master
l?? APIサーバーを公開し、Nodeの管理とpodのスケジューリン
グを行うホスト
l?? etcdサーバーで、各NodeのPodやNetwork情報を保持
l?? v3.1からは、MasterサーバーをActive-Active構成でHAを組む
ことが可能
10. RED HAT ENTERPRISE LINUX 710
Open Shift v3 主要コンポーネント (Node)
OpenShift Node
l?? サービス名: atomic-openshift-node
l?? コンテナのランタイム環境を提供するホスト
l?? 内包されているkubeletが、Master上のAPI「/registry/hosts/<
ノードホスト名>」を監視し、更新があればコンテナ(Pod)や
リソースの更新を行う
OpenShift SDN
l?? atomic-openshift-node サービスの一部として機能する
l?? Open vSwitchを使ったSDNを実現し、別ホスト上のコンテナ
に同一ホスト上のコンテナかのようにアクセスを可能にする
11. RED HAT ENTERPRISE LINUX 711
Open Shift v3 主要コンポーネント (Client)
$ openshift コマンド
l?? 管理者用コマンド
l?? Master、Nodeの起動時にsystemdから呼び出されるのみで、基本
的には利用しない
$ oadm コマンド
l?? 管理者用コマンド
l?? Nodeの管理、証明書の生成、OpenShift上のHAProxyルーター、
Docker reigstryをデプロイする際に利用
$ oc コマンド (Web コンソール)
l?? 一般ユーザー(OpenShift利用者)が使用するコマンド
l?? Masterが公開しているAPIにアクセスする
14. RED HAT ENTERPRISE LINUX 714
デプロイのコンセプト - Pod
l?? Pod は、OpenShiftでアプリケーションをデプロイするための最小単位
l?? 1つのPodは、1つ以上のコンテナを含む
l?? Pod内のコンテナは、ネットワークや永続化ボリューム、PID等を共有する
l?? 複数のコンテナをまとめて、1つの“論理的なOS環境”を作る単位がPodである
pod pod
15. RED HAT ENTERPRISE LINUX 715
デプロイのコンセプト - Replication Controller
API server
pod
…
Replication Controller
pod pod pod
l?? Repllication Controller は、指定した数のPodが起動している状態を保持する
l?? scale(Podの起動数)=1とすれば、1つのPodが起動している状態を保持し、
scale=5とすれば、5つのPodが起動している状態を保持する
pod
16. RED HAT ENTERPRISE LINUX 716
デプロイのコンセプト - Service
API server
podpod pod pod pod
l?? 同一PodにVirtual IPを持たせたアクセスポイント
l?? バックエンドのPodに対してロードバランサ(ラウンドロビン)の役割を担う
l?? Replication Controllerで増加させたPodもServiceによって、均一なアクセスが可能
service
Pod
JBoss
MySQL
MySQL
MySQL
MySQL
MySQL
例: JBoss(scale=1) x MySQL(scale=5)
17. RED HAT ENTERPRISE LINUX 717
OpenShift v3 の「リソース」について
l?? クライアントからNodeへの命令は、Masterに対しJSON形式の「リソース」として、生成/
編集/削除を要求
l?? 要求された「リソース」は、MasterのAPIサーバーを通して公開され、NodeはAPIを通じ
て自分のNodeのコンテナを管理する
l?? クライアントからは $ oc get <リソースName> で、 リソース状況の確認が可能
Name (省略形)
機能/役割
Pod (po)
アプリケーションをデプロイするための最小単位。1つ以上のコンテナの
集合
Replication Controller (rc)
起動しているpod数を制御する
Service (svc)
同一podの集合に Virtual IP を保持させたアクセスポイント
Deployment Config (dc)
デプロイの設定
Build Config (bc)
ビルドの設定
ImageStream (is) イメージ管理。ImageStreamTag(istag)のセット。istagを使ってDocker
Registry内のイメージ、または別のistagへの参照を保持する
Route (route)
外部ネットワークから各サービスにアクセスするためのURL情報を管理
主な「リソース」の例
22. RED HAT ENTERPRISE LINUX 722
ネットワーク(Pod内アプリケーションからの経路)
Pod Pod??? PodPod ???
①
lb0
tun0
②③
eth0 (physical) vxlan vxlan eth0 (physical)
tun0
lb0
① 同一ホスト内のPodへの通信
l?? Docker ブリッジ(lb0)を経由してアクセス
② 別ホスト上のPodへの通信
l?? vxlanデバイスを経由したOverlayネットワークを通してアクセス
③ 外部ネットワークへの通信
l?? tun0デバイスからNATし、物理NICを経由してアクセス
10.1.1.210.1.1.1
10.1.2.1 10.1.2.2
10.1.0.0/16 (のように見える)
veth
eth0 eth0
veth
10.1.1.0/24 10.1.2.0/24
23. RED HAT ENTERPRISE LINUX 723
OpenShift SDN の主な役割
Pod
Project A
Pod??? PodPod
Project B
???
lb0
tun0
③
eth0 (physical) vxlan vxlan eth0 (physical)
tun0
lb0
10.1.1.0/24 10.1.2.0/24
① 各種ネットワークデバイス(vxlan0/tun0/lbr0)の生成
l?? OpenShift Node 起動時に生成
② podが利用するサブネットアドレスの登録
l?? 各Nodeが初回起動時に割り当てられたサブネットを受信し、Open vSwitch によりネットワ
ークフローを管理
③ (内部ネットワークを使った)別プロジェクトのpodへのアクセス制御 ※v3.1からPluginを利用して可能
①
②
10.1.1.1 10.1.2.1
24. RED HAT ENTERPRISE LINUX 724
ネットワーク(外部ネットワークからのアクセス)
HA Proxy
(Pod) Pod??? PodHA Proxy
(Pod)
???
192.168.133.1:80
192.168.133.2
*.apps.example.com 192.168.133.1
192.168.133.2
① DNSラウンドロビン
② 各Podへの振り分け
192.168.133.1
192.168.133.2:80
l?? 外部ネットワークからPodへのアクセスは、NodeにデプロイしたHA Proxyルーター
(Pod)を経由する
25. RED HAT ENTERPRISE LINUX 725
ネットワーク(routeリソースによる経路の追加)
HA Proxy
(Pod) Pod???
③ HA Proxyルータの更新 (reload)
Pod
② Master API 監視
① Route の生成 (oc expose コマンド)
oc expose hostname=hello.apps.example.com svc jboss
[補足] Apache の graceful と同様に haproxy reload で、
シームレスに設定の更新を行う、
backend be_http_demo_hello-app RETURN)
…
server 10.1.0.4:8080 10.1.0.4:8080 cookie 10.1.0.4:8080
(haproxy.config)
hello.apps.example.com be_http_demo_hello-app
(os_http_be.map)
27. RED HAT ENTERPRISE LINUX 727
l?? 実行環境、MW はDockerイメージとして registry.redhat.com から提供
l?? 利用(デプロイ)方法は以下の2通り
(ビルド不要な)ミドルウェアイメージの場合:
l?? 例: データベースイメージ、Jenkinsイメージ
l?? 提供された Docker イメージをそのままデプロイ
アプリケーション実行環境イメージの場合:
l?? 例: 各種アプリケーション実行環境/MW
l?? 利用者のアプリケーションソースコードを、OpenShiftで提供されている
Builderイメージにバインド(再ビルド)してデプロイ
l?? Builderイメージを使ったビルドフレームワークはS2I (= Source to
Image)と呼ばれる
実行環境/ミドルウェア
28. RED HAT ENTERPRISE LINUX 728
???
Node
DeploymentConfig
(ビルド不要な)ミドルウェアイメージのデプロイ
① DeploymentConfigの作成
l?? Masterサーバーに、DeploymentConfig(コンテナイメージのデプロイ設定)を作成リクエ
スト
② Nodeへのコンテナデプロイ
l?? DeploymentConfigの設定に基づいて、NodeホストがDockerイメージをデプロイ
①
②
デプロイ用イメージ
30. RED HAT ENTERPRISE LINUX 730
Node
アプリケーションイメージのデプロイ(1)
① BuildConfigの生成とビルドの開始
l?? Masterサーバーに、BuildConfig(コンテナイメージのビルド設定)の生成リクエスト
② ③ Builderイメージによるアプリケーションのビルド
l?? BuildConfigを元に、ソースコードをgit cloneし、Builderイメージ上でビルド
l?? 利用者のソースコードと実行環境をバインドしたイメージを生成
DeploymentConfigBuildConfig
①
②
③
④
⑤
Builderイメージ
デプロイ用イメージ
OpenShift内部レジストリ
31. RED HAT ENTERPRISE LINUX 731
Node
アプリケーションイメージのデプロイ(2)
④ 生成されたイメージをDockerレジストリにPush
l?? OpenShift上にDockerレジストリにPushする。Docker registryはPodとして予めデプロ
イしておく
⑤ DeploymentConfigによるイメージのデプロイ
l?? ビルド不要なイメージのデプロイ時と同様。利用するイメージが④でPushされたイメージ
になる点が異なる
DeploymentConfigBuildConfig
①
②
③
④
⑤
Builderイメージ
デプロイ用イメージ
OpenShift内部レジストリ
34. RED HAT ENTERPRISE LINUX 734
ImageStream
BuildConfig
Build
Look for
builder image
New
Builder
container
S2I Build
Process
DeploymentConfig
Service
Deployer container
IP tables
Replication Controller
Pod
oc new-app https://
Resources
Buildprocess
Container
ImageStream
Tag
[補足] Background of oc new-app <git repo>