.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

  • OpenShiftのファーストステップをどうやるか?
    取り敢えず、以下のTest Drive OpenShiftから入ることにした。
  • Test Drive OpenShift
    • Test Drive OpenShiftは、GCP, Azure, OPS?で提供されている模様。
    • OpenShift Container Platformの機能を体験するのに役立つ。
    • 以下は、「on Azure」のドキュメントと手順から。
  • Azureを使用するので、Azureのアカウントを作成しておく。

サンプル

国立公園サンプル・アプリケーション

  • Java EEベースのアプリケーション
  • MongoDBデータベースに対して2D地理空間検索を実行。
  • 世界中のすべての国立公園を検索してマップする。

アーキテクチャ

Azure上にデプロイされる。

Azure上のアーキテクチャ

  • 同一のResourceグループ、仮想ネットワーク
  • マスターとノードで異なるサブネット・可用性セット
  • マスター → ノードは内部ロードバランサを経由する。

OpenShiftのアーキテクチャ

立上

探索

  • すると、

    「No test drive was found!」

と表示されるので、

  • 以下のリンク

    「Explore more solutions on Azure Marketplace [See more]」

を押下して、Marketplace 起動する。

  • そこで、OpenShiftを検索し、
    [Red Hat OpenShift Container Platform]を選択する。

起動

  • 以下の画面が表示されるので、[体験版]をクリックする(5hだけ利用可能)。
    手順1
  • すると、Test Drive OpenShift (on Azure)の
  • 展開が開始される(マニュアルが提供される)。
  • 起動には20-30分かかる。
  • プロビジョニングの完了後、
  • ポータルの正確なURLとアカウント情報が電子メールで提供される。
  • また、画面が以下のようにプロビジョニングの完了後の画面に遷移する。
    手順2
  • ポータルの正確なURLとアカウント情報をメモしておく。

演習

1 : OpenShift CLIのインストール

OpenShift origin client tools v1.4.1 for Windowsをダウンロード

インストール

  • ZIPの展開で良い(ここでは「C:\openshift-cli」とする)。
  • 以下パス情報をユーザー環境変数(Path)に登録する。
    C:\openshift-cli
  • CMDを起動し、ocコマンドを実行し、動作することを確認する。
    >oc
    OpenShift Client
    ・・・
    >oc version
    oc v1.4.1+3f9807a
    kubernetes v1.4.0+776c994
    features: Basic-Auth

2 : 動作確認とクイックツアー

ログイン

  • ポータルを使用
  • ポータルの正確なURLにアクセスして、ポータルからログイン可能。
    https://masterdnsxx.centralus.cloudapp.azure.com/console
  • CLIを使用 (1)
  • SSHのEndpointの正確なURLを使用して以下のoc loginコマンドを実行する。
    >oc login opnshdnsxx.westus.cloudapp.azure.com:8443
  • Test Driveに自己署名証明書を使用しているので y を押下
    Use insecure connections? (y/n):
  • 一部のバージョンのWindows環境では以下のオプションが必要になることがある。
    >oc login https://opnshdnsxx.westus.cloudapp.azure.com:8443 –insecure-skip-tls-verify=true
  • アカウント情報を入力
    Username: (The username provided to you in Access information section of the test-drive)
    Password: (The password provided to you in Access information section of the test-drive)
    Login successful.
  • CLIを使用 (2)
  • ポータルにログインしてログイン・コマンドをコピーする。
    手順3
  • 以下のトークン付きのログイン・コマンドを実行してログインする。
    >oc login https://opnshdnsxx.centralus.cloudapp.azure.com --token=XXXXX
  • Test Driveに自己署名証明書を使用しているので y を押下
    Use insecure connections? (y/n):
  • ログインが完了し、既定のプロジェクトに居る状態になる。
    Logged into "https://masterdnsxx.centralus.cloudapp.azure.com:443" as "testdrive" using the token provided.
    
    You have access to the following projects and can switch between them with 'oc project <projectname>':
    
      * default
        kube-public
        kube-system
        logging
        management-infra
        openshift
        openshift-infra
        openshift-node
        openshift-web-console
    
    Using project "default".

