open shift v3 主要機能と内部構造のご紹介
TRANSCRIPT
![Page 1: Open Shift v3 主要機能と内部構造のご紹介](https://reader031.vdocuments.pub/reader031/viewer/2022020301/58719a151a28ab044e8b57f1/html5/thumbnails/1.jpg)
OpenShift v3主要機能と内部構造のご紹介
レッドハット株式会社
中井悦司 / Etsuji NakaiSenior Solution Architect
and Cloud Evangelist
v1.1 2016/01/29
![Page 2: Open Shift v3 主要機能と内部構造のご紹介](https://reader031.vdocuments.pub/reader031/viewer/2022020301/58719a151a28ab044e8b57f1/html5/thumbnails/2.jpg)
2
OpenShift v3主要機能と内部構造のご紹介
Contents
Dockerが生まれた背景 OpenShiftの主要機能 OpenShiftのイメージ管理機能 アプリケーションのデプロイ方法 参考資料
![Page 3: Open Shift v3 主要機能と内部構造のご紹介](https://reader031.vdocuments.pub/reader031/viewer/2022020301/58719a151a28ab044e8b57f1/html5/thumbnails/3.jpg)
Dockerが生まれた背景
![Page 4: Open Shift v3 主要機能と内部構造のご紹介](https://reader031.vdocuments.pub/reader031/viewer/2022020301/58719a151a28ab044e8b57f1/html5/thumbnails/4.jpg)
4
OpenShift v3主要機能と内部構造のご紹介
クラウドサービスとしてのPaaS環境の課題
PaaSのメリット⇒ 実行環境の構築・管理に手間をかけず、アプリケーション開発に集中
アプリケーション実行環境(フレームワーク/ライブラリー)
サーバー/OS
開発したコードをクラウドにデプロイ
アプリケーションプログラム
![Page 5: Open Shift v3 主要機能と内部構造のご紹介](https://reader031.vdocuments.pub/reader031/viewer/2022020301/58719a151a28ab044e8b57f1/html5/thumbnails/5.jpg)
5
OpenShift v3主要機能と内部構造のご紹介
アプリケーション実行環境(フレームワーク/ライブラリー)
サーバー/OS
アプリケーションプログラム
クラウドサービスとしてのPaaS環境の課題
アプリケーションのコードと実行環境は、多くの場合、密結合しており、「ありもの」の実行環境だけでは、不便が生じることも多い
「悪魔は細部に宿る」
・使いたいフレームワークが無い・必要なライブラリーが不足・ライブラリーバージョンの不整合・etc...
![Page 6: Open Shift v3 主要機能と内部構造のご紹介](https://reader031.vdocuments.pub/reader031/viewer/2022020301/58719a151a28ab044e8b57f1/html5/thumbnails/6.jpg)
6
OpenShift v3主要機能と内部構造のご紹介
dotCloudが実行環境のメンテナンスに用意した仕組み dotCloud社は、クラウド内部の仕組みとして、アプリケーションの実行
環境を自動構築して「Dockerイメージ」に固める技術を開発– さらに、クラウド以外の環境でも利用できるようにオープンソースとして公開
Dockerサービス
サーバー/OS
アプリケーションプログラム
さまざまな実行環境をDockerイメージとして
作成・メンテナンス
Dockerイメージ
![Page 7: Open Shift v3 主要機能と内部構造のご紹介](https://reader031.vdocuments.pub/reader031/viewer/2022020301/58719a151a28ab044e8b57f1/html5/thumbnails/7.jpg)
7
OpenShift v3主要機能と内部構造のご紹介
Dockerが提供する基本機能
Dockerfile
① Dockerイメージを自動作成
OSイメージ
アプリケーションライブラリー
アプリケーションフレームワーク
イメージの作成手順を記載
Dockerイメージ
OS上にインストール可能なものはすべてイメージ化可能
② Dockerイメージを保存・公開
③ Dockerサーバーに イメージを配布・実行
![Page 8: Open Shift v3 主要機能と内部構造のご紹介](https://reader031.vdocuments.pub/reader031/viewer/2022020301/58719a151a28ab044e8b57f1/html5/thumbnails/8.jpg)
OpenShiftの主要機能
![Page 9: Open Shift v3 主要機能と内部構造のご紹介](https://reader031.vdocuments.pub/reader031/viewer/2022020301/58719a151a28ab044e8b57f1/html5/thumbnails/9.jpg)
9
OpenShift v3主要機能と内部構造のご紹介
OpenShiftが提供する主な追加機能
Dockerイメージのバージョン管理– イメージストリームとイメージビルドシステム– 「開発環境」そのものを開発可能に
同一の開発環境のクラウド上への配布– テンプレート機能– それぞれの開発者に「自分専用」の開発/検証環境を提供
マルチテナントでの利用– プロジェクト単位でのネームスペースの分割– 開発機能(ブランチ)単位で独立した開発/検証環境を提供
サーバーの境界を意識しないコンテナのデプロイ– Kubernetesによるコンテナのオーケストレーション– マイクロサービス型アプリケーションのDevOps環境を実現
![Page 10: Open Shift v3 主要機能と内部構造のご紹介](https://reader031.vdocuments.pub/reader031/viewer/2022020301/58719a151a28ab044e8b57f1/html5/thumbnails/10.jpg)
10
OpenShift v3主要機能と内部構造のご紹介
従来のPaaSの利用形態
アプリ開発者
開発環境テンプレート
新しいコードをPushすると開発・テスト環境に展開してビルド
開発したコードの稼働確認
![Page 11: Open Shift v3 主要機能と内部構造のご紹介](https://reader031.vdocuments.pub/reader031/viewer/2022020301/58719a151a28ab044e8b57f1/html5/thumbnails/11.jpg)
11
OpenShift v3主要機能と内部構造のご紹介
従来のPaaSの利用形態
アプリ開発者
開発環境テンプレートテンプレートそのものの
メンテナンスはどうする?開発中に開発環境の
アップデートは可能?
開発が終わったアプリはどうやって本番展開する?
![Page 12: Open Shift v3 主要機能と内部構造のご紹介](https://reader031.vdocuments.pub/reader031/viewer/2022020301/58719a151a28ab044e8b57f1/html5/thumbnails/12.jpg)
12
OpenShift v3主要機能と内部構造のご紹介
OpenShiftにおける役割分担
アプリ開発者
開発環境構成テンプレート
テンプレート管理者公式RHELイメージ
Dockerfile
テスト担当者
開発環境イメージ
テスト環境構成テンプレート
開発中アプリイメージ
ソースコード
動作確認
コード開発
テスト用デプロイ環境
動作確認
本番環境構成テンプレート
開発用デプロイ環境本番用デプロイ環境
開発済みアプリイメージ
テスト済みアプリイメージ
リリース担当者
![Page 13: Open Shift v3 主要機能と内部構造のご紹介](https://reader031.vdocuments.pub/reader031/viewer/2022020301/58719a151a28ab044e8b57f1/html5/thumbnails/13.jpg)
13
OpenShift v3主要機能と内部構造のご紹介
OpenShiftにおける「開発環境」のメンテナンス機能
RHELイメージ
開発環境イメージ
テスト用アプリイメージ
セキュリティ問題等の修正が入った新しいRHELイメージをアップロード
Dockerfileを用いて開発環境イメージを更新
アプリケーションを自動ビルドして機能テスト
開発環境イメージ
修正・テスト済みの開発環境イメージを参照
開発中アプリイメージ
新しいコードをPushするとアプリイメージを自動更新
テンプレート管理者
アプリ開発者
![Page 14: Open Shift v3 主要機能と内部構造のご紹介](https://reader031.vdocuments.pub/reader031/viewer/2022020301/58719a151a28ab044e8b57f1/html5/thumbnails/14.jpg)
14
OpenShift v3主要機能と内部構造のご紹介
マルチテナントによる機能別の並行開発
アプリ開発者
開発環境イメージ
アプリケーションイメージ
開発機能ごとにコードのブランチを分けて、各ブランチ専用の開発環境を個別に用意します。
アプリ開発者
開発環境イメージ
アプリケーションイメージ
テスト担当者
開発環境イメージ
アプリケーションイメージ
マスターブランチ
開発済み機能をマージしたマスターブランチのコードを検証
機能Aの開発
機能Bの開発
開発した機能をマージ
開発した機能をマージ
![Page 15: Open Shift v3 主要機能と内部構造のご紹介](https://reader031.vdocuments.pub/reader031/viewer/2022020301/58719a151a28ab044e8b57f1/html5/thumbnails/15.jpg)
15
OpenShift v3主要機能と内部構造のご紹介
OpenShiftによるDevOpsの実現
開発/テストとサービス用でプロジェクトを分割することで、OpenShift上でのDevOps環境が実現できます。
内部レジストリー
ImageStream
BuildConfig
DeploymentConfig
Route
Service Service
エイリアス
テスト済みイメージをエイリアスで参照
DeploymentConfig
開発/テストプロジェクト
サービス用プロジェクト
イメージの実体を保存アプリケーションの元ネタ
(Dockerfile/ソースコード)を保存
Route
RHEL7
MyApp MyApp
![Page 16: Open Shift v3 主要機能と内部構造のご紹介](https://reader031.vdocuments.pub/reader031/viewer/2022020301/58719a151a28ab044e8b57f1/html5/thumbnails/16.jpg)
16
OpenShift v3主要機能と内部構造のご紹介
テンプレートとGUIの組み合わせによるPaaSの提供
テンプレート機能とGUIを組み合わせることで、アプリケーション開発者には、従来型の「PaaS」環境として見せることができます。
アプリケーション開発者はコードの開発のみに集中
![Page 17: Open Shift v3 主要機能と内部構造のご紹介](https://reader031.vdocuments.pub/reader031/viewer/2022020301/58719a151a28ab044e8b57f1/html5/thumbnails/17.jpg)
OpenShiftの内部構造
![Page 18: Open Shift v3 主要機能と内部構造のご紹介](https://reader031.vdocuments.pub/reader031/viewer/2022020301/58719a151a28ab044e8b57f1/html5/thumbnails/18.jpg)
18
OpenShift v3主要機能と内部構造のご紹介
OpenShiftの基本サーバー構成
etcd
・・・
バックエンドデータベース(KVS)
マスターノード
・・・
クラスタ構成で負荷分散可能
Docker Docker Docker
必要に応じて追加可能
1台のマスターから複数のノードを管理するシンプルなアーキテクチャーです。– 各ノードのエージェントとマスターが直接に通信します。– バックエンドデータベースは、etcd(分散KVS)を使用します。– OpenShiftの利用者(CLI)は、マスターが公開するAPIにアクセスします。
利用者(CLI)
![Page 19: Open Shift v3 主要機能と内部構造のご紹介](https://reader031.vdocuments.pub/reader031/viewer/2022020301/58719a151a28ab044e8b57f1/html5/thumbnails/19.jpg)
19
OpenShift v3主要機能と内部構造のご紹介
OpenShiftのネットワーク構成
etcd マスター
オーバーレイネットワークとして構成
・・・
物理的には、全サーバーを共通のサービスネットワークに接続するだけで利用可能です。– コンテナ間通信用の内部ネットワークは、オーバーレイネットワークとして構成されます。– 外部からのアクセスは、ルータ用コンテナを経由します。
• ルータがあるノードの80番ポート宛のパケットは、iptablesでルーターに転送されます。ルータは、URLベースで接続先のコンテナを決定します。
サービスネットワーク
ノード
内部ネットワーク
コンテナ コンテナ
ブリッジ
コンテナ コンテナ
ルータ
ブリッジ
ノード
![Page 20: Open Shift v3 主要機能と内部構造のご紹介](https://reader031.vdocuments.pub/reader031/viewer/2022020301/58719a151a28ab044e8b57f1/html5/thumbnails/20.jpg)
20
OpenShift v3主要機能と内部構造のご紹介
「サービス」によるコンテナ間接続
コンテナで起動したアプリケーションに対して、「サービス」を定義すると、内部ネットワーク上の「サービスアドレス」が割り当てられます。
– 他のコンテナから「サービスアドレス」にアクセスすると、対応するコンテナにパケットが転送されます。(複数のコンテナがある場合は、ラウンドロビンで負荷分散が行われます。)
– 事前に「サービス」を定義した状態で、新規のコンテナを起動すると、サービスのIPアドレス/ポートを示す環境変数が自動的にセットされます。
# oc get serviceNAME CLUSTER_IP EXTERNAL_IP PORT(S) SELECTOR AGEetherpad-lite 172.30.14.201 <none> 9001/TCP deploymentconfig=etherpad-lite 7dmysql 172.30.86.51 <none> 3306/TCP name=mysql 7d
apiVersion: v1 kind: Service metadata: name: mysqlspec: ports: - name: mysql port: 3306 protocol: TCP targetPort: 3306 selector: name: mysql-pod sessionAffinity: None
mysql-service.yml
MYSQL_SERVICE_HOST=172.30.86.51MYSQL_SERVICE_PORT_MYSQL=3306
サービス定義ファイルの例
割り当てられたサービスアドレス
新規のコンテナにセットされる環境変数の例
![Page 21: Open Shift v3 主要機能と内部構造のご紹介](https://reader031.vdocuments.pub/reader031/viewer/2022020301/58719a151a28ab044e8b57f1/html5/thumbnails/21.jpg)
21
OpenShift v3主要機能と内部構造のご紹介
「ルーティング」による外部接続
「サービス」に加えて「ルーティング」を定義すると、外部からのURLアクセスが可能になります。
– HAProxyが稼働するルータコンテナがURLベースのルーティング処理を行ないます。– 下記の例では、「*.oso.example.com」が「ルータコンテナが稼働するノードのパブリックIP」に解決されるように外部DNSが事前設定されています。
– 複数のルータコンテナを起動して、DNSラウンドロビンで負荷分散することも可能です。
# oc get routeNAME HOST/PORT PATH SERVICE etherpad-lite-route eplite.project01.oso.example.com etherpad-lite
apiVersion: v1kind: Routemetadata: name: etherpad-lite-routespec: host: eplite.project01.oso.example.com to: kind: Service name: etherpad-lite
etherpad-lite_route.yml ルーティング定義ファイルの例
アプリケーションのURL
![Page 22: Open Shift v3 主要機能と内部構造のご紹介](https://reader031.vdocuments.pub/reader031/viewer/2022020301/58719a151a28ab044e8b57f1/html5/thumbnails/22.jpg)
22
OpenShift v3主要機能と内部構造のご紹介
「サービス」と「ルーティング」のパケット経路 「サービス」として定義されたIPアドレス宛のパケットは、iptables設定によって、ノード
上の「openshift-nodeエージェント」に転送されます。– openshift-nodeエージェントは、実際にサービスを提供するコンテナにラウンドロビンでパケットを転送します。
「ルーティング」を定義すると、ルータコンテナ上のHAProxyに、対応する設定がなされることで、URLベースでのルーティングが実施されます。
openshift-nodeエージェント
オーバーレイネットワーク
ブリッジ
コンテナ コンテナルータ
コンテナ
iptables
iptables
DNSラウンドロビン
ラウンドロビン リースト
コネクション
コンテナ間のアクセス
外部からのアクセス
openshift-nodeエージェント
ブリッジ
コンテナ コンテナルータ
コンテナ
iptables
iptables
ラウンドロビン リースト
コネクション
![Page 23: Open Shift v3 主要機能と内部構造のご紹介](https://reader031.vdocuments.pub/reader031/viewer/2022020301/58719a151a28ab044e8b57f1/html5/thumbnails/23.jpg)
OpenShiftのイメージ管理機能
![Page 24: Open Shift v3 主要機能と内部構造のご紹介](https://reader031.vdocuments.pub/reader031/viewer/2022020301/58719a151a28ab044e8b57f1/html5/thumbnails/24.jpg)
24
OpenShift v3主要機能と内部構造のご紹介
OpenShiftにおけるイメージ管理
Docker Hub、もしくは、Dockerホストローカルのイメージは、「ユーザー名/リポジトリ名 : タグ」という名称で識別されます。
– タグによるバージョン管理が可能ですが、自由に付け替えができるため、利用者自身が意識的にタグ名を操作する必要があります。
OpenShiftで取り扱うイメージは、専用の内部レジストリーに保存して、独自のバージョン管理を行ないます。
– 内部レジストリーの中では、「プロジェクト名/リポジトリ名@<sha256ハッシュ>」という名称でイメージを識別します。ハッシュ値が、GitのコミットIDに相当するユニークな識別子になります。
– バージョン情報(イメージが更新された時系列)については、別途、「イメージストリーム」を定義して、そちらで管理します。
# oc get isNAME DOCKER REPO TAGS UPDATEDcentos7 172.30.84.64:5000/project01/centos7 latest 7 days agoetherpad-lite 172.30.84.64:5000/project01/etherpad-lite latest 7 days agonodejs-base 172.30.84.64:5000/project01/nodejs-base latest 7 days ago
# oc describe is etherpad-liteName: etherpad-liteCreated: 7 days agoLabels: <none>Annotations: openshift.io/image.dockerRepositoryCheck=2016-01-03T09:53:25ZDocker Pull Spec: 172.30.84.64:5000/project01/etherpad-lite
Tag Spec Created PullSpec latest <pushed> 5 days ago 172.30.84.64:5000/project01/etherpad-lite@sha256:9b5e7f9fc58... 7 days ago 172.30.84.64:5000/project01/etherpad-lite@sha256:05c4600b8ab...
project01のイメージストリーム一覧
イメージストリーム「etherpad-lite」
に含まれるイメージ
![Page 25: Open Shift v3 主要機能と内部構造のご紹介](https://reader031.vdocuments.pub/reader031/viewer/2022020301/58719a151a28ab044e8b57f1/html5/thumbnails/25.jpg)
25
OpenShift v3主要機能と内部構造のご紹介
OpenShiftにおけるイメージ管理
イメージストリームには、次のような際に新しいバージョンのイメージが登録されます。– 内部レジストリーにイメージをPushした時
• プッシュ時の「プロジェクト名/レジストリー名」から、対応するプロジェクトの(レジストリーと同名の)イメージストリームに新バージョンとして登録されます。
– OpenShiftのイメージビルドシステムを用いて、新しいイメージをビルドした時• イメージビルドシステムは、GitHubで公開したDockerfile、アプリケーションのソースコードな
どを用いて、新しいイメージを作成、内部レジストリーに保存する機能です。
# docker pull centos:7# docker login -u enakai -e [email protected] -p $(oc whoami -t) registry.oso.example.com# docker tag docker.io/centos:7 registry.oso.example.com/project01/centos7:latest# docker push registry.oso.example.com/project01/centos7:latest
# oc get isNAME DOCKER REPO TAGS UPDATEDcentos7 172.30.84.64:5000/project01/centos7 latest 7 seconds ago
# oc describe is centos7ame: centos7Created: 24 seconds agoLabels: <none>Annotations: openshift.io/image.dockerRepositoryCheck=2015-12-28T11:32:19ZDocker Pull Spec: 172.30.84.64:5000/project01/centos7
Tag Spec Created PullSpec latest <pushed> 24 seconds ago 172.30.84.64:5000/project01/centos7@sha256:b04ac...
CentOS7のイメージを内部レジストリーに
Pushする例
![Page 26: Open Shift v3 主要機能と内部構造のご紹介](https://reader031.vdocuments.pub/reader031/viewer/2022020301/58719a151a28ab044e8b57f1/html5/thumbnails/26.jpg)
26
OpenShift v3主要機能と内部構造のご紹介
OpenShiftのイメージビルドシステム
イメージビルドシステムは、「ビルド設定(BuildConfig)」を定義して利用します。次は、GitHubで公開したDockerfile(および、ビルドに必要な関連ファイル)からイメージをビルドする設定の例です。
apiVersion: v1kind: BuildConfigmetadata: name: nginx-samplespec: output: to: kind: ImageStreamTag name: nginx-sample:latest source: git: uri: https://github.com/enakai00/openshift_nginx_sample type: Git strategy: dockerStrategy: from: kind: ImageStreamTag name: centos7:latest type: Docker triggers: - imageChange: {} type: ImageChange
nginx-sample_bc.yml– Docerfileの「FROM:」行は、イメー
ジストリーム「centos7」のイメージで置き換えられます。
– 作成されたイメージは、内部レジストリーに保存された後、イメージストリーム「nginx-sample」に自動登録されます。
– 「start-build」コマンドを明示的に実行する他に、イメージストリーム「centos7」のイメージが更新されたタイミング、GitHubに新たなCommitが行われたタイミングでも自動的にビルドが実行可能です。
![Page 27: Open Shift v3 主要機能と内部構造のご紹介](https://reader031.vdocuments.pub/reader031/viewer/2022020301/58719a151a28ab044e8b57f1/html5/thumbnails/27.jpg)
アプリケーションのデプロイ方法
![Page 28: Open Shift v3 主要機能と内部構造のご紹介](https://reader031.vdocuments.pub/reader031/viewer/2022020301/58719a151a28ab044e8b57f1/html5/thumbnails/28.jpg)
28
OpenShift v3主要機能と内部構造のご紹介
イメージストリームからのコンテナのデプロイ
「デプロイ設定(DeploymentConfig)」を用いて、イメージストリームに登録したイメージからコンテナをデプロイします。
apiVersion: v1kind: DeploymentConfigmetadata: name: nginx-samplespec: template: metadata: labels: name: nginx-sample spec: containers: - name: nginx-sample-latest image: nginx-sample:latest ports: - containerPort: 8080 protocol: TCP replicas: 4 selector: name: nginx-sample triggers: - type: ImageChange imageChangeParams: automatic: true containerNames: - nginx-sample-latest from: kind: ImageStreamTag name: nginx-sample:latest - type: ConfigChange
nginx-sample_dc.yml– レプリカ数で指定した数のコンテナが起動します。先に説明した「サービス」の定義により、複数コンテナに対するロードバランスが行われます。
– イメージストリームに新しいイメージが登録されると、自動で再デプロイを実施することができます。再デプロイ時は、新バージョンのコンテナを追加起動して、新しいセッションから新バージョンに振り分けるといった動作が可能です。
![Page 29: Open Shift v3 主要機能と内部構造のご紹介](https://reader031.vdocuments.pub/reader031/viewer/2022020301/58719a151a28ab044e8b57f1/html5/thumbnails/29.jpg)
29
OpenShift v3主要機能と内部構造のご紹介
複数コンテナが連携するシステムの構築例
下記のBlog記事に従って、MySQL + node.jsのアプリケーション環境を構築してみます。– OpenShift OriginによるDockerイメージ管理(4)〜S2Iによるイメージビルド
• http://enakai00.hatenablog.com/entry/2016/01/03/174854– OpenShift OriginによるDockerイメージ管理(5)〜複数コンテナの連携設定
• http://enakai00.hatenablog.com/entry/2016/01/03/200920
![Page 30: Open Shift v3 主要機能と内部構造のご紹介](https://reader031.vdocuments.pub/reader031/viewer/2022020301/58719a151a28ab044e8b57f1/html5/thumbnails/30.jpg)
EMPOWER PEOPLE,
EMPOWER ENTERPRISE,
OPEN INNOVATION.