「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
- Test Drive OpenShift
- Test Drive OpenShiftは、GCP, Azure, OPS?で提供されている模様。
- OpenShift Container Platformの機能を体験するのに役立つ。
- 以下は、「on Azure」のドキュメントと手順から。
- Azureを使用するので、Azureのアカウントを作成しておく。
サンプル †
国立公園サンプル・アプリケーション
- Java EEベースのアプリケーション
- MongoDBデータベースに対して2D地理空間検索を実行。
- 世界中のすべての国立公園を検索してマップする。
アーキテクチャ †
Azure上にデプロイされる。
Azure上のアーキテクチャ †
- 同一のResourceグループ、仮想ネットワーク
- マスターとノードで異なるサブネット・可用性セット
- マスター → ノードは内部ロードバランサを経由する。
立上 †
探索 †
- すると、
「No test drive was found!」
と表示されるので、
- 以下のリンク
「Explore more solutions on Azure Marketplace [See more]」
を押下して、Marketplace 起動する。
起動 †
- 以下の画面が表示されるので、[体験版]をクリックする(5hだけ利用可能)。
- ポータルの正確なURLとアカウント情報が電子メールで提供される。
- また、画面が以下のようにプロビジョニングの完了後の画面に遷移する。
- ポータルの正確なURLとアカウント情報をメモしておく。
演習 †
OpenShift origin client tools v1.4.1 for Windowsをダウンロード
インストール †
- ZIPの展開で良い(ここでは「C:\openshift-cli」とする)。
- 以下パス情報をユーザー環境変数(Path)に登録する。
C:\openshift-cli
2 : 動作確認とクイックツアー †
ログイン †
- ポータルにログインしてログイン・コマンドをコピーする。
新規作成 †
続いて、oc new-projectコマンドでプロジェクトを新規作成する。
>oc new-project <projectname>
3 : Docker Imageを展開 †
最初のイメージを展開する。 †
- oc new-projectコマンドは自動的にそのプロジェクトを使用するように切り替える。
Now using project "usertestdrive-guestbook" on server "https://masterdnsxx.centralus.cloudapp.azure.com:443".
You can add applications to this project with the 'new-app' command. For example, try:
oc new-app centos/ruby-22-centos7~https://github.com/openshift/ruby-ex.git
to build a new example application in Ruby.
- 次の方法で、イメージのダウンロードと展開のステータスを確認できる。
- ポータルを使用
- ポータルに移動
- プロジェクトを選択
usertestdrive-guestbook
- ブラウズを選択
- ポッドを選択
作成したサービスを確認する。 †
4 : ルート作成してサービス公開 †
5 : リモート操作 †
- oc rshコマンドで、ポッドにRSHを確立できる。
- (1)
>oc rsh guestbook-1-zw947
BusyBox v1.21.1 (Ubuntu 1:1.21.0-1ubuntu1) built-in shell (ash)
Enter 'help' for a list of built-in commands.
/app $ ls public/
index.html script.js style.css
/app $ exit
>
- (2)
>oc rsh guestbook-1-zw947 ls public/
index.html script.js style.css
6 : スケーリングと自己修復 †
スケールアップを確認する。 †
- RCを確認する。
>oc get rc
NAME DESIRED CURRENT READY AGE
guestbook-1 1 1 1 2m
>oc get rc guestbook-1 -o json
・・・JSON・・・
>oc get rc guestbook-1 -o json | grep -B1 -E "replicas" | grep -v "deployment"
--
"spec": {
"replicas": 1,
--
"status": {
"replicas": 1,
※ Windowsではgrepが実行不可能。WSLを使用するとイイかもしれない。
- ポータルを使用
ポータルならポッド横の[↑]ボタンで行う。
- RCを確認する。
>oc get rc
NAME DESIRED CURRENT READY AGE
guestbook-1 3 3 3 4m
>oc get rc guestbook-1 -o json
・・・JSON・・・
>oc get rc guestbook-1 -o json | grep -B1 -E "replicas" | grep -v "deployment"
--
"spec": {
"replicas": 3,
--
"status": {
"replicas": n,
- 実際にレプリカが増えたかどうかは、ポッドの数を確認する。
- 以下のコマンドでサービスのエンドポイントを確認できる。
(ポッドがスケールするので、エンドポイントも増える)
>oc describe svc/guestbook
Name: guestbook
Namespace: usertestdrive-guestbook
Labels: app=guestbook
Selector: app=guestbook,deploymentconfig=guestbook
Type: ClusterIP
IP: 172.30.XXX.XXX
Port: 3000-tcp 3000/TCP
Endpoints: 10.128.0.5:3000,10.128.0.6:3000,10.128.0.7:3000
Session Affinity: None
No events.
自己修復を確認する。 †
7 : JBossにJavaコードをデプロイ †
国立公園サンプルアプリケーションを展開する。
- 国立公園サンプルアプリケーション
世界中のすべての国立公園を検索し、2D地理空間情報をマップする。
- Java EEベースのアプリケーション
- MongoDBデータベース
プロジェクトの作成 †
>oc new-project usertestdrive-nationalparks
Now using project "usertestdrive-nationalparks" on server "https://masterdnsxx.centralus.cloudapp.azure.com:443".
You can add applications to this project with the 'new-app' command. For example, try:
oc new-app centos/ruby-22-centos7~https://github.com/openshift/ruby-ex.git
to build a new example application in Ruby.
プロジェクトのビルド †
OpenShift上のDockerイメージとコードを結合する
ビルド確認 †
プロジェクトのビルドの完了後、ビルド結果を確認する。
- ポータルを使用
- ビルドのステータスを確認できる。
- また、ログで動作の確認ができる。
- リンク押下でエンドポイントにアクセスして動作を確認できる。
- また、ログで動作の確認ができる。
>oc get pods
NAME READY STATUS RESTARTS AGE
eap-app-1-86dz6 1/1 Running 0 36m
eap-app-1-build 0/1 Completed 0 39m
>oc logs -f eap-app-1-86dz6
INFO: Configuring JGroups discovery protocol to openshift.DNS_PING
Using PicketBox SSL configuration.
Missing SSO_URL. Unable to properly configure SSO-enabled applications
Access log is disabled, ignoring configuration.
Running jboss-eap-7/eap70-openshift image, version 1.7
-Xms512m -Xmx512m -XX:+UseParallelGC -XX:MinHeapFreeRatio=20 -XX:MaxHeapFreeRatio=40
-XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -XX:MaxMetaspaceSize=100m -XX:+ExitOnOutOfMemoryError
=========================================================================
JBoss Bootstrap Environment
JBOSS_HOME: /opt/eap
JAVA: /usr/lib/jvm/java-1.8.0/bin/java
エンドポイントにアクセス †
URL : http://eap-app-usertestdrive-nationalparks.XXX.XXX.XXX.XXX.nip.io
- ポータルを使用
リンク押下でエンドポイントにアクセスして動作を確認できる。
8 : MongoDBデータベースを追加 †
ポイント
- 永続化:EmptyDir?をデータストレージに使用し永続化される。
- 環境変数:
- MONGODB_USER
- MONGODB_PASSWORD
- MONGODB_DATABASE
- MONGODB_ADMIN_PASSWORD
プロジェクトのビルド †
- MongoDBデータベースをusertestdrive-nationalparksプロジェクトに追加する。
再配線 †
環境変数を使用してアプリケーションとMongoDBデータベースを再配線
- CLIを使用
- 環境変数を設定する。
>oc get dc
NAME REVISION DESIRED CURRENT TRIGGERED BY
eap-app 1 1 1 config,image(eap-app:latest)
mongodb 1 1 1 config,image(mongodb:3.2)
>oc env dc eap-app -e MONGODB_USER=mongodb -e MONGODB_PASSWORD=mongodb -e MONGODB_DATABASE=mongodb
deploymentconfig "eap-app" updated
- 環境変数の変更を確認する。
dcの「REVISION」がインクリメントされる点に注目。
>oc get dc
NAME REVISION DESIRED CURRENT TRIGGERED BY
eap-app 2 1 1 config,image(eap-app:latest)
mongodb 1 1 1 config,image(mongodb:3.2)
>oc get dc eap-app -o json
"spec": {
・・・
"template": {
・・・
"spec": {
・・・
"containers": [
{
・・・
"env": [
{
"name": "MONGODB_DATABASE",
"value": "mongodb"
},
{
"name": "MONGODB_PASSWORD",
"value": "mongodb"
},
{
"name": "MONGODB_USER",
"value": "mongodb"
}
>oc get rc
NAME DESIRED CURRENT READY AGE
eap-app-1 0 0 0 2h
eap-app-2 1 1 1 10m
mongodb-1 1 1 1 19m
エンドポイントにアクセス †
- 上記、読み込んだテンプレートを使用してサービスを作成する。
( この際、nameを指定し、GIT_URIを書き換える )
>oc new-app nationalparks-eap --name=nationalparks –p GIT_URI=https://gitlab.com/gshipley/nationalparks.git
--> Deploying template "nationalparks-template/nationalparks-eap" to project nationalparks-template
nationalparks-eap
---------
Application template for MLB Parks application on EAP 6 & MongoDB built using STI
* With parameters:
* APPLICATION_NAME=nationalparks
* APPLICATION_HOSTNAME=
* GIT_URI=https://gitlab.com/gshipley/nationalparks.git
* GIT_REF=master
* Maven mirror url=
* MONGODB_DATABASE=root
* MONGODB_NOPREALLOC=
* MONGODB_SMALLFILES=
* MONGODB_QUIET=
* MONGODB_USER=user6wH # generated
* MONGODB_PASSWORD=EMJQgkSS # generated
* MONGODB_ADMIN_PASSWORD=BfgwtDdJ # generated
* GITHUB_TRIGGER_SECRET=BF5dVxOe # generated
* GENERIC_TRIGGER_SECRET=K1vwlRJh # generated
--> Creating resources ...
buildconfig "nationalparks" created
imagestream "nationalparks" created
deploymentconfig "nationalparks-mongodb" created
deploymentconfig "nationalparks" created
route "nationalparks" created
service "mongodb" created
service "nationalparks" created
service "ping" created
--> Success
Build scheduled, use 'oc logs -f bc/nationalparks' to track its progress.
Run 'oc status' to view your app.
10 : コンテナ内のMongoコマンドラインシェルの使用 †
ポッド上のMongoに接続 †
- 接続先のMongoのポッドの名称を取得する。
>oc get pods
- bashを使用して、ポッド上のMongoに接続
- 手動
>oc exec -ti mongodb-1 -- bash -c 'mongo -u mongodb -p mongodb mongodb'
- 自動(テンプレート)
>oc exec -ti nationalparks-mongodb-1-xf5kn -- bash -c "mongo -u user6wH -p EMJQgkSS root"
MongoDB shell version: 3.2.10
connecting to: root
Welcome http://docs.mongodb.org/
Questions? Try the support group".
For morehttp://groups.google.com/group/mongodb-user
Mongoコマンドラインシェルを実行 †
- データベースに追加された国立公園の数を数える。
>db.parks.count();
2740
- jsonドキュメントを表示することもできる。
>db.parks.find();
{ "_id" : ObjectId("5b16032bf7c92700991bca3b"), "countryCode" : "ZW", "countryName" : "Zimbabwe", "pos" : [ -18.62987, 27.02104 ], "name" : "Hwange National Park Airport", "toponymName" : "Hwange National Park Airport" }
・・・
参考 †
世界のやまさ †
銀の光と碧い空 †
Red Hat Customer Portal †
- 2.1. Install Image Streams
- 2.2. Deploy Applications
- 2.3. Configuration
- 2.4. Sample Applications
- 2.5. Create a Runtime Image
その他 †