Successfully reported this slideshow.
Your SlideShare is downloading. ×

OpenShift v3 Technical Introduction

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 33 Ad

OpenShift v3 Technical Introduction

Download to read offline

Wakameユーザ会#11での発表予定資料です
https://wakame.doorkeeper.jp/events/36606
2016/01/11 ver1.0 公開
2016/01/12 ver1.1 Update
2016/01/12 ver1.2 Update
2016/01/20 ver1.3 ユースケースイメージを追加

Wakameユーザ会#11での発表予定資料です
https://wakame.doorkeeper.jp/events/36606
2016/01/11 ver1.0 公開
2016/01/12 ver1.1 Update
2016/01/12 ver1.2 Update
2016/01/20 ver1.3 ユースケースイメージを追加

Advertisement
Advertisement

More Related Content

Slideshows for you (20)

Advertisement

Similar to OpenShift v3 Technical Introduction (20)

More from Etsuji Nakai (20)

Advertisement

Recently uploaded (20)

OpenShift v3 Technical Introduction

  1. 1. OpenShift v3 Technical Introduction レッドハット株式会社 中井悦司 / Etsuji Nakai Senior Solution Architect and Cloud Evangelist v1.3 2016/01/20
  2. 2. 2 OpenShift v3 Technical Introduction 自己紹介  中井悦司(なかいえつじ) – Twitter @enakai00  日々の仕事 – Senior Solution Architect and Cloud Evangelist at Red Hat K.K. 企業システムでオープンソースの活用を希望される お客様を全力でご支援させていただきます。  昔とった杵柄 – 素粒子論の研究(超弦理論とか) – 予備校講師(物理担当) – インフラエンジニア(Unix/Linux専門) 好評発売中!
  3. 3. 3 OpenShift v3 Technical Introduction Contents  Dockerの機能とユースケースの整理  OpenShiftの内部構造  OpenShiftのイメージ管理機能  アプリケーションのデプロイ方法  ユースケースイメージ  参考資料
  4. 4. Dockerの機能とユースケースの整理
  5. 5. 5 OpenShift v3 Technical Introduction Dockerが提供する基本機能 Dockerfile ① Dockerイメージを自動作成 OSイメージ アプリケーション ライブラリー アプリケーション フレームワーク イメージの 作成手順を記載 Docker イメージ OS上にインストール可能な ものはすべてイメージ化可能 ② Dockerイメージを保存・公開 ③ Dockerサーバーに  イメージを配布・実行
  6. 6. 6 OpenShift v3 Technical Introduction アプリケーション開発環境でのDockerの利用例  Dockerイメージを用いて、多数の開発者に同一の開発環境を提供 – テストサーバーにも同じ環境を提供することで、「環境差異による問題発生」を防止  Dockerfileからイメージを自動作成するので、イメージの修正・変更・再配布が容易 – 開発コードのように、実行環境を「バージョン管理」可能に フレームワーク データベース Dockerfile Dockerイメージを 自動作成 開発・テスト環境に Dockerイメージを配布 開発コードを コードリポジトリー にプッシュ CIツールにより インテグレーション テストを自動実行 イメージをバージョン管理 する仕組みは用意が必要
  7. 7. 7 OpenShift v3 Technical Introduction フレームワーク データベース アプリケーション フレームワーク ライブラリー Dockerイメージを 本番環境に展開!  テストが実施された「アプリケーション環境」をそのままDockerイメージに固め て、本番環境にデプロイすることで、アプリケーション配布を容易に サービス環境へのDocker適用のメリット
  8. 8. 8 OpenShift v3 Technical Introduction Docker利用パターン(その1): アプリケーションのデプロイを安全/簡単に  仮想マシン上のアプリケーションをコンテナイメージ化することで、アプリケー ションのデプロイを安全/簡単にします。 – 「1仮想マシンに1アプリケーション」という配置はあえて変更しないことで、運用方 法やアプリケーションのデザインへの影響を最小限に留めます。 – 外部からアプリケーションに接続するユーザー/外部システムは、アプリケーションが コンテナ化されていることを意識する必要がありません。 IaaS/仮想化基盤 仮想マシン (ゲストOS) アプリA ・・・ ・・・ これまでの環境 アプリケーションの コンテナイメージ化 IaaS/仮想化基盤 仮想マシン (Dockerホスト) アプリA (コンテナ  イメージ) 仮想マシン (Dockerホスト) アプリB (コンテナ  イメージ) ・・・ ・・・ 仮想マシン (ゲストOS) アプリB
  9. 9. 9 OpenShift v3 Technical Introduction Docker利用パターン(その2): サーバーの境界を意識しないアプリケーションデプロイ  コンテナーの配置先を自動的に振り分ける仕組みを用いて、複数ホストを「1つ のコンピューティングリソース」として活用します。  アプリケーションを機能単位に分割してコンテナ化することで、さらなるメリッ トが得られます。 – 必要な機能を負荷に応じてオートスケールします。 – 機能単位でコンテナーを入れ替えることにより、稼働中のアプリケーションの動的な機 能変更が可能になります。 ※ Dockerはあくまでイメージ配布の仕組みに利用しているだけで、上位のオーケスト     レーション機能は別途用意が必要 Dockerホスト Dockerホスト Dockerホスト ・・・ 複数ホストを束ねて「1つのコンピュータ」として活用 マイクロサービス化 アプリケーション
  10. 10. 10 OpenShift v3 Technical Introduction OpenShiftが提供する主な追加機能  Dockerイメージのバージョン管理 – イメージストリームとイメージビルドシステム – 「開発環境」そのものを開発可能に  同一の開発環境のクラウド上への配布 – テンプレート機能 – それぞれの開発者に「自分専用」の開発/検証環境を提供  マルチテナントでの利用 – プロジェクト単位でのネームスペースの分割 – 開発機能(ブランチ)単位で独立した開発/検証環境を提供  サーバーの境界を意識しないコンテナのデプロイ – Kubernetesによるコンテナのオーケストレーション – マイクロサービス型アプリケーションのDevOps環境を実現
  11. 11. OpenShiftの内部構造
  12. 12. 12 OpenShift v3 Technical Introduction OpenShiftの基本サーバー構成 etcd ・・・ バックエンドデータベース(KVS) マスター ノード ・・・ クラスタ構成で 負荷分散可能 Docker Docker Docker 必要に応じて 追加可能  1台のマスターから複数のノードを管理するシンプルなアーキテクチャーです。 – 各ノードのエージェントとマスターが直接に通信します。 – バックエンドデータベースは、etcd(分散KVS)を使用します。 – OpenShiftの利用者(CLI)は、マスターが公開するAPIにアクセスします。 利用者(CLI)
  13. 13. 13 OpenShift v3 Technical Introduction OpenShiftのネットワーク構成 etcd マスター オーバーレイネットワーク として構成 ・・・  物理的には、全サーバーを共通のサービスネットワークに接続するだけで利用可能です。 – コンテナ間通信用の内部ネットワークは、オーバーレイネットワークとして構成されます。 – 外部からのアクセスは、ルータ用コンテナを経由します。 • ルータがあるノードの80番ポート宛のパケットは、iptablesでルーターに転送されます。ルータ は、URLベースで接続先のコンテナを決定します。 サービスネットワーク ノード 内部ネットワーク コンテナ コンテナ ブリッジ コンテナ コンテナ ルータ ブリッジ ノード
  14. 14. 14 OpenShift v3 Technical Introduction 「サービス」によるコンテナ間接続  コンテナで起動したアプリケーションに対して、「サービス」を定義すると、内部ネット ワーク上の「サービスアドレス」が割り当てられます。 – 他のコンテナから「サービスアドレス」にアクセスすると、対応するコンテナにパケットが転送され ます。(複数のコンテナがある場合は、ラウンドロビンで負荷分散が行われます。) – 事前に「サービス」を定義した状態で、新規のコンテナを起動すると、サービスのIPアドレス/ポー トを示す環境変数が自動的にセットされます。 # oc get service NAME CLUSTER_IP EXTERNAL_IP PORT(S) SELECTOR AGE etherpad-lite 172.30.14.201 <none> 9001/TCP deploymentconfig=etherpad-lite 7d mysql 172.30.86.51 <none> 3306/TCP name=mysql 7d apiVersion: v1 kind: Service metadata: name: mysql spec: ports: - name: mysql port: 3306 protocol: TCP targetPort: 3306 selector: name: mysql-pod sessionAffinity: None mysql-service.yml MYSQL_SERVICE_HOST=172.30.86.51 MYSQL_SERVICE_PORT_MYSQL=3306 サービス定義ファイルの例 割り当てられた サービスアドレス 新規のコンテナに セットされる環境変数の例
  15. 15. 15 OpenShift v3 Technical Introduction 「ルーティング」による外部接続  「サービス」に加えて「ルーティング」を定義すると、外部からのURLアクセスが可能にな ります。 – HAProxyが稼働するルータコンテナがURLベースのルーティング処理を行ないます。 – 下記の例では、「*.oso.example.com」が「ルータコンテナが稼働するノードのパブリックIP」に解 決されるように外部DNSが事前設定されています。 – 複数のルータコンテナを起動して、DNSラウンドロビンで負荷分散することも可能です。 # oc get route NAME HOST/PORT PATH SERVICE etherpad-lite-route eplite.project01.oso.example.com etherpad-lite apiVersion: v1 kind: Route metadata: name: etherpad-lite-route spec: host: eplite.project01.oso.example.com to: kind: Service name: etherpad-lite etherpad-lite_route.yml ルーティング定義ファイルの例 アプリケーションのURL
  16. 16. 16 OpenShift v3 Technical Introduction 「サービス」と「ルーティング」のパケット経路  「サービス」として定義されたIPアドレス宛のパケットは、iptables設定によって、ノード 上の「openshift-nodeエージェント」に転送されます。 – openshift-nodeエージェントは、実際にサービスを提供するコンテナにラウンドロビンでパケットを 転送します。  「ルーティング」を定義すると、ルータコンテナ上のHAProxyに、対応する設定がなされる ことで、URLベースでのルーティングが実施されます。 openshift-node エージェント オーバーレイネットワーク ブリッジ コンテナ コンテナ ルータ コンテナ iptables iptables DNS ラウンドロビン ラウンド ロビン リースト コネクション コンテナ間のアクセス 外部からのアクセス openshift-node エージェント ブリッジ コンテナ コンテナ ルータ コンテナ iptables iptables ラウンド ロビン リースト コネクション
  17. 17. OpenShiftのイメージ管理機能
  18. 18. 18 OpenShift v3 Technical Introduction OpenShiftにおけるイメージ管理  Docker Hub、もしくは、Dockerホストローカルのイメージは、「ユーザー名/リポジトリ名 : タグ」という名称で識別されます。 – タグによるバージョン管理が可能ですが、自由に付け替えができるため、利用者自身が意識的にタグ 名を操作する必要があります。  OpenShiftで取り扱うイメージは、専用の内部レジストリーに保存して、独自のバージョン 管理を行ないます。 – 内部レジストリーの中では、「プロジェクト名/リポジトリ名@<sha256ハッシュ>」という名称でイ メージを識別します。ハッシュ値が、GitのコミットIDに相当するユニークな識別子になります。 – バージョン情報(イメージが更新された時系列)については、別途、「イメージストリーム」を定義 して、そちらで管理します。 # oc get is NAME DOCKER REPO TAGS UPDATED centos7 172.30.84.64:5000/project01/centos7 latest 7 days ago etherpad-lite 172.30.84.64:5000/project01/etherpad-lite latest 7 days ago nodejs-base 172.30.84.64:5000/project01/nodejs-base latest 7 days ago # oc describe is etherpad-lite Name: etherpad-lite Created: 7 days ago Labels: <none> Annotations: openshift.io/image.dockerRepositoryCheck=2016-01-03T09:53:25Z Docker 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」 に含まれるイメージ
  19. 19. 19 OpenShift v3 Technical Introduction OpenShiftにおけるイメージ管理  イメージストリームには、次のような際に新しいバージョンのイメージが登録されます。 – 内部レジストリーにイメージをPushした時 • プッシュ時の「プロジェクト名/レジストリー名」から、対応するプロジェクトの(レジスト リーと同名の)イメージストリームに新バージョンとして登録されます。 – OpenShiftのイメージビルドシステムを用いて、新しいイメージをビルドした時 • イメージビルドシステムは、GitHubで公開したDockerfile、アプリケーションのソースコードな どを用いて、新しいイメージを作成、内部レジストリーに保存する機能です。 # docker pull centos:7 # docker login -u enakai -e enakai@example.com -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 is NAME DOCKER REPO TAGS UPDATED centos7 172.30.84.64:5000/project01/centos7 latest 7 seconds ago # oc describe is centos7 ame: centos7 Created: 24 seconds ago Labels: <none> Annotations: openshift.io/image.dockerRepositoryCheck=2015-12-28T11:32:19Z Docker 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する例
  20. 20. 20 OpenShift v3 Technical Introduction OpenShiftのイメージビルドシステム  イメージビルドシステムは、「ビルド設定(BuildConfig)」を定義して利用します。次は、 GitHubで公開したDockerfile(および、ビルドに必要な関連ファイル)からイメージをビル ドする設定の例です。 apiVersion: v1 kind: BuildConfig metadata: name: nginx-sample spec: 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が行われたタイミングでも 自動的にビルドが実行可能です。
  21. 21. アプリケーションのデプロイ方法
  22. 22. 22 OpenShift v3 Technical Introduction イメージストリームからのコンテナのデプロイ  「デプロイ設定(DeploymentConfig)」を用いて、イメージストリームに登録したイメー ジからコンテナをデプロイします。 apiVersion: v1 kind: DeploymentConfig metadata: name: nginx-sample spec: 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 – レプリカ数で指定した数のコンテナが起動します。 先に説明した「サービス」の定義により、複数コン テナに対するロードバランスが行われます。 – イメージストリームに新しいイメージが登録される と、自動で再デプロイを実施することができます。 再デプロイ時は、新バージョンのコンテナを追加起 動して、新しいセッションから新バージョンに振り 分けるといった動作が可能です。
  23. 23. 23 OpenShift v3 Technical Introduction マルチテナント機能を利用したDevOpsの実現  開発/テストとサービス用でプロジェクトを分割することで、OpenShift上でのDevOps環境 が実現できます。 内部レジストリー ImageStream BuildConfig Deployment Config Route Service Service エイリアス テスト済みイメージを エイリアスで参照 Deployment Config 開発/テスト プロジェクト サービス用 プロジェクト イメージの 実体を保存アプリケーションの元ネタ (Dockerfile/ソースコード) を保存 Route RHEL7 MyApp MyApp
  24. 24. 24 OpenShift v3 Technical Introduction 設定テンプレートによる環境構築  一連の設定ファイル(「イメージストリーム」「ビルド設定」「デプロイ設定」「サービ ス」「ルーティング」)をテンプレート化することにより、典型的なアプリケーション環境 /開発環境が自動構築できるようになります。 # oc get -n openshift template NAME DESCRIPTION PARAMETERS OBJECTS cakephp-example An example CakePHP application with no database 14 (8 blank) 5 cakephp-mysql-example An example CakePHP application with a MySQL database 14 (3 blank) 7 dancer-example An example Dancer application with no database 7 (4 blank) 5 dancer-mysql-example An example Dancer application with a MySQL database 13 (4 blank) 7 django-example An example Django application with no database 12 (9 blank) 5 django-psql-example An example Django application with a PostgreSQL database 12 (4 blank) 7 jenkins-ephemeral Jenkins service, without persistent storage. WARNING: Any data stored will be... 2 (all set) 3 jenkins-persistent Jenkins service, with persistent storage. 3 (all set) 4 logging-deployer-template Template for deploying everything needed for aggregated logging. Requires clu... 19 (10 blank) 1 metrics-deployer-template Template for deploying the required Metrics integration. Requires cluster-adm... 9 (1 blank) 1 mongodb-ephemeral MongoDB database service, without persistent storage. WARNING: Any data store... 5 (3 generated) 2 mongodb-persistent MongoDB database service, with persistent storage. Scaling to more than one r... 6 (3 generated) 3 mysql-ephemeral MySQL database service, without persistent storage. WARNING: Any data stored... 4 (2 generated) 2 mysql-persistent MySQL database service, with persistent storage. Scaling to more than one rep... 5 (2 generated) 3 nodejs-example An example Node.js application with no database 11 (8 blank) 5 nodejs-mongodb-example An example Node.js application with a MongoDB database 11 (3 blank) 7 postgresql-ephemeral PostgreSQL database service, without persistent storage. WARNING: Any data st... 4 (2 generated) 2 postgresql-persistent PostgreSQL database service, with persistent storage. Scaling to more than on... 5 (2 generated) 3 rails-postgresql-example An example Rails application with a PostgreSQL database 15 (3 blank) 7 デフォルトで用意される テンプレートの例
  25. 25. 25 OpenShift v3 Technical Introduction テンプレートとGUIの組み合わせによるPaaSの提供  テンプレート機能とGUIを組み合わせることで、いわゆる「PaaS」環境を提供することも可 能です。
  26. 26. 26 OpenShift v3 Technical Introduction 複数コンテナが連携するシステムの構築例  下記の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
  27. 27. ユースケースイメージ
  28. 28. 28 OpenShift v3 Technical Introduction 従来のPaaSの利用形態 アプリ開発者 開発環境 テンプレート 新しいコードをPushすると 開発・テスト環境に展開してビルド 開発したコードの 稼働確認 テンプレートそのものの メンテナンスはどうする? 開発中に開発環境の アップデートは可能? 開発が終わったアプリは どうやって本番展開する?
  29. 29. 29 OpenShift v3 Technical Introduction OpenShiftにおける「開発環境」のメンテナンス機能 OSイメージ 開発環境イメージ アプリケーション イメージ アプリ開発者 開発環境管理者 セキュリティ問題等の修正が入った 新しいOSイメージをアップロード Dockerfileを用いて 開発環境イメージを更新 アプリケーションを 自動ビルドして機能テスト 開発環境イメージ 修正・テスト済みの 開発環境イメージを参照 アプリケーション イメージ 新しいコードをPushすると アプリケーションイメージを自動更新
  30. 30. 30 OpenShift v3 Technical Introduction マルチテナントによる機能別の並行開発 アプリ開発者 開発環境イメージ アプリケーション イメージ  開発機能ごとにコードのブランチを分けて、各ブラ ンチ専用の開発環境を個別に用意します。 アプリ開発者 開発環境イメージ アプリケーション イメージ テスト担当者 開発環境イメージ アプリケーション イメージ マスターブランチ 開発済み機能をマージした マスターブランチのコードを検証 機能Aの開発 機能Bの開発 開発した機能を マージ 開発した機能を マージ
  31. 31. 参考資料
  32. 32. 32 OpenShift v3 Technical Introduction 参考資料  OpenShift関連情報リンク集 – http://enakai00.hatenablog.com/entry/2016/01/03/211029  OpenShift v3 Internal networking details – http://www.slideshare.net/enakai/openshift-45465283  RHEL7.1でKubernetesを実体験(概要編) – http://jp-redhat.com/openeye_online/column/nakai/902/  RHEL7.1でKubernetesを実体験(構築編) – http://jp-redhat.com/openeye_online/column/nakai/991/
  33. 33. EMPOWER PEOPLE, EMPOWER ENTERPRISE, OPEN INNOVATION.

×