Translate

2013年6月28日金曜日

Get Started on OpenShiftを翻訳する

いきなりOpenShift Originで勉強するより
まずOpenShift Onlineを試したほうが良いと
ようやく気づき、
初心に戻って

Get Started on OpenShift

のとおりに試して見ることにした。


以下、翻訳した内容を貼り付けておく。
(at your own riskでお願いします)


ドキュメントは、Web、コマンドライン、IDEの3つに分かれている。

実行環境(サーバ)は、OpenShift Online(RedHatのパブリックPaaS、無料でアプリ3つまで)ベースで書かれているが、1章をOpenShift Originで作ったオンプレミスサーバに差し替えて考えれば、どちらの場合でもGet Start1できるはずだ。

読んだ記事にも書いてあったが、たしかに本当にCloud Foundryに似ている。App EngineやCloud Foundryを知っていると、OpenShiftの理解が早いと思う(もちろん開発者としての理解は)。

Web

  • 最も早くスタートする方法
  • プラウザからアプリを素早く構築
  • 新規アプリケーションの開始、管理とモニタリング向き



OpenShiftのWebコンソールは、インストールが不要で、コマンドライン操作不要でアプリケーションんを構築・管理するためのパワーを与えてくれます。コンソールはアプリケーションの構築や、アプリケーションを保管する追加の機能を提供を支援します。例として、MongoDB、MySQL、Jenkins continuous integration buildsなどが含まれます。


1. アカウントのサインアップ


OpenShiftアカウントごとに無料で3つのアプリケーションを構築することができ、クラウド内のこれらのアプリケーションの実行中の有益性を体験することができます。

(訳者注)
上記リンクを押すと新規アカウント作成(英語)画面がでるので、メールアドレス(アカウント名)、パスワード、bot対策の文字列を入力すると、メールアドレス先へ確認メールが飛ぶ。本文記載のリンクを踏むと登録完了。

2. コンソールを開いてアプリケーションを構築



コンソールを使ってすぐに稼働可能でコーディング可能なアプリケーションを簡単に構築することができます。Drupalのような協力なCMS(コンテンツ管理システム)や、業界標準のブログプラットフォームであるWordPressをボタンをクリックすることで開発します。

→クイックスタートはこちら


3. Gitをインストールしてコーディングを開始する(オプション)


ソースコードへ変更を加える準備ができたら、Gitバージョンコントロールプログラムを使ってOpenShiftへチェックインやコードの発行を直接行うことができます。The client tools installation pageに異なるプラットフォームごとのGitのインストールや、Gitを使ったインテグレーションを行う際のEclipseやVisual Studioのような有名な開発環境についての詳細情報が掲載されています。

 git clone ssh://...rhcloud.com/~/git/myapp.git/

ソースコードのダウンロードやアップロードを行うために、パブリックSSHキーでOpenShiftへ提供しなくてはなりません。(コピー・アンド・ペーストで)コンソール内のキーの設定後、アプリケーションのGit URLが表示されます。ソースコードリポジトリのローカルコピーを作成するgit cloneコマンドでURLをパスします。


4. 変更のOpenShiftへのアップロード


取得したコードを変更しOpenShiftへpushします。

  $ cd myapp
  $ vim php/index.php
  (エディタで修正して、":wq")
  $ git commit -a -m "My first change"
  $ git push


実行後、URLを参照して、変更が反映されていることを確認して下さい。

 →アプリケーションの変更開発についてはこちらを参照して下さい


$> rhc_ コマンドライン

  • どこでもコード、どこでも管理
  • どんなプラットフォームでもアプリやコードのフルコントロールが可能
  • コーディングやデバッギング、アプリケーション管理向き


以下の簡単なステップに従うことで、我々のパワフルなコマンドラインクライアントを試して下さい。

OpenShiftクライアントツールはRuby Gemとしてパッケージされています。あなたの環境で実行するためには、Ruby1.8.7以降、gemをインストールできる権限(Linuxの場合root権限でのアクセス)、Gitバージョンコントロールツールが必要となります。クライアントツールの詳細なヘルプはDeveloper Centerにあります。


1. アカウントのサインアップ


OpenShiftアカウントごとに無料で3つのアプリケーションを構築することができ、クラウド内のこれらのアプリケーションの実行中の有益性を体験することができます。


2. Windows | Mac OS X | FedoraおよびRedHat Enterprise Linux | Linux 上へクライアントツールをインストール


 <Windowsの場合>


 RubyInstaller 1.9 for Windowsをダウンロードし、インストールして下さい。
 重要!"Add Ruby executables to your PATH"オプションをチェックすること。

 Git for Windowsをダウンロードし、インストールして下さい。
 重要!"Run Git from the Windows Command Prompt"オプションをチェックすること。

 Windowsのコマンドプロンプトからgemをインストールして下さい:
  $ gem install rhc

 クライアントツール最新版へ更新したい場合、gem updateコマンドを使用します:
  $ gen update rhc


 <Mac OS Xの場合>


 Mac OS X上では、Full Xcode Suite もしくは git for OS Xのいずれかのインストールが必要です。これらのパッケージは、RubyおよびGitのインストール及び設定が含まれています。

 Gemをインストールして下さい:
  $ sudo gem install rhc

 クライアントツール最新版へ更新したい場合、gem updateコマンドを使用します:
  $ gen update rhc



 <FedoraおよびRedHat Enterprise Linuxの場合>


 YUM経由でOpenShift前提条件をインストールして下さい。
  $ sudo yum install rubygems git

 (RHEL 6.2のみ)RHN Classicを使用している場合は、"rubygems"パッケージをインストールしてRHEL6.2オプショナルチャンネルを追加する必要があります。
  $ sudo rhc-channel --add --channel=rhel-x86_64-server-optional-6

 Gemをインストールして下さい:
  $ sudo gem install rhc

 クライアントツール最新版へ更新したい場合、gem updateコマンドを使用します:
  $ gen update rhc


 <Linuxの場合>


 前提となるパッケージをインストールして下さい:Ruby1.8.7以降、rubygems、git

 Gemをインストールして下さい:
  $ sudo gem install rhc

 クライアントツール最新版へ更新したい場合、gem updateコマンドを使用します:
  $ gen update rhc


 →より詳細のヘルプは、クライアントインストレーションガイドを読んで下さい。


