「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfrastructure.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>Open PaaS]]
--[[OpenShift]]
--[[Cloud Foundry]]
--[[Kubernetes]]

*目次 [#v1c6c817]
#contents

*概要 [#leb94ad6]
-コンテナベースのソフトウェアの配備・管理のRed Hat製品。
--OpenShiftはRHELおよびFedora上で動作する。
--Linuxカーネルの仮想化技術であるKVMを積極的に推進。
--[[Kubernetes]]のディストリビューション。

-具体的には、
--[[Dockerコンテナ>#f0dcbdd8]]とDevOpsツールを使用して、アプリケーション開発を高速化する。
--豊富な機能を備えたポータルとCLIを同梱し、~
デプロイされたアプリケーションを操作するためのUI/UXをユーザに提供する。

*経緯 [#l89328cd]
-Red Hatが開発 2011年に発表
-2012年にOSSとして公開。
-2015年、それまでの仕組み(OpenShift v2)を捨て去り、~
[[Docker]] PaaSとして生まれ変わった OpenShift v3を公開。

-OpenShift v3のコアは[[Kubernetes]]
--[[Kubernetes]]の概念をそのまま取り入れている。
--コアに[[Kubernetes]]を据えることで、進化が著しい。

*アーキテクチャ [#o75598f0]

**v2以前 [#u1298413]
コンポーネントは、大分すると、[[Broker>#e0e505dd]]と[[Node>#w717e8f4]]に分けられる。

***Broker [#e0e505dd]
アプリケーションのデプロイ、認証・認可、各種データの保存などを担っている。

***Node [#w717e8f4]
アプリケーションやサービスのホスト。

-Webブラウザなどからのアプリケーションへのアクセスは、~
Nodeごとのリバースプロキシを経由し、各Gearに分配される。

-Cartridgeと呼ばれる、各種実行環境のテンプレートが用意されており、~
それを基にGearと呼ばれるアプリケーションの実行単位を構成する。

--データベースもCartridgeの1つとして用意され、~
アプリケーションごとにGearとして動作する仕組み。

--対応言語、フレームワーク、データベースを追加したい場合、Cartridgeを追加する。

**v3以降 [#wf394118]
-2015年、OpenShift v3の[[Kubernetes]]で[[Docker]] PaaSとして産まれ変わった。
-Broker / Node -> [[マスター / ノード / ポッドのアーキテクチャ>Kubernetes#xbc57197]]へ変更された。
-[[Kubernetes]]の開発にはRed Hatが深く関わっている。

*[[Docker]]関連 [#sbab77e8]

**[[Dockerファイル>Docker#ea5191dc]] [#q66f4b6a]

**[[Dockerデーモン>Docker#be9eca12]] [#f4b41ce9]
OpenShiftがノードの[[Dockerデーモン>Docker#be9eca12]]に実行を要求する。

***[[Dockerイメージ>Docker#vee01503]] [#k4a925fc]
ベストプラクティスに従うすべての[[Dockerイメージ>Docker#vee01503]]で機能する。
-EXPOSEポートの定義
-開始時に実行する1つの非終了CMDなど
-ルートユーザまたは特定のユーザ名として実行しない
--デフォルトでrootとして実行される[[Dockerイメージ>Docker#vee01503]]の展開を許可していない。
--root(または特定のユーザ)として実行されることを想定した~
[[Dockerイメージ>Docker#vee01503]]の展開を許可したい場合、小さな構成変更が必要になる。 

***[[Dockerコンテナ>Docker#u4d4949f]] [#f0dcbdd8]
-コンテナは不変のインフラストラクチャとして扱われる。
-従って、一般的にコンテナの内容を変更しない。 
-しかし、アプリケーションをデバッグするなどの幾つかのユースケースでは、~
コンテナに入り、アプリケーションを検査することが有益になることがある。
--参考:[[SSHでコンテナ内のカスタム・コマンドを実行するような場合>#oce32888]]

**[[Dockerレジストリ>Docker#hff8c9d7]] [#n4955731]

*OpenShift用語 [#a0339ae5]

**グループ化 [#ncc008a6]

***プロジェクト [#me26efb8]
展開を整理するのに役立つ最上位コンセプト。

-ユーザーが他のユーザーとは別に、~
コンテンツを整理して管理することができる。

-各プロジェクトには、独自の
--リソース、ポリシー(アクションを実行できるかどうか)
--制約(リソースのクォータと制限など)

>などがある。

-各リソースの「ラッパー」として機能する。
--[[サービス>#l875353c]]
--エンドポイント

***サービス [#l875353c]
-抽象レイヤを提供し[[ポッド>Kubernetes#j268603c]]グループ化する。

-外部アクセスのため一意のIPアドレスとポートのペアが割り当てられる。
--ただし、既定では、作成したサービスは外部に公開されない。
--サービスIPは、サービスの生存期間中は決して変更されない。

-また、内部プロキシ/ロード・バランサとしても機能する。
--[[ポッド>Kubernetes#j268603c]]のルーティングとロード・バランシングを提供する。

**RC/DC [#l5dc7e64]
ほとんどの場合、

-[[ポッド>Kubernetes#j268603c]]、[[サービス>#l875353c]]
-[[Replication Controllers (RC)>#y08253d8]]
-[[Deployment Configuration (DC)>#pe9ddccf]]

などのリソースを一緒に作成・使用することになる。

***Deployment Configuration (DC) [#pe9ddccf]
DCは、RCをベースに構築されており、展開方法を定義する。
-最も単純なケースでは、新しいRCを作成するだけで、[[ポッド>Kubernetes#j268603c]]を起動できる。
-イメージの移行が可能になり、RCの作成前または作成後に実行されるフックも定義される。

***Replication Controllers (RC) [#y08253d8]
必要な数の[[ポッド>Kubernetes#j268603c]]が存在することを指定して保証する。
-例えば、サーバを3つの[[ポッド>Kubernetes#j268603c]]に常にスケーリングする場合は、RCが必要。
-RCは、"自己修復"する方法。RCなしでは、[[ポッド>Kubernetes#j268603c]]は自動的に再起動されない。

**イメージ関連 [#t869c77f]

***Build Configuration [#tf47d740]
次の4つの情報を記載することで、[[Dockerイメージ>#k4a925fc]]の作成を行なう。

-[[めもめも>#v99e6a7f]]の説明
--イメージ作成方法、必要なファイルの入手先
---イメージの作成方法([[Dockerファイル>#q66f4b6a]]、もしくは、[[s2i>#v9b3a09b]])
---イメージの作成に必要なファイルの入手先(GitHubのリポジトリなど)

--[[Image Stream>#r01d6b00]]とタグ名
---出発点とするイメージが登録された[[Image Stream>#r01d6b00]]とタグ名
---完成したイメージを登録する[[Image Stream>#r01d6b00]]と付与するタグ名

-別の説明
--最低限、ビルド・チェーンには次のものが必要。
---ビルド・イメージのビルド設定
---ランタイム・イメージのビルド設定
---ランタイム・イメージ用のインラインドッカーファイル
---ランタイム・イメージを使用するデプロイメント設定

--次のオプションが推奨されている。
---[[Image Stream>#r01d6b00]]
---ソースプロジェクトに基づくビルド・イメージのトリガ
---ビルド・イメージに基づくランタイムビルドのトリガ

-参考

--chaining-builds

---OpenShift Origin Latest > Developer Guide~
Advanced Build Operations - Builds > Chaining Builds~
https://docs.openshift.org/latest/dev_guide/builds/advanced_build_operations.html#dev-guide-chaining-builds

---裏では[[Docker multi stage build>Docker#o9bb2f8b]]が使われているものと思われる。

***source-to-image (s2i) [#v9b3a09b]
-Red Hatが主催するオープンソース・プロジェクト。
-[[Dockerファイル>#q66f4b6a]]を使用にせずに、スクリプトを用いてイメージの作成を自動化する。

-目標
--[[Dockerイメージ>#k4a925fc]]を構築するためのツール。
--[[Dockerイメージ>#k4a925fc]]使用してDockerを実行する準備ができる。

-機能
--[[Dockerイメージ>#k4a925fc]]にソースコードを注入し、
--[[Dockerイメージ>#k4a925fc]]を組み立てることで、
--すぐに実行できるイメージを生成する。

--増分ビルドによる再利用をサポート
---以前にダウンロードした依存関係、
---以前構築した成果物など

-OpenShiftは、
--「ビルドポッド」と呼ばれる特別な[[ポッド>Kubernetes#j268603c]]内でS2Iプロセスを実行する
--[[Dockerファイル>#q66f4b6a]]からの[[Dockerイメージ>#k4a925fc]]の作成に加え、
--GitHub、GitLab、...のGitリポジトリと連携してカスタム・ビルドをする。

-参考
--OpenShift v3 と source-to-image (s2i)~
https://qiita.com/nak3/items/6407c01cc2d1f153c0f1
--OpenShiftのsource-to-image (s2i)をすごく簡単に説明するよ - nekop's blog~
https://nekop.hatenablog.com/entry/2015/12/18/114610

**レジストリ関連 [#ecd4f4bd]

***Image Stream [#r01d6b00]
OpenShiftには[[Kubernetes]]に無いImage Streamというオブジェクトがある。

-概要
--内部的にタグに対応する[[Dockerレジストリ>#n4955731]]を管理する。
--それに追加で大きく以下の三つの機能を提供する。
---[[Dockerレジストリ>#n4955731]]のタグにpushされたイメージの履歴を保持する機能。
---Image Streamのタグが更新されたら、[[Dockerレジストリ>#n4955731]]に~
pushなどのアクションを自動的に起動できるImageChange更新トリガ機能
---OpenShift内部レジストリとの連携・イメージキャッシュ機能

-バージョン管理~
Image Streamによるイメージの種類は大きく次の3つに分かれる。

--ベースイメージ = 公式RHELイメージ~
OSレベルのファイルのみが入ったイメージ

--開発テンプレート・イメージ = 開発環境イメージ~
開発に必要なフレームワークなどが入ったイメージ

--アプリケーション・イメージ~
実行可能なアプリケーションが入ったイメージ
--- = 開発中アプリイメージ
--- = 開発済みアプリイメージ
--- = テスト済みアプリイメージ

-[[Dockerファイル>#q66f4b6a]]と[[source-to-image (s2i)>#v9b3a09b]]の使い分け
--ベースイメージから開発テンプレート・イメージを作る際は[[Dockerファイル>#q66f4b6a]]を使用
--開発テンプレート・イメージからアプリケーション・イメージを作る際は[[s2i>#v9b3a09b]]を使用

**テンプレート [#z02ad51f]

***概要 [#s140a3e4]
-個々のコマンドを個別に実行すると、面倒でエラーが発生しやすくなる。
-この設定はすべて1つのテンプレートにまとめることができる。
-コレを使用して完全なリソースセットを自動的に生成できる。

-「[[KubernetesのHelm Chart>Kubernetes#fcbed959]]」にOpenShiftの皮を被せたモノに近いらしい。
-前述の[[イメージ関連>#t869c77f]]、[[レジストリ関連>#ecd4f4bd]]の結果を統合してコンテナを立ち上げる。

***作成方法 [#j2993ae9]
-特定の値のパラメータを定義
--DBのユーザ名
--DBのパスワードなど

-リポジトリへの登録
--テンプレートをバージョン管理システムに保存し、
--外部URLからOpenShiftにロードすることもできる。

***利用方法 [#v31c8860]
-管理者は、全ユーザがポータル経由でテンプレートを利用できるようにできる。
-ユーザはテンプレートを作成し、他のユーザと共有できる。

*ocコマンド [#t172a1fe]
-[[ファースト・ステップ>#h4660545]]
-[[セカンド・ステップ>#i670836e]]

で説明されていたコマンド。

**インストール確認 [#nf6eb3ce]
-ocコマンドを実行
 >oc

-バージョン情報
 >oc version

**ログイン [#uadf7b90]

***oc login [#n82c3ead]
ログインする。

-アカウント情報を入力してログイン
 oc login URL

-トークンを使用してログイン
 oc login URL --token=XXXXX

***oc logout [#zcfe60d0]
ログアウトする。

**新規作成 [#qf754be8]

***oc new-project [#o7d1d51c]
[[プロジェクト>#me26efb8]]を作成する。
 oc new-project <projectname>

***oc new-app [#nfa9dcdd]
-リソースをバックグラウンドで作成する。
-[[サービス>#l875353c]]に一連の[[ポッド>Kubernetes#j268603c]]をマップする。

***oc create [#l447912d]

-oc create -f <file_or_dir_path>~
構成ファイルを解析し、ファイルの内容に基づいて~
1つ以上のOpenShiftオブジェクトを作成。
 
**参照系 [#c4f4026f]

***oc get [#y80f6ad9]
-以下のオプションを指定して取得できる。
--一覧
 <resources>
--詳細
 <resource> <name> or <resource>/<name>

-resource
--project(s)
--service(s)
--route(s)
--pod(s)
--dc~
[[Deployment Configuration (DC)>#pe9ddccf]]
--rc~
[[Replication Controllers (RC)>#y08253d8]]
--build(s)

***oc describe [#i739e841]
-以下のオプションを指定して描画できる。
--一覧
 <resources>
--詳細
 <resource> <name> or <resource>/<name>

-resource
--project(s)
--service(s)
--route(s)
--pod(s)
--build(s)
--is(s) ... [[Image Stream>#r01d6b00]]

**更新系 [#x69dbd40]
***oc delete [#h3481083]
-project

-pod

**設定関連 [#c9dc6ee1]

***oc expose service [#u8e985ad]
レプリケートされたアプリケーションをサービスまたはルートとして公開する。

***oc env [#w40ad2ed]
-リソースの環境変数を操作する。
--一覧
 <resources>
--詳細
 <resource> <name> or <resource>/<name>

-resource
--dc~
[[Deployment Configuration (DC)>#pe9ddccf]]

***oc scale [#o262e039]
[[Deployment Configuration (DC)>#pe9ddccf]]のレプリカ数を設定しスケール。

**ログ参照 [#d3884b53]

***oc logs [#h0537b6b]
・・・

**リモート接続 [#oce32888]

***oc rsh [#aad9e41b]
[[ポッド>Kubernetes#j268603c]]にRSHを確立

***oc exec [#o147b488]
[[ポッド>Kubernetes#j268603c]]内でコマンドを実行

*step by step的な [#yf291366]

**[[ファースト・ステップ>OpenShiftファースト・ステップ]] [#h4660545]

**[[セカンド・ステップ>OpenShiftセカンド・ステップ]] [#i670836e]

**[[OpenShiftの設定画面]] [#ic777aec]

*参考 [#h1ec0f0b]
-OpenShift - Wikipedia~
https://en.wikipedia.org/wiki/OpenShift

**openshift.com [#k1a9fe9f]

-Red Hat OpenShift

--What is OpenShift~
https://www.openshift.com/learn/what-is-openshift/

--Getting Started with OpenShift~
https://www.openshift.com/learn/get-started/

***OpenShift Blog [#g421efe7]
https://blog.openshift.com

***OpenShift Documentation [#r1487c77]
https://docs.openshift.com/index.html

-OpenShift > CLI Reference > Overview

--Enterprise 3.0~
https://docs.openshift.com/enterprise/3.0/cli_reference/index.html

--Enterprise 3.2~
https://docs.openshift.com/enterprise/3.2/cli_reference/index.html

**CTC教育サービス [#p895b365]
-コラム - クラウド時代のオープンソース実践活用

--第83回 Docker/OpenShiftで実現する「プライベートPaaS」の全体像~
https://www.school.ctc-g.co.jp/columns/nakai/nakai83.html

--OpenShiftの機能紹介

---第84回 Dockerイメージのバージョン管理~
https://www.school.ctc-g.co.jp/columns/nakai/nakai84.html

---第85回 Dockerイメージの自動ビルド~
https://www.school.ctc-g.co.jp/columns/nakai/nakai85.html

---第86回 コンテナの自動デプロイメント~
https://www.school.ctc-g.co.jp/columns/nakai/nakai86.html

**めもめも [#v99e6a7f]
-OpenShift Origin構築手順メモ~
http://enakai00.hatenablog.com/entry/2015/12/27/221936

-OpenShift OriginによるDockerイメージ管理

--(1)〜イメージストリームを理解する~
http://enakai00.hatenablog.com/entry/2015/12/28/203731

--(2)〜Dockerfileによるイメージビルドを自動化~
http://enakai00.hatenablog.com/entry/2015/12/28/215957

--(3)〜Dockerfileからイメージを作成する際のお作法~
http://enakai00.hatenablog.com/entry/2015/12/30/092724

--(4)〜S2Iによるイメージビルド~
http://enakai00.hatenablog.com/entry/2016/01/03/174854

--(5)〜複数コンテナの連携設定~
http://enakai00.hatenablog.com/entry/2016/01/03/200920

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS