アプリケーションデプロイメント基礎(s2i,Tekton)
シナリオ
このラボでは、パイプラインと、アプリケーションのライフサイクルを処理するようにOpenShiftでパイプラインを設定する方法について学習します。
- OpenShift Pipelinesは、 Tektonを使用してパイプラインを構築するためのクラウドネイティブの継続的インテグレーションおよびデリバリー(CI / CD)ソリューションです。
- Tektonは、柔軟なKubernetesネイティブのオープンソースCI / CDフレームワークであり、基盤となる詳細を抽象化することで、複数のプラットフォーム(Kubernetes、サーバーレス、VMなど)へのデプロイを自動化できます。
ゴール
- s2iで、Javaアプリケーションをデプロイします。
- Pipeline リソースで利用する永続ボリュームを作成します。
- OpenShift Pipelinesで、Pipeline を作成します。
- 作成したPipelineを実行して、擬似的に新しいイメージとしてアプリケーションを再デプロイします。
Javaアプリケーションの作成
このラボには独自のgitリポジトリがあるので、単純なJava S2Iイメージで使用してみましょう。
プロジェクトの作成
Name を
<英字氏名>-workshopとして、プロジェクトを作成します。 例)yamadataro-workshop- プロジェクト名はOpenShiftクラスタ内で一意である必要があります。
アプリケーションのビルド
- Developer パースペクティブで、左側のナビゲーションで[+Add]をクリックし、[Git Repository]セクションより
Import from Gitを選択します。
Developerパースペクティブ
- Import from Gitワークフローは、いくつかの選択に基づいてアプリをデプロイするプロセスをガイドします。GitリポジトリのURLに次のように入力します。
https://github.com/openshift-roadshow/nationalparks.git- Developer パースペクティブで、左側のナビゲーションで[+Add]をクリックし、[Git Repository]セクションより
[Edit import Strategy]をクリックし(3つのオプションがあります)、
Builder Imageを選択します。


[Builder Image]としてJavaが選択されていることを確認し、[Builder Image version] には
openjdk-11-ubi8を選択してください。[General] セクションまでスクロールし、下記を設定します。
- Application Name :
workshop - Name:
nationalparks
- Application Name :

- [Show Advanced Routing options] メニューを展開し、表示されたメニューより
Secure Rootを選択し、[TLS termination] をEdgeにします。


Createをクリックして送信します。トポロジビューでnationalparksエントリをクリックし、[Resources]タブの[Builds]セクションで[View logs]をクリックして、ビルドログを参照します。

これは、ビルドおよび依存関係システムとしてMavenを使用するJavaベースのアプリケーションです。Mavenがアプリケーションに必要なすべての依存関係をダウンロードするため、初期ビルドには数分かかります。
リソースの確認
- Topologyビューから、Pod名を控えておきます。
Tekton Pipelineを使って、新しくビルドされたイメージでこのDeployment nationalparks を更新し、その際にPod名が変わることを確認します。
(例) nationalparks-98876886f-cbkzc
このアプリケーションはバックエンドアプリケーションであるため、Webインターフェイスはありません。 parksmapフロントエンドと連携するすべてのバックエンドは、/ws/info/エンドポイントを実装する必要があります。テストするには、ブラウザで次のURLにアクセスしてください。
- Route にアクセスして、URLの末尾に/ws/info/を追加して結果を確認します
結果確認
- (オプション)また、CLIから作成されたリソースも確認することもできます。
oc get builds
oc logs -f builds/nationalparks-1
oc get routes
パイプラインで使うストレージを作成する
OpenShiftは、永続ボリューム要求リクエスト(PVC)を介してアプリケーションを実行しているポッドに接続される永続ボリュームを使用してストレージを管理します。また、Webコンソールから簡単に管理する機能も提供します。
- Administratorパースペクティブから、 [Storage] → [PersistentVolumeClaim]に移動します。
- 右上に移動し、[Create PersistentVolumeClaim]ボタンをクリックします。
- PersistentVolumeClaim Nameに
app-source-pvcを入力します。 - RWOシングルユーザーアクセスモードを使用してパイプライン用に1GiB 永続ボリュームを作成するため、[Size]セクションに
1を入力します。 - 他のすべてのデフォルト設定をそのままにして、[Create]をクリックします。