3. 環境のセットアップ

OpenShift ログインアカウントおよびパスワードを使って、rhc setupを実行してOpenShiftへ接続し、アプリケーションの一意な名前空間を作成します。

ウィザード画面からSSHキーのアップロードを行い、Gitを使った通信が可能になります、もし必要な設定が誤っているならば確認して下さい、そして次にドメイン名を作成します。OpenShiftにおけるドメイン名はアプリケーションのURLの一部となります。ドメイン名はすべてのOpenShiftユーザのなかで一意となります。このため賢くクリエイティに選択して下さい!

ウィザード実行時に、あなたのログインIDが含まれる設定ファイル「<ホームディレクトリ>/.openshift/express.conf」が作成されます。もし再びセットアップする場合は、rhc setupから再び実行して下さい。
 $ rhc setup
 OpenShiftコマンドラインインターフェイスの対話型セットアップが開始される
 openshift.redhat.comへ接続するために、OpenShiftログインID(電子メールもしくはRedHatログインID)


4. 最初のアプリケーションを作成


これで、アプリケーションが作成可能な状態になりました。
  $ rhc app create myapp php-5.3
  Password: (アカウントのパスワード)

このコマンドで、アプリケーションのためのリモートgitリポジトリが作成し、ローカルのカレントディレクトリにクローンを作成します。

OpenShiftは多くのアプリケーションスタックを提供します。rhc cartridge listを実行して、すべてのオプションを確認して下さい。

あなたのアプリケーションのドメイン名は「<アプリケーション名>-<名前空間>.rhcloud.com」となります。 このため、exampleコマンドによって作成されたアプリケーションは、myapp-mydomain.rhcloud.com となります。


5. 変更と更新


アプリケーションの構築の最初のステップは終わりました。ここからは、自分のアプリケーションを構築していくことになります。

gitをサポートするIDEかエディタを使ってください。もしサポートしていないのであれば、2つの簡単なコマンドを使う方法もあります。

  $ cd myapp
  $ vim php/index.php
  (エディタで修正して、":wq")
  $ git commit -a -m "My first change"
  $ git push


実行後、URLを参照して、変更が反映されていることを確認して下さい。

 →開発のためのフレームワークの素晴らしいガイドを確認して下さい


6. 次のステップ


これで、アプリケーション開発のスタートを着ることができました。これからはOpenShftを用いたいろんな作業を行うことができます。以下のリンクのビデオ、ブログやユーとリアルを参照して下さい。

</> IDE

IDEを使った迅速な開発
Eclipse開発環境を使ったシームレスなインテグレーション
コーディングやデバッギング、アプリケーション管理向き

Eclipseベースの統合開発環境であるJBoss Developer Studioは、リッチなWebアプリケーションやトランザクショナルな企業アプリケーションを構築するために必要なすべてを開発者に提供します。指先ひとつでOpenShift環境へのアプリケーションの作成、編集、配置する機能を統合します。

1. アカウントのサインアップ


OpenShiftアカウントごとに無料で3つのアプリケーションを構築することができ、クラウド内のこれらのアプリケーションの実行中の有益性を体験することができます。今日から始めましょう。


2 JBoss Developer Studioのダウンロード(要サインイン)


 (訳者注)
 章題のリンク先はJBossサイトになっています。
 Cloud FoundryでいうところのSTS相当です。

 ドキュメント


 ビデオ



2013年6月26日水曜日

OpenShift Origin を Live CDからVMware Player上へインストールする

OpenShiftでぐぐると最初に出てくるのが

“使用”より“構築”で学ぶオープンPaaS「OpenShift」 (1/5)http://www.atmarkit.co.jp/ait/articles/1304/25/news014.html

ここにかいてある手順を参考にOpenShift Originをインストールしてみた。

 先に書いておくが、
 
 OpenShift Origin GitHub 
 http://openshift.github.io/
 
 にVMware Playerイメージもあるので、
 インストールが面倒な人はこっちのほうが簡単だと思う。
 (実は、ためしていない)
 Cloud Foundryも用意してくれてたからなあ..


この手順では、BrokerとNodeが同一PC(使ったのは仮想マシンだけど)上に構築される。
もっと簡単に言うと、開発クライアントも実行も全部このマシンで動作する。

DHCP管理下の物理PCでも大丈夫だとおもう。


上記サイトと異なるのは
  • Virtual BoxではなくVMware Playerを使用
  • VMware Playerホスト側はproxy環境下でインターネット接続
の2点のみ。


---------------

1. Live CDのダウンロード

https://openshift.redhat.com/app/download/remix へアクセス
 ダウンロードするにはアカウントを作らないといけないので
 "Create One"を選択し、メールアドレスとパスワードを登録する。
 その後再度上記サイトへアクセスしてログインすると
 ダウンロード開始する。
 ※1.3GBなので、結構時間が掛かる。私の環境で1時間半かかった..

2. 仮想マシン準備

VMware Playerを起動
 「新規仮想マシンの作成(N)」を選択
 「インストーラディスクイメージファイル(M)(iso):」
  ファイルはLive CDのイメージISOファイルパスを指定
 「次へ(N)」

 「Linux(L)」、バージョン「Fedora64ビット」
  LiveCDを使うとFedora16上に構築される
 「次へ(N)」

 仮想マシン名「OpenShift Origin」
 場所は好きなディレクトリで
 「次へ(N)」

 「仮想ディスクを複数のファイルに分割(M)」
 「次へ(N)」

 「ハードウェアカスタマイズ(C)」
 「メモリ」を選択
 この仮想マシンのメモリ「2048MB」
 「プロセッサ」を選択
 プロセッサコアの数(C)「2」
 「閉じる」

 「完了」

3. Live CDを使ってインストール

「OpenShift Origin」を選択
 「仮想マシンの再生(L)」

 「Start Openshift_Origin」でリターン
 ※Fedora16があがり、コンソールとブラウザが立ち上がる

 右上の「Live System User」>「System Settings」
 「Keyboard」

 「Layout Settings」を押す
 「Layouts」タブを選択
 「+」を押す
 「Japanese」を選択し「Add」を押す
 「English(US)」を選択し「-」を押す
 ウィンドウ右上の「X」を押す

 ※コンソールが裏で上がっているのでAlt+Tabなどでスイッチ
 $ xhost +
 $ su
 # liveinst
 ※liveinstコマンドでCDから
  仮想マシンの20GB HDDへ
  インストールを開始する

 ※Generic Installerウィンドウがあがる
 「Japanese」を選択
 「Next」を押す

 「Next」を押す

 「Yes, discard any data」を押す
 ※20GB HDDに何かファイルが残ってても無視する

 Hostname「broker.example.com」
 「Next」を押す

 「Tokyo」を選択
 「Next」を押す

 Root Password「passmaster」
 Confirm「passmaster」
 ※ここでは、ユーザ/パスワードは
  @IT記事のまま使用してます
 「Next」を押す

 「Create Custom Layout」を選択
 「Next」を押す

 ※ここからHDDパーティション構成
 「Hard Drive>sda>Free」を選択し「Create」を押す
 「Standard Partition」を選択し「Create」を押す

 File System Type「BIOS Boot」
 Size(MB)「1」
 「Fixed size」を選択
 「OK」を押す

 「Hard Drive>sda>Free」を選択し「Create」を押す
 「Standard Partition」を選択し「Create」を押す

 Mount Point「/boot」
 File System Type「ext4」
 Size(MB)「500」
 「Fixed size」を選択
 「OK」を押す

 「Hard Drive>sda>Free」を選択し「Create」を押す
 「LVM Physical Volume」を選択し「Create」を押す

 File System Type「physical volume(LVM)」
 「Fill to maximum allowable size」を選択
 「OK」を押す

 「Hard Drive>sda>sda3」を選択し「Create」を押す
 「LVM Volume Group」を選択し「Create」を押す

 Volume Group Name「vg」
 「add」を押す

 Mount Point「/」
 File System Type「ext4」
 Logical Volume Name「lv_root」
 Size(MB)はそのまま
 「OK」を押す

 「OK」を押す

 「Next」を押す

 ※Partitioning Warningsダイアログ
 「Yes」を押す

 ※Format Warningsダイアログ
 「Format」を押す

 ※Confirmダイアログ
 「Write Changes to Disk」を押す

 そのまま「Next」を押す
 ※しばらくかかる

 ※Congraturations, your Generic installation is complete.
 ※ここでCDは刺したまま(まだCD上のバイナリで動作しているので)
 「Reboot」を押しリブート
 ※実PCの場合、ここでCDを抜かないと
  またLiveCDからブートしようとするが、
  VMware Playerの場合はそのまま上がった

 ※GNU GRUB version 1.99
 「Generic Linux, with Linux 3.4.6-1.fc16.x86_64」を選択
 ※そのまま放置でもよい

 ※Fedora16 初期設定ウィザードを完了させる
 ※ホットドッグの絵(Welcome)画面
 「Forward」を押す

 「Forward」を押す

 「Forward」を押す
 ※時刻を治したい人は直す

 Full Name「Shifter」
 Username「shifter」
 「Add to Administrators group」をチェック
 Password「shifter」
 Confirm Password「shifter」
 「Forward」を押す

 ※VMware Playerウィンドウを操作する
 画面左上の「Payer>管理>仮想マシン設定(S)」を選択
 「CD/DVD(IDE)」を選択
 「物理ドライブを使用する」をチェック(自動検出)
 「OK」を押す

 ※OpenShift Origin - VMware Playerダイアログ
 「はい(Y)」を押す

 ※Hardware Profileへ戻る
 「Do not send profile」を選択
 「Finish」を押す
 ※しつこくダイアログが出るがDo not sendでよい
 ※再起動

 「Shifter」をクリック
 パスワード「shifter」でログイン
 ※GNOMEがエラー云々のダイアログが出る
  VMware toolsをインストールして解消させる

 ※VMware Playerウィンドウを操作する
 画面左上の「Payer>管理>VMware Toolsのインストール(T)」を選択

 ※コンソールへ
 $ su
 Password: passmaster
 # cd /tmp
 # tar xvfz /media/VMware\ Tools/VMwareTools-9.2.3-1031360.tar.gz
 ※アーカイブが/tmp以下へ展開される
 # cd vmwafre-tools-distrib
 # ./vmare-install.pl
 ※対話型インストールだが原則「リターン」でよい
 ※もし何度も同じ選択になった場合のみ選択肢を変更する
 ※インストールが終わると
  画面下の「VMware Toolsをインストールしています」という帯が消える