新規作成

続いて、oc new-projectコマンドでプロジェクトを新規作成する。

>oc new-project <projectname>

3 : Docker Imageを展開

最初のイメージを展開する。

  • Kubernetes Guestbookアプリケーションを展開する。
    https://hub.docker.com/r/kubernetes/guestbook/
  • 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.
  • プロジェクトの参照 / アクセスをする場合は、oc get projectsコマンドを使用する。
    >oc get projects
    NAME                      DISPLAY NAME   STATUS
    default                                  Active
    kube-public                              Active
    kube-system                              Active
    logging                                  Active
    management-infra                         Active
    openshift                                Active
    openshift-infra                          Active
    openshift-node                           Active
    openshift-web-console                    Active
    usertestdrive-guestbook                  Active
  • oc new-appコマンドを実行する。
    >oc new-app kubernetes/guestbook
    --> Found Docker image 4305190 (3 years old) from Docker Hub for "kubernetes/guestbook"
    
        * An image stream will be created as "guestbook:latest" that will track this image
        * This image will be deployed in deployment config "guestbook"
        * Port 3000/tcp will be load balanced by service "guestbook"
          * Other containers can access this service through the hostname "guestbook"
        * WARNING: Image "kubernetes/guestbook" runs as the 'root' user which may not be permitted by your cluster administrator
    
    --> Creating resources ...
        imagestream "guestbook" created
        deploymentconfig "guestbook" created
        service "guestbook" created
    --> Success
        Run 'oc status' to view your app.
  • 次の方法で、イメージのダウンロードと展開のステータスを確認できる。
  • CLIを使用
    oc get podsコマンドを使用する。
    >oc get pods -w
    NAME                 READY     STATUS              RESTARTS   AGE
    guestbook-1-deploy   0/1       ContainerCreating   0          39s
    NAME                 READY     STATUS    RESTARTS   AGE
    guestbook-1-deploy   1/1       Running   0          1m
    guestbook-1-zw947   0/1       Pending   0         0s
    guestbook-1-zw947   0/1       Pending   0         0s
    guestbook-1-zw947   0/1       ContainerCreating   0         0s
    guestbook-1-zw947   1/1       Running   0         8s
    guestbook-1-deploy   0/1       Completed   0         1m
    guestbook-1-deploy   0/1       Terminating   0         1m
    guestbook-1-deploy   0/1       Terminating   0         1m
    ※ To exit, hit Ctrl+C.
  • ポータルを使用
    1. ポータルに移動
    2. プロジェクトを選択
      usertestdrive-guestbook
    3. ブラウズを選択
    4. ポッドを選択
  • oc get servicesコマンドで、サービスが作成されたのを確認できる。
    >oc get services
    NAME        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
    guestbook   172.30.XXX.XXX   <none>        3000/TCP   8m

作成したサービスを確認する。

  • oc get serviceコマンドで、サービスの詳細をJSON形式で取得できる。
    >oc get service guestbook -o json
    ・・・JSON・・・
  • oc get podsコマンドで、ポッドの詳細をJSON形式で取得できる。
    >oc get pods
    NAME READY STATUS RESTARTS AGE
    guestbook-1-zw947 1/1 Running 0 5m
    >oc get pod guestbook-1-zw947 -o json
    ・・・JSON・・・

