ソースから Azure Red Hat OpenShift にアプリケーションをデプロイする
この記事では、source-to-image (S2I) ビルドを使用して、ソース コードから Azure Red Hat OpenShift クラスターにアプリケーションをデプロイします。 Source-to-Image (S2I) は、ソース コードから再現可能なコンテナー イメージを作成するためのビルド プロセスです。 S2I では、コンテナー イメージにソース コードを挿入し、コンテナーでそのソース コードの実行を準備できるようにすることで、実行の準備が完了したイメージが作成されます。 OpenShift でソースからアプリケーションをビルドしてデプロイできます。そのため、変更のたびにコンテナーを手動で作成する必要はありません。 ソース コードの変更が通知された場合、OpenShift によって新しいバージョンが自動的にビルドされ、デプロイできます。
開始する前に
Note
この記事は、プル シークレットを設定していることを前提としています。 クラスターのプル シークレットがない場合は、ドキュメントに従って、 Red Hat プル シークレットを追加または更新できます。
クラスターの作成
チュートリアルに従って、Azure Red Hat OpenShift クラスターを作成します。 コマンド ライン インターフェイス (CLI) をローカルにインストールして使用する場合、このチュートリアルでは、Azure CLI バージョン 2.6.0 以降を使用する必要があります。 現在のバージョンを調べるには、az --version
を実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。
クラスターに接続する
Azure Red Hat OpenShift クラスターを管理するには、oc (OpenShift コマンドライン クライアント) を使用する必要があります。
Note
Azure Cloud Shell に OpenShift コマンド ラインをインストールし、この記事のすべてのコマンド ライン操作にそれを使用することをお勧めします。 shell.azure.com からシェルを開くか、次のリンクを選択します。
チュートリアルに従って CLI をインストールし、クラスターの資格情報を取得して、Web コンソールと OpenShift CLI を使用してクラスターに接続します。
ログインすると、default
プロジェクトを使用しているというメッセージが表示されます。
Login successful.
You have access to 61 projects, the list has been suppressed. You can list all projects with 'oc projects'
Using project "default".
プロジェクトの作成
demoproject
という名前の新しいプロジェクトを作成するために、コマンドを実行します。
oc new-project demoproject
次のような出力が表示されます。
Now using project "demoproject" on server "https://api.wzy5hg7x.eastus.aroapp.io:6443".
You can add applications to this project with the 'new-app' command. For example, try:
oc new-app django-psql-example
to build a new example application in Python. Or use kubectl to deploy a simple Kubernetes application:
kubectl create deployment hello-node --image=gcr.io/hello-minikube-zero-install/hello-node
Web コンソールを起動する
以下を実行して、クラスターの Web コンソールの URL を見つけます。
az aro show \
--name <cluster name> \
--resource-group <resource group> \
--query "consoleProfile.url" -o tsv
次のような URL が見つかります。
https://console-openshift-console.apps.wzy5hg7x.eastus.aroapp.io/
ブラウザーでコンソールの URL にアクセスし、kubeadmin
資格情報を使用してログインします。
左側のメニューで、[管理者] パースペクティブではなく [開発者] パースペクティブに切り替え、プロジェクトの一覧から demoproject
を選択します。 これにより、プロジェクトの [トポロジ] ページが表示されます。
プロジェクトは空であるため、ワークロードは存在せず、アプリケーションのデプロイ方法に関するさまざまなオプションが表示されます。
Web コンソールを使用してデプロイする
表示されたアプリケーションをデプロイするためのオプションから、[From Git]\(Git から\) を選択します。 これにより、[Import from Git]\(Git からのインポート\) ページが表示されます。 [Git Repo URL]\(Git リポジトリ URL\) として https://github.com/sclorg/django-ex.git
を使用します。 サンプルの Web アプリケーションは、Python プログラミング言語を使用して実装されています。
Note
OpenShift では、これが Python プロジェクトであることが検出され、適切なビルダー イメージが選択されます。
下にスクロールして [詳細オプション] を表示し、[Create a route to the application]\(アプリケーションへのルートを作成する\) がオンになっていることを確認します。 この操作によって、OpenShift ルートが作成されます。これは、外部から到達可能なホスト名を付与することによってサービスを公開する方法です。
準備が完了したら、ページの下部にある [作成] をクリックします。 これにより、アプリケーションのビルドとデプロイを管理するためのリソースが作成されます。 その後、プロジェクトのトポロジの概要にリダイレクトされます。
トポロジの概要では、デプロイしたアプリケーションが視覚的表現が表示されます。 このビューで、全体的なアプリケーション構造を確認できます。
Git アイコンをクリックすると、アプリケーションのソース コードのビルド元である Git リポジトリに移動できます。 左下に表示されるアイコンは、アプリケーションのビルドの状態を示しています。 このアイコンをクリックすると、ビルドの詳細セクションに移動します。 アプリケーションがルートを公開している場合、右上のアイコンをクリックすると、作成されたアプリケーション ルートの URL を開くことができます。
アプリケーションのスケールアップまたはスケールダウン、ロールアウトの開始、ポッドの再作成が行われると、トポロジ ビューのアプリケーション表現がアニメーション化され、実行されている処理がリアルタイムに表示されます。
アプリケーション アイコンをクリックすると、下のような詳細が表示されます。
ビルダーのログを表示する
ビルドが開始されたら、[リソース] パネルに表示されている [ログの表示] リンクをクリックします。
これにより、ビルドの実行中にその進行状況を監視できます。 ビルダー イメージ (この例では Python) によって、アプリケーション ソース コードが最終イメージに挿入された後、それが OpenShift 内部イメージ レジストリにプッシュされます。 "Push successful (プッシュが成功しました)" という最終メッセージが表示されたら、ビルドは正常に完了したことになります。
アプリケーションにアクセスする
アプリケーション イメージのビルドが完了すると、それがデプロイされます。
左側のメニュー バーで [トポロジ] をクリックして、プロジェクトのトポロジ ビューに戻ります。 Web コンソールを使用してアプリケーションを作成した場合、アプリケーションのルートが自動的に作成され、クラスターの外部に公開されます。 Web ブラウザーからアプリケーションにアクセスするために使用できる URL は、前に表示した、アプリケーションの [リソース] タブで確認できます。
トポロジ ビューで、リングの右上のアイコンをクリックすることで、デプロイされたアプリケーションの URL を取得できます。 デプロイが完了し、アイコンをクリックすると、デプロイしたアプリケーションが表示されます。
コマンドラインを使用してデプロイする
Web コンソールを使用してアプリケーションをデプロイする方法を学習しました。次も同じ Web アプリケーションをデプロイしますが、今回は oc
コマンドライン ツールを使用します。
次のコマンドを実行してプロジェクトを削除し、最初からやり直します。
oc delete project demoproject
demoproject
が削除されたことを示す確認メッセージが表示されます。
project.project.openshift.io "demoproject" deleted
以下を実行して、demoproject
を再度作成します。
oc new-project demoproject
プロジェクト内で、提供されている最新バージョンの Python の S2I ビルダーを指定して、GitHub のソースから新しいアプリケーションを作成します。
oc new-app python:latest~https://github.com/sclorg/django-ex.git
これにより、次のような出力が表示されます。
--> Found image 8ec6f0d (4 weeks old) in image stream "openshift/python" under tag "latest" for "python:latest"
Python 3.8
----------
[...]
Tags: builder, python, python38, python-38, rh-python38
* A source build using source code from https://github.com/sclorg/django-ex.git will be created
* The resulting image will be pushed to image stream tag "django-ex:latest"
* Use 'oc start-build' to trigger a new build
* This image will be deployed in deployment config "django-ex"
* Port 8080/tcp will be load balanced by service "django-ex"
* Other containers can access this service through the hostname "django-ex"
--> Creating resources ...
imagestream.image.openshift.io "django-ex" created
buildconfig.build.openshift.io "django-ex" created
deploymentconfig.apps.openshift.io "django-ex" created
service "django-ex" created
--> Success
Build scheduled, use 'oc logs -f bc/django-ex' 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 svc/django-ex'
Run 'oc status' to view your app.
OpenShift では、アプリケーションの名前として Git リポジトリの名前が使用されます。 以下を実行して、ビルドとデプロイの状態を確認します。
oc status
ビルドとデプロイが完了すると、次のような出力が表示されます。
In project demoproject on server https://api.wzy5hg7x.eastus.aroapp.io:6443
svc/django-ex - 172.30.200.50:8080
dc/django-ex deploys istag/django-ex:latest <-
bc/django-ex source builds https://github.com/sclorg/django-ex.git on openshift/python:latest
deployment #1 deployed about a minute ago - 1 pod
2 infos identified, use 'oc status --suggest' to see details.
OpenShift クラスターの外部でアプリケーションを公開するために、以下を実行してルートを作成する必要があります。
oc expose service/django-ex
確認メッセージが表示されます。
route.route.openshift.io/django-ex exposed
以下を実行して URL を取得します。
oc get route django-ex
デプロイされたアプリケーションを参照するために使用できる、ルートに割り当てられたホスト名を取得する必要があります。
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD
django-ex django-ex-demoproject.apps.wzy5hg7x.eastus.aroapp.io django-ex 8080-tcp None
新しいバイナリ ビルドをトリガーする
アプリケーションで作業するときには、変更を行い、それらの変更がデプロイされたことを確認する必要があります。 コードがコミットされるたびに新しいビルドとデプロイをトリガーする Webhook を簡単に設定できます。 ただし、コードのすべての変更をリポジトリにプッシュせずに変更を確認したい場合もあるため、これが望ましくない場合もあります。
変更を頻繁に行う場合、いわゆるバイナリ ビルドを使用できます。 このシナリオを例示するために、以下を実行して、アプリケーションの Git リポジトリをローカルで複製します。
git clone https://github.com/sclorg/django-ex.git
これにより、アプリケーションのソース コードを含むサブディレクトリ django-ex
が作成されます。
Cloning into 'django-ex'...
remote: Enumerating objects: 980, done.
remote: Total 980 (delta 0), reused 0 (delta 0), pack-reused 980
Receiving objects: 100% (980/980), 276.23 KiB | 4.85 MiB/s, done.
Resolving deltas: 100% (434/434), done.
このサブディレクトリに移動します。
cd django-ex
統合 Azure Cloud Shell エディターを開きます。
code welcome/templates/welcome/index.html
下にスクロールし、Welcome to your Django application on OpenShift
という行を Welcome to Azure Red Hat OpenShift
に変更します。 ファイルを保存し、右上の ...
メニューからエディターを閉じます。
コマンドを実行して、新しいビルドを開始します。
oc start-build django-ex --from-dir=. --wait
--from-dir=.
フラグを渡すと、OpenShift コマンドラインで、指定されたディレクトリからソース コードがアップロードされ、ビルドとデプロイのプロセスが開始されます。 下のような出力が表示され、数分後にビルドが完了します。
Uploading directory "." as binary input for the build ...
.
Uploading finished
build.build.openshift.io/django-ex-2 started
アプリケーションを使用してブラウザーを更新すると、更新されたタイトルが表示されます。
リソースをクリーンアップする
アプリケーションの操作が完了したら、次のコマンドを実行してプロジェクトを削除できます。
oc delete project demoproject
「チュートリアル: Azure Red Hat OpenShift 4 クラスターを削除する」の手順に従って、クラスターを削除することもできます。
次のステップ
このガイドでは、以下の方法について学習しました。
- プロジェクトの作成
- Web コンソールを使用してソース コードからアプリケーションをデプロイする
- OpenShift コマンド ラインを使用してソース コードからアプリケーションをデプロイする
- OpenShift コマンド ラインを使用してバイナリ ビルドをトリガーする
Source-to-Image 戦略とその他のビルド戦略を使用してアプリケーションをビルドおよびデプロイする方法について詳しく確認します。