「[[.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