Tektonパイプラインを作成する
Nationalparksバックエンド用のTektonパイプラインを作成します。
- 右上の + を選択します。
YAMLファイルから作成1
- 以下の yaml ファイルを貼り付けします。
YAMLファイルから作成2
Pipelineリソース
apiVersion: tekton.dev/v1
kind: Pipeline
metadata:
name: nationalparks-pipeline
spec:
params:
- default: nationalparks
name: APP_NAME
type: string
- default: 'https://github.com/openshift-roadshow/nationalparks.git'
description: The application git repository url
name: APP_GIT_URL
type: string
- default: master
description: The application git repository revision
name: APP_GIT_REVISION
type: string
tasks:
- name: git-clone
params:
- name: url
value: $(params.APP_GIT_URL)
- name: revision
value: $(params.APP_GIT_REVISION)
- name: submodules
value: 'true'
- name: depth
value: '1'
- name: sslVerify
value: 'true'
- name: deleteExisting
value: 'true'
- name: verbose
value: 'true'
taskRef:
kind: ClusterTask
name: git-clone
workspaces:
- name: output
workspace: app-source
- name: build-and-test
params:
- name: MAVEN_IMAGE
value: gcr.io/cloud-builders/mvn
- name: GOALS
value:
- package
- name: PROXY_PROTOCOL
value: http
runAfter:
- git-clone
taskRef:
kind: ClusterTask
name: maven
workspaces:
- name: source
workspace: app-source
- name: maven-settings
workspace: maven-settings
- name: build-image
params:
- name: IMAGE
value: image-registry.openshift-image-registry.svc:5000/$(context.pipelineRun.namespace)/$(params.APP_NAME):latest
- name: BUILDER_IMAGE
value: >-
registry.redhat.io/rhel8/buildah@sha256:82aa9592f3262313ec52f7a2335641e2581b0d0d9807980846d0539bb77d0657
- name: STORAGE_DRIVER
value: vfs
- name: DOCKERFILE
value: ./Dockerfile
- name: CONTEXT
value: .
- name: TLSVERIFY
value: 'true'
- name: FORMAT
value: oci
runAfter:
- build-and-test
taskRef:
kind: ClusterTask
name: buildah
workspaces:
- name: source
workspace: app-source
- name: redeploy
params:
- name: SCRIPT
value: oc rollout restart deployment/$(params.APP_NAME)
runAfter:
- build-image
taskRef:
kind: ClusterTask
name: openshift-client
workspaces:
- name: app-source
- name: maven-settings
Tekton パイプラインの実行
TaskとClusterTaskには、実行するステップが含まれています。ClusterTasksは、OpenShift Pipelinesがインストールされているクラスター内のすべてのユーザーが利用できますが、Tasksはカスタムにすることができます。
このパイプラインには、次の4つのタスクが定義されています。
git clone:これは、ClusterTask国立公園のソースリポジトリのクローンをWorkspace app-source作成し、作成されたPVCを使用するに保存します。app-source-workspace
build-and-test:を使用してJavaアプリケーションをビルドおよびテストしますmaven ClusterTask
build-image:これはbuildah ClusterTaskであり、OpenShiftの入力としてバイナリファイル(この場合は前のタスクで生成されたJARアーティファクト)を使用してイメージをビルドします。
redeploy: ClusterTaskを使用して、前のラボで作成したopenshift-client名前のデプロイメントを使用して、OpenShiftに作成されたイメージをデプロイします。
- Developerパースペクティブを表示し、左ペインの[Pipelines]をクリックし、次に
nationalparks-pipelineをクリックして、作成したパイプラインを表示します。

パイプラインは複数のパラメータがあり、使用する必要のあるものにデフォルト値があります。2つのワークスペースを使用しています:
- app-source :以前に作成されたPersistentVolumeClaimにリンクされています。これは、別のタスクapp-source-pvcで使用されるアーティファクトを保存するために使用されます
- maven-settings: Mavenキャッシュ用のEmptyDirボリューム。これをPVCで拡張して、後続のMavenビルドを高速化することもできます。
左ペインの [Pipelines]をクリックし、
nationalparks-pipelineをクリックします。- 右上の[Actions]リストから、
Startをクリックします。

パラメータを確認します。
パイプラインを追加するためのパラメータが表示され、デフォルトのものが表示されます。
APP_GIT_URLでnationalparks、 GitHubからリポジトリを確認します。
https://github.com/openshift-roadshow/nationalparks.git"Workspaces → app-source" にてリストから
PersistentVolumeClaimを選択し、次にapp-source-pvcを選択します。
Startをクリックして、パイプラインを実行します。

パイプラインの確認
Webコンソールからパイプラインの実行を簡単に追跡できます。
- Developerパースペクティブの左ペインにて
Pipelinesをクリックし、nationalparks-pipelineをクリックします。
- Developerパースペクティブの左ペインにて
[PipelineRuns] タブに切り替えて、進行中のすべてのステップを監視します。

- PipelineRun National-parks-deploy-run-をクリックします。

- 次に、実行中のタスクをクリックしてログを確認します。

- PipelineRunが正常に完了したことを確認します。

- Pod名を確認し、前回の結果と異なっていることを確認します
前回
(例) nationalparks-98876886f-cbkzc
Pipeline実行後
(例) nationalparks-65d65c588c-mm9w5
追加のデモ (オプション)
OpenShiftではBuildConfigを定義することでコンテナを作成するSource-2-Imageという仕組みが提供されています。それに加えて、WebhooksなどBuildConfigを実行すべき状況を制御するトリガーも提供されています。
- OpenShiftは、ビルドをトリガーするためにリモートシステムからフックを受信することをサポートするAPIエンドポイントを提供します。
- コードリポジトリのフックをOpenShiftのAPIに向けることで、コード/ビルド/デプロイの自動化を実現することができます。
詳細なステップは こちら を参考に実施してみてください。