Enterを連発している最中に

The path "" is not a valid path to the 3.4.6-1.fc16.x86_64 kernel headers.

Would you like to change it? [yes]

でループするので、ここだけはnoを選択する。

カーネルヘッダがないので、本来はカーネルの
インストールをしてパス先を用意する必要があるのだけど、
ここではお試しなのでとりあえずスキップさせる。


 # exit
 $ cd
 $ sudo sed -i -e '/gpgkey=/aexclude=ruby \
 > ruby-devel ruby-irb ruby-libs ruby-rdoc' \
 > /etc/yum.repos.d/fedora-updates.repo
 ※上記は1行で書いても良い
 [sudo] password for shifter: shifter
 $ su
 Password: passmaster
 # chkconfig httpd on
 # service httpd start
 # chkconfig stickshift-broker on
 # service stickshift-broker start
 # chkconfig --del livesys
 # chkconfig --del livesys-late
 # chkconfig --del livesys-late-openshift
 # exit
 $ cat ~/.openshift/express.conf
  # SSH key file
  #ssh_key_file = 'libra_id_rsa'
  libra_server=localhost
  # Default rhlogin to use if none is specified
  default_rhlogin=admin
 ※上記のcatは中身の設定確認のみ
 # sudo reboot
 [sudo] password for shifter: shifter
 ※再起動


4. 動作確認

4.1 PHPアプリ"hello"

※ログイン画面
 「Shifter」をクリック
 パスワード「shifter」でログイン
 ※GNOMEがエラー云々のダイアログが出なくなる

 ※コンソール
 $ cd
 $ mkdir workspace
 $ cd workspace
 $ rhc domain create -n hara2 -l admin
 Password: admin
 ※hara2はOpenShiftのドメイン名
  アプリのURLが"http://xxx-hara2.example.com"になる
  xxxはアプリ別に名前をつける
 ※adminはOpenShiftのアカウント名、パスワードもadmin
 ※途中1度聞いてくるので「yes」と入力
 $ rhc app create -a hello -t php-5.3
 Password: admin
 ※helloはOpenShift上のアプリケーション名
  アプリのURLが"http://hello-hara2.example.com"になる
 ※adminはOpenShiftのアカウント名、パスワードもadmin
 ※途中1度聞いてくるので「yes」と入力
 ※これでhelloアプリ(初期画面)が上がっている

 ※ブラウザへ
 URL「http://hello-hara2.example.com」
 ※Welcome To OpenShiftという画面が出れば正常動作

 ※アプリ更新を試す
 ※コンソールへ
 $ cd ~/workspace/hello
 $ sed -i 's/Welcome to OpenShift/Welcome to Hara2 OpenShift/' php/index.php
 $ git commit -am "changed"
 $ git push

 ※再びブラウザへ戻る
 タブ「Welcome to OpenShift」を選択
 再読み込み(URL欄の一番右のアイコンを押す)
 ※Welcome To Hara2 OpenShiftと表示されれば正常動作

4.2 jBossアプリ"hellojboss"

