18.11. チュートリアル: S2I デプロイメント
OpenShift でアプリケーションをデプロイする方法はいくつかあります。このチュートリアルでは、統合された Source-to-Image (S2I) ビルダーの使用について説明します。OpenShift の概念 セクションで述べたように、S2I は再現可能な Docker 形式のコンテナーイメージをビルドするためのツールです。
18.11.1. 前提条件
このチュートリアルを使用する前に、次の要件を満たしている必要があります。
- ROSA クラスターの作成を完了します。
ログインコマンドを取得します。
CLI 経由でログインしていない場合は、OpenShift Cluster Manager で、右上の名前の横にあるドロップダウン矢印をクリックし、Copy Login Command を選択します。
- 新しいタブが開きます。ユーザー名とパスワードを入力し、認証方法を選択します。
- Display Token をクリックします。
- "Log in with this token" の下のコマンドをコピーします。
コピーしたコマンドをターミナルで実行して、コマンドラインインターフェイス (CLI) にログインします。次のような出力が表示されるはずです。
$ oc login --token=RYhFlXXXXXXXXXXXX --server=https://api.osd4-demo.abc1.p1.openshiftapps.com:6443
出力例
Logged into "https://api.myrosacluster.abcd.p1.openshiftapps.com:6443" as "rosa-user" using the token provided. You don't have any projects. You can try to create a new project, by running oc new-project <project name>
次のコマンドを実行して、CLI から新しいプロジェクトを作成します。
$ oc new-project ostoy-s2i
18.11.2. OSToy リポジトリーのフォーク
次のセクションでは、ソースコードの変更に基づいて自動ビルドをトリガーする方法を主に取り上げます。GitHub リポジトリーにコードをプッシュしたときに S2I ビルドをトリガーするには、GitHub Webhook を設定する必要があります。Webhook を設定するには、まずリポジトリーをフォークする 必要があります。
このガイドで以下に示す URL の <UserName>
は、自分の GitHub ユーザー名に置き換えてください。
18.11.3. S2i を使用してクラスターに OSToy をデプロイする
OpenShift にシークレットを追加する
この例では、
.env
ファイルをエミュレートし、これを OpenShift 環境に直接移動する簡単な方法を示します。Secret 内でファイルの名前を変更することもできます。CLI で次のコマンドを入力します。<UserName>
は、GitHub ユーザー名に置き換えてください。$ oc create -f https://raw.githubusercontent.com/<UserName>/ostoy/master/deployment/yaml/secret.yaml
OpenShift に ConfigMap を追加する
この例では、HAProxy 設定ファイルをエミュレートします。これは、通常 OpenShift アプリケーションのデフォルト設定をオーバーライドするために使用されます。ConfigMap でファイルの名前を変更することもできます。
CLI で次のコマンドを入力します。
<UserName>
は、GitHub ユーザー名に置き換えてください。$ oc create -f https://raw.githubusercontent.com/<UserName>/ostoy/master/deployment/yaml/configmap.yaml
マイクロサービスをデプロイする
UI アプリケーションから SERVICE 環境変数を使用できるように、まずマイクロサービスをデプロイする必要があります。
--context-dir
は、ここでは git リポジトリー内のmicroservice
ディレクトリーで定義されたアプリケーションのみをビルドするために使用します。app
ラベルを使用すると、UI アプリケーションとマイクロサービスの両方が OpenShift UI で確実にグループ化されます。CLI で次のコマンドを実行してマイクロサービスを作成します。<UserName>
は、GitHub ユーザー名に置き換えてください。$ oc new-app https://github.com/<UserName>/ostoy \ --context-dir=microservice \ --name=ostoy-microservice \ --labels=app=ostoy
出力例
--> Creating resources with label app=ostoy ... imagestream.image.openshift.io "ostoy-microservice" created buildconfig.build.openshift.io "ostoy-microservice" created deployment.apps "ostoy-microservice" created service "ostoy-microservice" created --> Success Build scheduled, use 'oc logs -f buildconfig/ostoy-microservice' to track its progress. Application is not exposed. You can expose services to the outside world by executing one or more of the commands below: 'oc expose service/ostoy-microservice' Run 'oc status' to view your app.
マイクロサービスのステータスを確認する
次のステップに進む前に、次のコマンドを実行して、マイクロサービスが作成され、正しく実行されていることを確認する必要があります。
$ oc status
出力例
In project ostoy-s2i on server https://api.myrosacluster.g14t.p1.openshiftapps.com:6443 svc/ostoy-microservice - 172.30.47.74:8080 dc/ostoy-microservice deploys istag/ostoy-microservice:latest <- bc/ostoy-microservice source builds https://github.com/UserName/ostoy on openshift/nodejs:14-ubi8 deployment #1 deployed 34 seconds ago - 1 pod
正常にデプロイされたことが表示されるまで待ちます。Web UI からこれを確認することもできます。
フロントエンド UI をデプロイする
このアプリケーションは、いくつかの環境変数に依存して外部設定を定義するように設計されています。後で、以前に作成した Secret と ConfigMap をアタッチし、PersistentVolume を作成します。CLI に次のように入力します。
$ oc new-app https://github.com/<UserName>/ostoy \ --env=MICROSERVICE_NAME=OSTOY_MICROSERVICE
出力例
--> Creating resources ... imagestream.image.openshift.io "ostoy" created buildconfig.build.openshift.io "ostoy" created deployment.apps "ostoy" created service "ostoy" created --> Success Build scheduled, use 'oc logs -f buildconfig/ostoy' to track its progress. Application is not exposed. You can expose services to the outside world by executing one or more of the commands below: 'oc expose service/ostoy' Run 'oc status' to view your app.
デプロイメントを更新する
永続ボリュームを使用した一貫性のあるデプロイメントを実現するために、(デフォルトの
RollingUpdate
ではなく) "Recreate" デプロイメントストラテジーを使用するようにデプロイメントを更新します。これが必要な理由は、PV が EBS を基盤としており、RWO
方式のみをサポートしているためです。既存の Pod をすべて強制終了せずにデプロイメントを更新すると、PV が既存の Pod にバインドされたままであるため、新しい Pod をスケジュールして PV の PVC を作成できない可能性があります。EFS を使用する場合は、これを変更する必要はありません。$ oc patch deployment ostoy --type=json -p \ '[{"op": "replace", "path": "/spec/strategy/type", "value": "Recreate"}, {"op": "remove", "path": "/spec/strategy/rollingUpdate"}]'
liveness プローブを設定する
アプリケーション内に異常が発生した場合に Pod が確実に再起動するように、デプロイメントに Liveness Probe を作成します。CLI に次のように入力します。
$ oc set probe deployment ostoy --liveness --get-url=http://:8080/health
Secret、ConfigMap、PersistentVolume をデプロイメントにアタッチする
次のコマンドを実行して、Secret、ConfigMap、および PersistentVolume をアタッチします。
Secret のアタッチ
$ oc set volume deployment ostoy --add \ --secret-name=ostoy-secret \ --mount-path=/var/secret
ConfigMap のアタッチ
$ oc set volume deployment ostoy --add \ --configmap-name=ostoy-config \ -m /var/config
PersistentVolume の作成およびアタッチ
$ oc set volume deployment ostoy --add \ --type=pvc \ --claim-size=1G \ -m /var/demo_files
UI アプリケーションを OpenShift ルートとして公開する
次のコマンドを実行して、同梱の TLS ワイルドカード証明書を使用する HTTPS アプリケーションとしてこれをデプロイします。
$ oc create route edge --service=ostoy --insecure-policy=Redirect
次の方法でアプリケーションを参照する
次のコマンドを実行すると、OSToy アプリケーションが Web ブラウザーで開きます。
$ python -m webbrowser "$(oc get route ostoy -o template --template='https://{{.spec.host}}')"
次のコマンドを実行すると、アプリケーションのルートを取得し、そのルートをコピーしてブラウザーに貼り付けることができます。
$ oc get route