Example Health は、私たちがアプリケーションを最新化する例を説明するために作成したデモ・アプリです。実際のアプリでよくあるように、このアプリは当初、2 つの別個のアプリケーションでした。ビジネス・ニーズが予測を上回る速度で高まる中、たちまちのうちにアプリにアナリティクス機能を追加する必要が出てきました。
The Twelve Factor App のベスト・プラクティスに従って、私たちはワークロードを 5 つのマイクロサービスに分割しました。これにより、5 つの異なるイメージからなる Example Health アプリケーションに変換されることになりました。現在、5 つすべてのマイクロサービスを同じ 1 つの Red Hat® OpenShift® on IBM Cloud™ クラスターにデプロイしています。
私たちが繰り返し悩まされていた問題は、このアプリケーションを新しいクラスターにデプロイするたびに、インストールにかなりの時間がかかることです。そのため、このプロジェクトの機動力として、Tekton Pipelines を使用してすべてのクラスターをまとめて一度にデプロイすることにしたのです!Tekton を使用した結果、至るところをクリックして構成するのに 45 分かかっていたデプロイ時間が 15 分にまで短縮され、使用するコマンドの数も大幅に減りました。
このチュートリアルでは、OpenShift クラスター内に Tekton Pipelines をセットアップし、このパイプライン・ツールを使用してデプロイ・プロセスを迅速化する方法を説明します。
Example Health アプリの概要
Example Health アプリは、以下の 5 つのイメージで構成されています。
OpenShift 内でのアプリケーションのデプロイ・プロセスでは、イメージがデプロイ手段となります。このパイプラインの場合、具体的には次のように複数のデプロイ手法でイメージを OpenShift クラスター内にデプロイしています。
- OpenShift の Source-to-Image 機能を使用して、Node.js コードから Patient UI サービスを作成します。
- Admin UI サービスは、同様に PHP コードのソースからイメージにビルドされます。
- Dockerfile からビルドされる、2 つのアナリティクス・イメージもあります。
- JEE ビジネス・ロジック・イメージは、Docker Hub から直接デプロイされます。
前提条件
このチュートリアルでは、Red Hat OpenShift on IBM Cloud クラスターがすでにプロビジョニングされていることを前提としています。
まだプロビジョニングしていない場合、クラスターを作成するには IBM Cloud Web コンソールまたは ibmcloud
CLI のいずれかを使用できます。後者を使用する場合は、このリンク先のチュートリアルが役立つはずです。
kubectl
と oc
を含め、いくつかの CLI も必要になります。必要な CLI はここから入手できます。
手順
- クラスターをターゲットとして設定する
- Tekton、ダッシュボード、拡張機能をインストールする
- サービス・アカウントを作成する
- タスクをインストールする
- リソースとパイプラインを適用し、実行する
1. クラスターをターゲットとして設定する
cloud.ibm.com にログインし、デプロイ先とする OpenShift クラスターの概要ページを表示します。右上の「OpenShift web console (OpenShift Web コンソール)」ボタンをクリックします。Web コンソールが開いたら、右上隅からドロップダウン (自分の e-メール・アドレスが含まれるラベル) を選択し、「Copy Login Command (ログイン・コマンドをコピー)」を選択します。コピーしたコマンドをローカル・コンソール・ウィンドウに貼り付けます。
次のようなコマンドになっているはずです。
$ oc login https://c100-e.us-east.containers.cloud.ibm.com:XXXXX --token=XXXXXXXXXXXXXXXXXXXXXXXXXX
2. Tekton、ダッシュボード、拡張機能をインストールする
以下の一連のコマンドで、OpenShift クラスター内に最初に Tekton をインストールし、次に Tekton ダッシュボード (便利な Web インターフェース)、最後に Tekton WebHook 拡張機能のいくつかをインストールします。
$ kubectl apply --filename https://storage.googleapis.com/tekton-releases/previous/v0.5.2/release.yaml
$ kubectl apply --filename https://storage.googleapis.com/tekton-releases/dashboard/previous/v0.1.1/release.yaml
$ kubectl apply --filename https://github.com/tektoncd/dashboard/releases/tag/v0.1.1/webhooks-extension_release.yaml
Web コンソールに戻り、tekton-dashboard アプリケーションを見つけて「Add Route (ルートを追加)」をクリックし、URL を取得します。この URL を使用して、Web ブラウザーからダッシュボードにアクセスします。
3. サービス・アカウントを作成する
ローカル OpenShift レジストリーにイメージを保管する適切な権限がパイプラインに付与されるようにするには、サービス・アカウントを作成する必要があります。以下のコマンドで、「pipeline」という名前のサービス・アカウントを作成します。
$ oc create serviceaccount pipeline
$ oc adm policy add-scc-to-user privileged -z pipeline
$ oc adm policy add-role-to-user edit -z pipeline
4. タスクをインストールする
通常、Tekton Pipelines は複数の個別のタスクで構成されます。このチュートリアルでは、Tekton コミュニティーと OpenShift コミュニティーのそれぞれで保守されている以下のタスクを使用します。
openshift-client
を使用すると、OpenShift クラスターに対して CLI コマンドを実行できます。s2i-node
タスクとs2i-php
タスクで、OpenShift の Source-to-Image 機能を使用してイメージをビルドします。
上記のタスクをインストールするには、以下のコマンドを使用します。
$ oc create -f https://raw.githubusercontent.com/tektoncd/catalog/master/openshift-client/openshift-client-task.yaml
$ oc create -f https://raw.githubusercontent.com/openshift/pipelines-catalog/master/s2i-nodejs/s2i-nodejs-task.yaml
$ oc create -f https://raw.githubusercontent.com/openshift/pipelines-catalog/master/s2i-php/s2i-php-7-task.yaml
5. リソースとパイプラインを適用し、実行する
後は、いくつかのファイルをクラスターに適用すればよいだけです。
まず、「example-health-resources」で GitHub リポジトリーの場所と、作成するイメージをレジストリー内に保管するときに使用する名前を定義します。 お察しのとおり、example-health-pipeline
のファイルにはパイプラインのすべてのステップが定義されています。つまり、イメージをビルドして、デプロイ、公開するまでのすべてのステップです。
注: Example Health アプリケーションの Patient UI と Admin UI の部分はそのまますぐに機能しますが、Analytics セクションを完全に機能させるには情報を追加する必要があります。
example-health-pipeline.yaml
を編集して、Mapbox アクセス・トークン、クラスターの名前、ハッシュ (ダッシュボードの URL に含まれています)、Mongo データレイクの資格情報を指定してください。詳細については、Analytics リポジトリーで確認できます。また、クラスターがセットアップされたら、analytics サービス内のポートをそれぞれのルートに公開する必要もあります。
$ git clone https://github.com/loafyloaf/example-health-pipeline.git
$ cd example-health-pipeline
$ kubectl apply -f example-health-resources.yaml
$ kubectl apply -f example-health-pipeline.yaml
上記のコマンドを実行した後は、パイプラインを実行できます。それには、Tekton ダッシュボードでパイプラインのリストから「Example Health Pipeline (Example Health パイプライン)」を選択し、右上隅にある「Create Pipeline Run (パイプライン実行を作成)」ボタンをクリックします。
パイプライン実行が作成されたら、パイプラインの実行状況を追跡できます。成功すると、次のように表示されます。
Web コンソールに戻ると、概要ページにリストアップされたアプリケーションの URL を確認できます。
まとめ
Tekton パイプラインを使用したことで、アプリケーションを新しいクラスター内にデプロイするときの時間が 30 分近く短縮されました。ここで説明した手順で、皆さん独自の Red Hat OpenShift 環境内に Tekton Pipelines をセットアップする方法を理解していただけたことを願いします。