※Eclipse+プラグインをインストールして
  hellojbossアプリを作成してブラウザで表示してみる
  というシナリオ

 ※ブラウザ
 URL「http://www.eclipse.org」を開く
 「Get Start now... Download Eclipse」を押す

 「Eclipse IDE for JavaEE Developers」の「Linux 64Bits」を押す

 「[Japan] Japan Advanced Institute of Science and Technokigy[http]」を押す
 ※上記のサイトではない場合もある

 「Save File」を選択し「OK」を押す
 ※しばらくかかる(~/Downloadsへ格納される)

 ※ダウンロード完了後コンソールへ
 $ mkdir ~/applications
 $ cd ~/applications
 $ tar xvfz ~/Downloads/eclipse-jee-juno-SR2-linux-gtk-x86_64.tar.gz
 ※アーカイブが展開される
  実行する時期によりバージョンがあがり
  ファイル名が変わることがある
 $ cd
 $ mkdir ~/workspace/eclipse
 $ ~/applications/eclipse/eclipse -data ~/workspace/eclipse

 ※Eclipse起動
 メニューバー「Window>Preferences」を選択
 「Generic>Network Connections」を選択
 Active Provider「Manual」
 Proxy entries「HTTP」を選択し「Edit..」を押す
 Proxy設定は省略
 ※出てきた画面に各自の環境に合わせたproxy設定を行う
 「OK」を押す

 メニューバー「Help>Eclipse Marketplace...」を選択
 タブ「Search」のFind「jBoss」を入力し「Go」を押す
 「JBoss Tools(Juno)」の「Install」を押す
 「Next」を押す
 「I accept the terms of the license agreements」を選択
 「Finish」を押す

 ※Security Warningダイアログ
 「OK」を押す

 ※Software Updatesダイアログ
 「Yes」を押す

 ※JBoss Tools Usageダイアログ
 「Yes」を押す
 ※上記のYesは、JBoss Tools teamへ
  統計データを送ることを許可する場合
  各自で変更のこと

 ※ここで@ITの記事ではEGitもインストールするが
  上記のバージョンのEclipseはすでにこの段階で
  EGit2.5(作業時の最新は3.0)が入っていてエラーになる
  このため省略した

 「Welcome」タブの「X」を押して消す

 ※ここからプラグインを使って"jbosshello"アプリを作成
 ※画面中央上部に「JBoss Central」が表示される
 「CreateProject」欄の「OpenShift Application」を押す

 ※New OpenShift Applicationダイアログ
 Username「admin」
 Password「admin」
 「Save password(could trigger secure storage login)」を選択
 「Next>」を押す

 ※Secure Storageダイアログ
 Password「admin」
 Confirm password「admin」
 「OK」を押す

 ※Secure Storageダイアログ(小)
 「Yes」を押す

 ※Password Recoveryダイアログ
 Question1のQuestion「What is your mother's family name?」
 Andwerにあなたの母親の姓を入れる
 Question2のQuestion「What is your pet's name?」
 Andwerにあなたのペットの名前を入れる
 ※もちろん上記は適当に変更して良い
 「OK」を押す

 ※New OpenShift Applicationダイアログ
 Name「hellojboss」
 Type「jbossas-7」
 Embeddedable Cartridges「mysql-5.1」のみチェック
 「Next>」を押す

 ※ターミナルへ
 $ mkdir ~/git
 $ chmod a+rw ~/git

 ※EclipseのNew OpenShift Applicationダイアログへ
 「Next>」を押す

 「Use default location」をチェック
 Location「/home/shifter/git」
 「Finish」を押す

 ※ブラウザへ
 URL「http://hellojboss-hara2.example.com」を開く
 ※Welcome To OpenShift, JBossAS7 Cartridgeと表示されれば
  正常動作している

                          以上
---------------

..Cloud Foundryと比較すると明らかに面倒..つまりこなれてない..
RHELだけでなくUbuntuも取りこんでくれないかな..


よしとりあえずシングル構成はこれでいいから
マルチノード構成どうすれば出来るのか調べよう..
とおもったら、

これからのOpenShiftの話をしよう
http://www.slideshare.net/jacopen/openshift-13407714
を読んだら..

あれ、まだできないのか..
じゃあUbuntu派の私には旨味がほとんどないなあ..
このスライド書いた人、比較記事の人か..


【徹底比較】2大Open Paas、Cloud FoundryとOpenShiftの強み/弱み
http://techtarget.itmedia.co.jp/tt/news/1206/18/news02.html



なるほどCloud Foundryと比べても1年遅れか..
ただでさえ日本人はVMware好きがおおいしなあ..

たしかにWeb UIもないし。

StickShift Origin Web UI
https://www.openshift.com/forums/openshift/stickshift-origin-web-ui


でもGoogle Trendさまは、OpenShiftのほうが人気だとのたまう..


日本だけにすると、以下のグラフになる。


..バズワードとしても、国内じゃ両方起爆失敗?


ただ、Cloud Foundry、OpenShiftとも
パブリックPaaSとの親和性をうたっているのだけど、
エンタープライズシステム(SOA+BPM/BRM)の基盤としては..
結局チャネル層レベルだけなんだよなあ..

コマーシャルとのチャネルがあまりない企業だと
PaaS自体旨味があんまりない..

さて、どうするか..

p.s.
上記、作業していたのが2013/6/26で、
ちょうどEclipseがJunoからKeplerへ変わる途中で
JavaEE版はJuno、素EclipseがKeplerと微妙なダウンロード状況だったので
Eclipseまわりはごっちゃになってるかもしれません。
ご容赦願います..

2013年6月24日月曜日

OpenShiftのアーキテクチャ概要を翻訳する

CloudFoundryだけでなく、そろそろOpenShiftも
なんぞやということくらいはわかっていないと
社会についていけなくなるかもしれない..


なので、アーキテクチャについてだけドキュメントを翻訳して
勉強してみた。


なお、原本は以下のサイトです。

OpenShift
Architecture Overview
https://www.openshift.com/wiki/architecture-overview


翻訳内容についてはat your own riskで参照下さい。


---------------

アーキテクチャ概要


OpenShift Origin


OpenShift Origin はアプリケーションの作成、配置、管理をクラウドの内部で可能にします。OpenShift Originは、ディスクスペース、CPUリソース、メモリ、ネットワーク接続、ApacheもしくはJBossサーバを提供します。開発されるアプリケーションのタイプによって、テンプレートファイルシステムレイアウトが提供されます(例えば、PHP、Python、Ruby/Rails)。またアプリケーションのために1つの制限されたDNSも管理します。

プラットフォーム概要






