ソースから 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 ShellOpenShift コマンド ラインをインストールし、この記事のすべてのコマンド ライン操作にそれを使用することをお勧めします。 shell.azure.com からシェルを開くか、次のリンクを選択します。

Button to launch Azure Cloud Shell

チュートリアルに従って 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 資格情報を使用してログインします。

Azure Red Hat OpenShift login screen

左側のメニューで、[管理者] パースペクティブではなく [開発者] パースペクティブに切り替え、プロジェクトの一覧から demoproject を選択します。 これにより、プロジェクトの [トポロジ] ページが表示されます。

Azure Red Hat OpenShift project topology

プロジェクトは空であるため、ワークロードは存在せず、アプリケーションのデプロイ方法に関するさまざまなオプションが表示されます。

Web コンソールを使用してデプロイする

表示されたアプリケーションをデプロイするためのオプションから、[From Git]\(Git から\) を選択します。 これにより、[Import from Git]\(Git からのインポート\) ページが表示されます。 [Git Repo URL]\(Git リポジトリ URL\) として https://github.com/sclorg/django-ex.git を使用します。 サンプルの Web アプリケーションは、Python プログラミング言語を使用して実装されています。

Azure Red Hat OpenShift project from Git

Note

OpenShift では、これが Python プロジェクトであることが検出され、適切なビルダー イメージが選択されます。

下にスクロールして [詳細オプション] を表示し、[Create a route to the application]\(アプリケーションへのルートを作成する\) がオンになっていることを確認します。 この操作によって、OpenShift ルートが作成されます。これは、外部から到達可能なホスト名を付与することによってサービスを公開する方法です。

Azure Red Hat OpenShift project from Git - Route setup

準備が完了したら、ページの下部にある [作成] をクリックします。 これにより、アプリケーションのビルドとデプロイを管理するためのリソースが作成されます。 その後、プロジェクトのトポロジの概要にリダイレクトされます。

Azure Red Hat OpenShift project from Git - Topology

トポロジの概要では、デプロイしたアプリケーションが視覚的表現が表示されます。 このビューで、全体的なアプリケーション構造を確認できます。

Git アイコンをクリックすると、アプリケーションのソース コードのビルド元である Git リポジトリに移動できます。 左下に表示されるアイコンは、アプリケーションのビルドの状態を示しています。 このアイコンをクリックすると、ビルドの詳細セクションに移動します。 アプリケーションがルートを公開している場合、右上のアイコンをクリックすると、作成されたアプリケーション ルートの URL を開くことができます。

アプリケーションのスケールアップまたはスケールダウン、ロールアウトの開始、ポッドの再作成が行われると、トポロジ ビューのアプリケーション表現がアニメーション化され、実行されている処理がリアルタイムに表示されます。

アプリケーション アイコンをクリックすると、下のような詳細が表示されます。

Azure Red Hat OpenShift project from Git - Details

ビルダーのログを表示する

ビルドが開始されたら、[リソース] パネルに表示されている [ログの表示] リンクをクリックします。

Azure Red Hat OpenShift project from Git - Build logs

これにより、ビルドの実行中にその進行状況を監視できます。 ビルダー イメージ (この例では Python) によって、アプリケーション ソース コードが最終イメージに挿入された後、それが OpenShift 内部イメージ レジストリにプッシュされます。 "Push successful (プッシュが成功しました)" という最終メッセージが表示されたら、ビルドは正常に完了したことになります。

アプリケーションにアクセスする

アプリケーション イメージのビルドが完了すると、それがデプロイされます。

左側のメニュー バーで [トポロジ] をクリックして、プロジェクトのトポロジ ビューに戻ります。 Web コンソールを使用してアプリケーションを作成した場合、アプリケーションのルートが自動的に作成され、クラスターの外部に公開されます。 Web ブラウザーからアプリケーションにアクセスするために使用できる URL は、前に表示した、アプリケーションの [リソース] タブで確認できます。

トポロジ ビューで、リングの右上のアイコンをクリックすることで、デプロイされたアプリケーションの URL を取得できます。 デプロイが完了し、アイコンをクリックすると、デプロイしたアプリケーションが表示されます。

Azure Red Hat OpenShift project from Git - Browse app

コマンドラインを使用してデプロイする

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 に変更します。 ファイルを保存し、右上の ... メニューからエディターを閉じます。

Azure Red Hat OpenShift project from Git - Edit application in Azure Cloud Shell editor

コマンドを実行して、新しいビルドを開始します。

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

アプリケーションを使用してブラウザーを更新すると、更新されたタイトルが表示されます。

Azure Red Hat OpenShift project from Git - Browse updated app

リソースをクリーンアップする

アプリケーションの操作が完了したら、次のコマンドを実行してプロジェクトを削除できます。

oc delete project demoproject

チュートリアル: Azure Red Hat OpenShift 4 クラスターを削除する」の手順に従って、クラスターを削除することもできます。

次のステップ

このガイドでは、以下の方法について学習しました。

  • プロジェクトの作成
  • Web コンソールを使用してソース コードからアプリケーションをデプロイする
  • OpenShift コマンド ラインを使用してソース コードからアプリケーションをデプロイする
  • OpenShift コマンド ラインを使用してバイナリ ビルドをトリガーする

Source-to-Image 戦略とその他のビルド戦略を使用してアプリケーションをビルドおよびデプロイする方法について詳しく確認します。