4 : ルート作成してサービス公開

  • oc get routesコマンドで、既存のルートがないことを確認する。
    >oc get routes
    No resources found.
  • oc get servicesコマンドで、公開するサービス名を取得する。
    >oc get services
    NAME        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
    guestbook   172.30.XXX.XXX   <none>        3000/TCP   8m
  • oc get routesコマンドで、ルートが作成されたことを確認する。
    >oc get routes
    NAME        HOST/PORT                                               PATH      
    SERVICES    PORT       TERMINATION
    guestbook   guestbook-usertestdrive-guestbook.XXX.XXX.XXX.XXX.Xip.io             
    guestbook   3000-tcp
  • WebアプリケーションにこのURLを使用してアクセス可能。
    https://guestbook-usertestdrive-guestbook.XXX.XXX.XXX.XXX.Xip.io/

5 : リモート操作

  • oc get podsコマンドで、ポッド名を取得する。
    >oc get pods
    NAME                READY     STATUS    RESTARTS   AGE
    guestbook-1-zw947   1/1       Running   0          16m
  • 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
  • oc execコマンドで、ポッド内でコマンドを実行できる。
    >oc exec guestbook-1-zw947 ls public/
    index.html
    script.js
    style.css

6 : スケーリングと自己修復

スケールアップを確認する。

  • 現在の値を確認する。
  • DCを確認する。
    >oc get dc
    NAME        REVISION   DESIRED   CURRENT   TRIGGERED BY
    guestbook   1          1         1         config,image(guestbook:latest)
  • 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を使用するとイイかもしれない。
  • DCのレプリカ数を「3」に設定しスケールさせる。
  • ポータルを使用
    ポータルならポッド横の[↑]ボタンで行う。
    手順4
  • CLIを使用
    >oc scale --replicas=3 dc/guestbook
    deploymentconfig "guestbook" scaled
  • 変更後の値を確認する。
  • DCを確認する。
    >oc get dc
    NAME        REVISION   DESIRED   CURRENT   TRIGGERED BY
    guestbook   1          3         3         config,image(guestbook:latest)
  • 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,
  • 実際にレプリカが増えたかどうかは、ポッドの数を確認する。
  • CLIを使用
    >oc get pods
    NAME                READY     STATUS    RESTARTS   AGE
    guestbook-1-2lbxq   1/1       Running   0          37m
    guestbook-1-g7flm   1/1       Running   0          37m
    guestbook-1-nb9gv   1/1       Running   0          41m
  • ポータルを使用
    手順5
  • 以下のコマンドでサービスのエンドポイントを確認できる。
    ポッドがスケールするので、エンドポイントも増える)
    >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.

自己修復を確認する。

  • 以下のコマンドでポッドを削除する。
    >oc delete pod guestbook-1-2lbxq
    pod "guestbook-1-2lbxq" deleted
  • 直ちに、ポッドの数を確認する。
  • Terminating & Pending
    >oc get pods
    NAME                READY     STATUS        RESTARTS   AGE
    guestbook-1-2lbxq   1/1       Terminating   0          39m
    guestbook-1-7drz5   0/1       Pending       0          0s
    guestbook-1-g7flm   1/1       Running       0          39m
    guestbook-1-nb9gv   1/1       Running       0          43m
  • Pending -> Running
    >oc get pods
    NAME                READY     STATUS    RESTARTS   AGE
    guestbook-1-7drz5   1/1       Running   0          14s
    guestbook-1-g7flm   1/1       Running   0          39m
    guestbook-1-nb9gv   1/1       Running   0          44m

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イメージとコードを結合する

  • ポータルを使用
    • ポータルを表示する
    • [My Projects] -> 「usertestdrive-nationalparks」を選択する。
    • [Add to Project]から[Browse Catalog]を選択する。
    • 「"jboss-eap70-opensshift" (JBoss EAP 7.0 (no https))」を検索して選択する。
    • 開いたダイアログの次を押下し設定画面でアプリケーションのGitソースURIの設定を行う。
      https://gitlab.com/gshipley/nationalparks.git
    • 次へで終了すると、以下のようにビルドが開始される。
      手順6
  • CLIを使用
    ・・・

ビルド確認