2つの基本機能単位、インターフェイスを提供するブローカ(Broker)と、アプリケーションフレームワークを提供するカートリッジ(Cartridges)に分類されます。

  • ブローカ(Broker)は、すべてのアプリケーション管理アクティビティのための単一の接続ポイントです。ブローカはユーザログイン、DNS、アプリケーションの状態、アプリケーションの一般的なオーケストレーションに責任を持ちます。顧客は直接ブローカへ接続詞ません;代わりにRESTベースAPI経由で、Webコンソール、CLIツール、もしくはJBossツールを使ってブローカとやりとりをおこないます。
  • カートリッジ(Cartridges)は、ユーザアプリケーションを実行するために必要な実際の機能を提供します。現在、JBoss、PHP、Rubyなどの多くの言語カートリッジがあり、同様にPostgres、MySQL、Mongoなどのような多くのDBカートリッジがあります。


システムリソースとアプリケーションコンテナ



プラットフォームにより提供されるシステムリソースとセキュリティコンテナはギア(Gears)ノード(Nodes)です。

  • ギア(Gears):ギアは、1つ以上のカートリッジを実行するためのリソース制約のあるコンテナを提供します。カートリッジに対して、RAM容量や有効なディスク容量の制限があります。
  • ノード(Nodes):リソース共有を有効にするために、複数のギアを単一の物理マシンもしくは仮想マシン上で実行します。このマシンをノードと呼びます。すべてのアプリケーションが同時に有効にはならないため、一般的にギアはノード上にオーバーアロケートされます。


アプリケーション

 

  • ドメイン(Domain):ドメインはDNSに直接関係しているわけではない;代わりに、すべてのアプリケーションや定義されたユーザのために一意な名前空間を提供する。ドメイン名はアプリケーション名に追加され、最終的なアプリケーションURLを編成する。
  • アプリケーション名(Application Name):アプリケーションの名称を識別する。アプリケーションへアクセスするための最終的なURLは、https://[アプリケーション名]-[ドメイン].rhcloud.com 形式となる。
  • エイリアス(Aliases):ユーザはプラットフォームにてエイリアスを登録することでアプリケーションのDNS名を提供することができる。
  • アプリケーションの依存関係(Application Dependencies):ユーザはカートリッジを特定してアプリケーション実行要求を行う。現在2つのタイプのカートリッジがある。
  • フレームワークカートリッジ(Framework Cartridges)は、Webページを提供する機能をもつ主なカートリッジである。すべてのアプリケーションは1つのフレームワークカートリッジを保有し無くてはならない。
  • エンベデッドカートリッジ(Embedded Cartridges)は、DBやDBウェブインターフェイスのような支援カートリッジである。多くのエンベデッドカートリッジは、単一のアプリケーションとして追加可能である。
  • アプリケーションGITリポジトリ(Application GIT Repository):各アプリケーションは、1つのGITリポジトリを取得する。ユーザはリポジトリ上のコードを修正し、git pushを実行することで、コードをデプロイする。
注意:
近い将来、どちらのカートリッジを一緒にコロケートされそしてスケールされるべきかについての論述を支持して、エンベデッドvsフレームワークカートリッジは削除することになります。
アプリケーションとカートリッジ記述子についてのセクションを参照して下さい。


主なユーザとのやりとり


1. 単純なアプリケーション構築


このフローは単純なPHPアプリケーションの構築およびデプロイをおこなうケースを説明している。



2. Jenkinsを使ったアプリケーションのデプロイ


OpenShift OriginもまたすべてのアプリケーションのためにJenkinsベースのビルドワークフローを提供します。Jenkinsサーバは、ユーザギアの1つが使用する、分離したアプリケーションとして実行します。Jenkinsビルダエージェントもまた、SSH/REST APIを使ってブローカやビルドされたアプリケーションとやり取りを行う、分離したアプリケーションとして実行します。



4. ディスクリプタを使ったアプリケーションの記述


アプリケーションディスクリプタはアプリケーションビルドの宣言的手法の1つです。ディスクリプタは、name(名前)、version(バージョン)、depenmdencies(依存)などの属性を含んだYAMLファイルです。またそして、アプリケーションが要求されるアーキテクチャも含んでいます。ブローカ/コントローラはディスクリプタYAMLを使いアプリケーションの新規構築や変更を行うことができます、そしてディスクリプタ内のフィールド操作を多くのユーティリティREST APIが提供します。アプリケーションやカートリッジディスクリプタについては後続の章で詳細説明があります。





ディスクリプタからアプリケーションをビルドするために、ブローカはディスクリプタを解釈しアプリケーションのdependency(依存)をリゾルブします。それぞれのdependency(依存)はカートリッジディスクリプタに含まれているカートリッジによって満たされます。アプリケーションディスクリプタのように、カートリッジディスクリプタはコンポーネントやカートリッジに寄ってサポートされる機能を定義します。

アプリケーションやカートリッジディスクリプタを使用することで、ブローカは一緒にコンポーネントをグループ化することができ、またどのギアをインスタンス化するかなどを決めることができます。


論理ビュー



パッケージ構造


パッケージ依存関係とプラグイン選択に関する情報のために「パッケージ構造」を参照して下さい。

StickShift


StickShiftは、OpenShift OriginプラットフォームのコアAPIパートです。PaaSプラットフォームの作成やカートリッジのデプロイのために必要なすべての基本APIを提供します。3つのパートで構成しています。

  1. コントローラ(Controller)は、REST API、ビジネスロジック、PaaSプラットフォームの状態管理を含む Rails エンジン(プラグイン)である。またDNS管理、認証、データ/状態ストレージ、そしてブローカとノードの間のコミュニケーションのためのプラグインAPIの集合でもある。
  2. ノード(Node)は、ギアやアプリケーションコンポーネントのライフサイクルの管理に必要なAPIの基本的な集合を含む。
  3. 共通(Common)は、コントローラやノードコンポーネントが使用するデータ構造を含む。

Proxyポート




Proxyポートは、ロードバランシングや関連するアプリケーションギアに提供するために内部サービスを露出させることを許可する。

それぞれのギアは5つのProxyポートを割り当てることができます。これらはルータブルアドレスとして露出するので、関連するギアは分離されたノード上にあっても接続することが可能です。

Proxyポートはシステムサービスとして実行中のHAProxyにより有効化され、低水準TCP接続をproxyへ設定されます;Webロードバランシングサービスを提供するHAProxyの対置として。将来的にそれらは、アプリケーションディスクリプタによって記述されるTCP接続を提供する基礎メカニズムとなります。

Proxyポートはノード集合の外部から直接アクセスすることができません。



ギアファイルシステムレイアウト

 .                                              
 ├── git
 # ギア git リポジトリ。
 # Webフレームワークカートリッジにより初期設定される。
 │   └── [アプリケーション名].git
 |       |
 # ユーザによる変更を避けるためルートによって所有される
 # 唯一のフックディレクトリ。
 │       ├── hooks                           
 |       |   |                                  
 |       |   |                                  
 │       │   └── pre-receive
 # Post受信フックをビルドやデプロイに割り当てる
 │       └── ... その他のgitディレクトリ     
 └── [アプリケーション名]
 # Jenkinsが行うクローンやアプリケーションのビルドのための
 # CIディレクトリ
     ├── ci               
 # ノード再起動時のアプリケーションの開始・停止を行う
 # コントロールスクリプト。
     ├── kraman3a_ctl.sh
     ├── <カートリッジ名>
     │   └── <カートリッジ固有の設定> 
     ├── data                                   
     │   └── ... 短命データストレージ
     ├── run                                    
     │   └── ... 実行のためのPID ファイル
     ├── logs                                   
     │   └── ... 全カートリッジのログファイル
     ├── sessions                               
     │   └── ... アプリケーションセッション情報
     ├── tmp                                    
     │   └── ... アプリケーション一次データ
     ├── repo -> runtime/repo                   
     └── runtime                                
         └── repo
 # 自身を持たないPHPのようなカートリッジの依存管理のための
 # プラットフォームサポート
             ├── deplist.txt                       
             |                                  
             ├── ... デプロイ済みアプリケーションコード
             └── README

ディスクリプタ


アプリケーションディスクリプタ


この章では、ユーザが、依存関係定義やスケーリングアーキテクチャ、各アプリケーションへの接続を定義するために、どのようにしてアプリケーションディスクリプタを構築するかを説明します。

用語:

  • Name:アプリケーション名(必須)
  • Version:アプリケーションのバージョン(必須)
  • Requires:依存関係リスト。カートリッジ名か性能のどちらか。
  • Cartridge:性能を提供するためのコンポーネント動作のパッケージされた集合
  • Connections:各々通信する必要のある2つのコンポーネントを指定する(Eg:PHPは直接関係がないがお互い通信が必要)
  • Group Override:関連のないカートリッジを同じギア上にグループ化させるための定義に使用される。本質的にそれらは一緒にエンベデッドする。これらのコンポーネントは一緒にスケールする。
  • Gear:コンポーネントが動作可能なCPU単位、メモリ、ディスク容量

単純なディスクリプタ:

 Name: myapp
 Version: 1.0
 Requires: php-1.0, mysql, mongodb
 Connections:
   - php-1.0, mysql
   - php-1.0, mongodb
 Group override:
   - php-1.0, mysql
上記のディスクリプタは、アプリケーション名"myapp"が php-1.0、mysql、mongodbに依存している事を示しています。PHP、MySQKおよびPHP、MongoDBはお互いに通信が必要となります。MongoDBが自身のギア上で動作している間、PHPおよびMySQLは同一のギア上でエンベデッドカートリッジとして動作します。

カートリッジディスクリプタ


この章ではいかにしてパートナ/カートリッジ開発者がディスクリプタを使ってそれらのカートリッジの能力を定義するかについて説明します。システム内のそれらの視点はアプリケーション開発社と異なっており、それらはより先進的な機能を露出させます。