プロジェクトのビルドの完了後、ビルド結果を確認する。

  • ポータルを使用
    手順7
    • ビルドのステータスを確認できる。
    • また、ログで動作の確認ができる。
    • リンク押下でエンドポイントにアクセスして動作を確認できる。
  • CLIを使用
    • ビルドのステータスを確認できる。
      >oc get builds
      NAME        TYPE      FROM          STATUS     STARTED         DURATION
      eap-app-1   Source    Git@46aad91   Complete   6 minutes ago   3m3s
  • また、ログで動作の確認ができる。
    >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
  • ポータルを使用
    リンク押下でエンドポイントにアクセスして動作を確認できる。
  • CLIを使用
    以下のコマンドでエンドポイントを確認、コレにアクセスして動作を確認できる。
    >oc get routes
    NAME      HOST/PORT                                                   PATH      
    SERVICES   PORT      TERMINATION
    eap-app   eap-app-usertestdrive-nationalparks.XXX.XXX.XXX.XXX.nip.io             eap-app    <all>

8 : MongoDBデータベースを追加

ポイント

  • 永続化:EmptyDir?をデータストレージに使用し永続化される。
  • 環境変数:
    • MONGODB_USER
    • MONGODB_PASSWORD
    • MONGODB_DATABASE
    • MONGODB_ADMIN_PASSWORD

プロジェクトのビルド

  • MongoDBデータベースをusertestdrive-nationalparksプロジェクトに追加する。
  • ポータルを使用
    • ポータルを表示する
    • [My Projects] -> 「usertestdrive-nationalparks」を選択する。
    • [Add to Project]から[Browse Catalog]を選択する。
    • 「"mongodb-ephemeral" (MongoDB (Ephemeral))」を検索して選択する。
    • 開いたダイアログの次を押下し設定画面で接続情報欄を全て「mongodb」と入力する。
    • 次へで、接続情報のサマリが表示される。
      Username: mongodb
      Password: mongodb
      Database Name: mongodb
      Connection URL: mongodb://mongodb:mongodb@mongodb/mongodb
    • 終了すると、以下のようにデプロイが開始される。
      手順9
  • CLIを使用
    ・・・

再配線

環境変数を使用してアプリケーションと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

エンドポイントにアクセス

9 : テンプレートの使用

  • まず新しいプロジェクトを作成して
    >oc new-project nationalparks-template
  • テンプレートをプロジェクトに追加
    ( "metadata": { "name": "nationalparks-eap", ・・・ )
    >oc create -f https://gitlab.com/jorgemoralespou/openshift3nationalparks/raw/master/nationalparks-template-eap.json
    template "nationalparks-eap" created
  • 上記、読み込んだテンプレートを使用してサービスを作成する。
    ( この際、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.
  • 以下のコマンドでエンドポイントを確認、コレにアクセスして動作を確認できる。
    (エンドポイントが開くまで、暫く時間がかかった)
    >oc get routes
    NAME            HOST/PORT                                                    PATH      SERVICES        PORT      TERMINATION
    nationalparks   nationalparks-nationalparks-template.XXX.XXX.XXX.XXX.nip.io             nationalparks   <all>

10 : コンテナ内のMongoコマンドラインシェルの使用

ポッド上のMongoに接続

  • ポータルを使用
    • ポータルを表示する
    • [My Projects] -> 「usertestdrive-nationalparks」を選択する。
    • ポッドを選択し、[コンソール]タブからコンソールを表示する。
    • bashを使用して、ポッド内のMongoに接続
      >mongo -u mongodb -p mongodb mongodb
  • CLIを使用
  • 接続先の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

その他


添付ファイル: file10.png 60件 [詳細] file9.png 54件 [詳細] file8.png 66件 [詳細] file5.png 56件 [詳細] file7.png 64件 [詳細] file6.png 64件 [詳細] file4.png 66件 [詳細] file3.png 67件 [詳細] file2.png 70件 [詳細] file1.png 63件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-06-29 (金) 09:15:15 (445d)