用語:

  • バージョン(Version)、ベンダ(Vendor)、ライセンス(License):メタ情報フィールドはシステムが直接使用しない
  • 内部要求(Requires native):内部/実行時固有 パッケージ依存関係(RPM)
  • 提供者(Providers):カートリッジに寄って提供される能力リスト
  • プロファイル(Profile):カートリッジは、同一区画のソフトウェアに異なるアーキテクチャを提供するために、プロファイル内にグループを作ることが可能である(例:MySQL はマスタ-マスタおよびマスタ-スレーブプロファイルを提供することができる)
  • パブリッシャ(Publishers):接続エンドポイントのリストはコンポーネントから情報を獲得するためにインボーク可能なものをフックする(例:mysql カートリッジは、インボーク時JDBC接続文字列を提供する、JDBCエンドポイントを提供することができる)
  • サブスクライバ(SubScribers):接続エンドポイントのリストは、コンポーネントへ情報を提供するためにインボーク可能なものをフックする(例:jbossカートリッジは、インボーク時やデータソースとして設定されたJDBC文字列で提供された時にJDBCエンドポイントをサブスクライブすることができる)
  • 接続タイプ(Connection types):パブリッシャおよびサブスクライバは、どうやってお互いリンクするかを元にした接続タイプを定義する。Cloud-SDKは、いくつかのビルトインタイプを提供する(NET:TCP、NET:UNIX、FILESYSTEMなど)
  • グループ(Groups):プロビジョニングを目的としたコンポーネントのグループ化。各グループは一意のギアタイプで提供される。グループ範囲内のすべてのコンポーネントは同一ギア集合に配置される
  • ComponentRef:どちらのコンポーネントがグループの一部であるかを定義するグループ下の1エントリ
  • 設定順序(Configure-Order):カートリッジの中やその依存関係の中のコンポーネントに対して設定順序の定義が可能である
  • 開始順序(Start-Order):カートリッジの中やその依存関係の中のコンポーネントに対して開始順序の定義が可能である

ディスクリプタの例:


 Name: mysql-server
 Version: 1.0
 Native-Requires: mysql-server
 Provides: mysql
 Profiles:
  simple:
    Components:
      master:
        Provides:
          jdbc-uri:
            Type: NET:TCP:JDBC
  master-master:
    ...

上記のディスクリプタは、カートリッジ名"mysql-server"でmysqlの能力を定義しています。mysql-server RPMのインストールや実行に依存しています。またシンプルな場合とマスタ-マスタの場合の2つのプロファイルを定義しています。シンプルプロファイルは、"NET;TCP:JDBC"タイプのパブリッシャを提供する"master"という名前の1つのコンポーネントを保持しています。

接続タイプ


それぞれの(パブリッシャとサブスクライバの)接続は1つの接続タイプを定義し無くてはなりません。このタイプは、提供・消費されるデータを示す1つの分離された文字列です。Cloud-SDKはその他新しいタイプを提供する既存タイプのサブクラスを保持しています。

  • NET:TCP - ホスト名、ポートを提供する
  • NET:UNIX - UNIXソケットへのパスを提供する
  • FILESYSTEM - ローカルシステムのリソースへのパスを提供する
  • FILESYSTEM:SHARED - クラスタファイルシステム上のリソースへのパスを提供する

コネクタ確立


コンポーネントの設定・開始・終了中、パブリッシャコネクはインボークされているものをフックして、それぞれのギア上の各コンポネント情報がサブスクライブ中のコネクタへパスされます。コンポネントのギア割り当て:あるアプリケーションがカートリッジを使用している場合、そのコンポーネントはいくつかのファクターに依存する同一もしくは異なったギアの集合へ配置されます:

  • コンポーネントが同一のカートリッジの一部であり、カートリッジディスクリプタが同一グループである要求を行う場合、コンポーネントは同一ギア上に配置される
  • NET:UNIX、FILESYSTEM、NET:TCP:INTERNALのいずれかのタイプでコンポーネント間の接続が確立される場合、コンポーネントは同一のギア集合上に配置される
  • あるグループ内のエントリが、カートリッジ/アプリケーションエィスクリプタがコロケートされる要求を行うフィールドをオーバライドする場合、コンポーネントは同一のギア集合上に配置される

アプリケーション/カートリッジディスクリプタのランタイムレゾリューション


この章ではどのようにしてCloud-SDKがアプリケーションや依存関係やギアへの割り当てを組み合わせるかを説明します。

用語(ブローカ上の実行時の状態ストレージ):実行時階層は、アプリケーションディスクリプタやカートリッジディスクリプタから情報を使用する推敲フェーズ中に構築されます。

  • コンポーネントインスタンス - コンポーネントインスタンスは、カートリッジ/アプリケーションディスクリプタ内に定義されたコンポーネントごとに生成される。コンポーネントインスタンスは、カートリッジ数、プロファイル、コンポーネント名を保持する
  • グループインスタンス - コンポーネントインスタンスと類似して、グループインスタンスは、カートリッジ/アプリケーションディスクリプタ内に定義されたコンポーネントごとに生成される。その結果として起こる、元のカートリッジやプロファイルのトラックを保持するカートリッジインスタンスやグループの一部であるギアのトラックもマタ保持する。グループ範囲内のすべてのギアは同一のコンポーネント集合を実行している
  • ギア-

用語(ノード上の実行モデル):

  • ApplicationContainer:Cloud-SDKのノードサイド上のギアをあらわす
  • UnixUser:Cloud-SDKのノードサイド上のUNIXユーザをあらわす

ディスクリプタの推敲


ディスクリプタの推敲には2つの基本ステップがあります。効果があるのであれば、これらのステップは組み合わせることもあります。

  • すべての依存関係を解決しコンポーネントインスタンスやグループインスタンスの実行時構造を構築する
  • 通信やグルーピングのオーバライドを元にしてグループを組み合わせる

2012年4月27日(金) 10:00 matwoodが更新

既存アプリケーションをK8s上でコンテナ化して動かす場合の設計注意事項メモ

既存アプリをK8sなどのコンテナにして動かすには、どこを注意すればいいか..ちょっと調べたときの注意事項をメモにした。   1. The Twelve Factors (日本語訳からの転記) コードベース   バージョン管理されている1つのコードベースと複数のデプロイ 依存関係 ...