type
status
date
slug
summary
tags
category
icon
password
书籍
ソリューション
アプリケーションのデプロイ
このレビューでは、OpenShiftにマルチコンテナアプリケーションをデプロイし、問題を修正して正常にデプロイされるようにします。
結果
- ユーザーがプロジェクト内で新しいアプリケーションを作成できるようにします。ユーザーが新しいプロジェクトを作成できるのは、クラスター管理者のみとします。リソース使用量を制限するため、プロジェクトにリソースクォータを適用します。
- クォータ設定を検証するために、シンプルなSource-to-Image(S2I)ベースのアプリケーションをデプロイします。
- アプリケーションデプロイ中の問題をトラブルシューティングし、修正します。
- アプリケーションで使用するMySQLデータベースの永続ストレージを設定します。
- OpenShiftでテンプレートを使用してマルチコンテナアプリケーションをデプロイします。このテンプレートはWebコンソールからユーザーに提供されます。
- マルチコンテナアプリケーションで使用するカスタムコンテナイメージをビルドします。
始める前に
もし、マスターと2つのノードを持つOpenShiftクラスタが稼働していない場合は、前のセクションでの「OpenShiftのインストール」に関する包括的なレビューラボのいずれかを完了する必要があります。
以下のコマンドを実行して、このレビューラボを開始する準備が整っているかを確認し、また、このラボに必要なファイルをダウンロードします:
/home/student/DO285/labs/review-deploy
フォルダには、このラボで使用するサンプル設定ファイルとスクリプトが含まれています。このフォルダには永続ボリュームなどのリソースのためのサンプルYAMLファイルも提供されています。OpenShift Container Platformの製品ドキュメントは、ワークステーションホストのデスクトップに提供されています。このドキュメントを参照して、このラボで必要なコマンドを確認してください。
TODOリストアプリケーション構成
TODOリストアプリケーションは、以下の3つのコンテナから成ります:
- MySQLデータベースコンテナ:TODOリストのタスクに関するデータを保存。
- Apache httpdウェブサーバーフロントエンドコンテナ(todoui):静的HTML、CSS、およびJavaScriptアセットを提供。ユーザーインターフェイスはAngular.jsフレームワークを使用。
- Node.jsバックエンドAPIコンテナ(todoapi):RESTfulインターフェイスを提供し、MySQLデータベースと連携してデータを管理。
指示
- 管理者ユーザーでのログイン
- ワークステーションVMから、クラスター管理者ユーザー
admin
としてログインし、ユーザーが新しいプロジェクトを作成できないようにします。
- 新しいプロジェクトの作成
todoapp
という名前の新しいプロジェクトを作成し、開発者ユーザーにこのプロジェクトへのアクセスを許可します。- プロジェクトにクォータを設定します:
- クォータ名:
todoapp-quota
- ポッドのハードリミットを1に設定します。
- 開発者ユーザーでのログインとアプリケーションデプロイ
- 開発者ユーザーとしてログインし、
php-helloworld
アプリケーションをデプロイしてクォータ設定を検証します。 - アプリケーションが正常にデプロイされていることを確認し、デプロイが失敗した場合は問題をトラブルシューティングして修正します。
- リソース削除
php-helloworld
アプリケーションのすべてのリソースを削除しますが、todoapp
プロジェクトは削除しません。
- MySQLデータベース用永続ストレージのプロビジョニング
- NFS共有を作成し、MySQLデータベースのための永続ボリュームを作成します。
- NFS共有が複数のクライアントで読み書きできることを確認します。
- 永続ボリュームの作成
mysqlpv
という名前の永続ボリュームを作成します。2GBサイズで、複数のクライアントが同時に読み書きできるアクセスモードに設定します。
- OpenShiftテンプレートのインポート
nodejs-mysql-template.yaml
をOpenShiftにインポートし、WebコンソールでJavaScriptカテゴリに表示されることを確認します。
- カスタムコンテナイメージのビルドとプッシュ
todoui
のDockerfileを使ってイメージをビルドし、プライベートレジストリにプッシュします。- OpenShiftでイメージをインポートし、
todoapp
名前空間にtodoui
というイメージストリームが作成されることを確認します。
- 新しいアプリケーションの作成
- 開発者ユーザーとして、インポートしたテンプレートを使って
todoapi
アプリケーションを作成します。必要な値は以下の通りです: - アプリケーション名:
todoapi
- GitリポジトリURL:
http://services.lab.example.com/todoapi
- アプリケーションのホスト名:
todoapi.apps.lab.example.com
- MySQLユーザー名:
todoapp
- MySQLパスワード:
todoapp
- データベース名:
todoappdb
- データベース管理者パスワード:
redhat
- データインポート
- SQLファイルを使用して、TODOリストのサンプルデータをMySQLデータベースにインポートします。
- バックエンドAPIの動作確認
curl
を使ってhttp://todoapi.apps.lab.example.com/todo/api/host
にアクセスし、APIが正常に動作していることを確認します。
- データの取得確認
curl
を使用して、http://todoapi.apps.lab.example.com/todo/api/items
にアクセスし、データベースから取得されたTODOアイテムのリストを確認します。
- フロントエンドアプリケーションのデプロイ
- 開発者ユーザーとして、
todoui
イメージを使って新しいアプリケーションtodoui
を作成します。
- ルートの作成と動作確認
todoui
サービスの新しいルートを作成し、todo.apps.lab.example.com
を設定します。- ブラウザで
http://todo.apps.lab.example.com
を開き、アプリケーションが正しく動作していることを確認します。
このラボの手順に従って、アプリケーションのデプロイと確認を行い、必要な設定を検証してください。
Let’s go
- ワークステーションから、クラスター管理者としてログインします。通常のユーザーがOpenShiftで新しいプロジェクトを作成できないように制限します。
1.1. ワークステーションVMでターミナルウィンドウを開き、
admin
ユーザーとしてredhat
のパスワードでログインします。
1.2. プロジェクトの作成をクラスター管理者の役割のみに制限します。通常のユーザーは新しいプロジェクトを作成できません。
- 新しいプロジェクトを作成し、開発者ユーザーがこのプロジェクトにアクセスできるようにし、リソースクォータを設定します。
2.1.
todoapp
という名前の新しいプロジェクトを作成します:
todoapp
プロジェクトに開発者ユーザーがアクセスできるようにします。現在のプロジェクトがtodoapp
であることを確認します:2.2. ワークステーションVMの
/home/student/DO285/labs/review-deploy/set-quotas.sh
スクリプトを実行して、todoapp
プロジェクトにクォータを設定します:php-helloworld
アプリケーションをSource-to-Image (S2I) を使ってデプロイし、プロジェクトのクォータ設定が適用されていることを検証します。ソースコードはGitリポジトリhttp://services.lab.example.com/php-helloworld
にあります。 3.1. ワークステーションVMで新しいターミナルを開き、developer
ユーザーとしてredhat
のパスワードでOpenShiftにログインします。不正な証明書を承認するように求められた場合、y
を入力します:
3.2.
hello
という名前の新しいアプリケーションを作成します:3.3. アプリケーションが正常にビルドされたことを確認します:
3.4. アプリケーションが正常にビルドされることを確認しますが、ポッドは作成されていないことを確認します。
php-helloworld
アプリケーションがデプロイされない理由をトラブルシュートし、問題を修正します。 4.1. プロジェクトのイベントログを確認します:
イベントログには、アプリケーションが要求したポッドの数が、プロジェクトで許可されているポッド数を超えていることが記録されています。デプロイメント設定の状態を確認します:
CURRENT
列が0を示していることに注意してください。4.2. プロジェクトのクォータ設定を確認します:
コマンドの出力には、ポッド数の上限が1に設定されていることが示されています。この設定では、アプリケーションのビルド、デプロイ、実行には十分ではありません。ステップ2.2でプロジェクトのクォータを設定するスクリプトを実行したことを思い出してください。ワークステーションVMで
/home/student/DO285/labs/review-deploy/set-quotas.sh
ファイルを確認すると、クラスター管理者がtodoapp
プロジェクト用のクォータを設定する際にコマンドに誤字を入力していたことがわかります。ポッド数が1ではなく10であるべきです。4.3. アプリケーションの既存のデプロイメントをキャンセルします:
4.4. クラスター管理者としてワークステーションVMで以下のコマンドを実行して、クォータ設定を修正します。
todoapp
が現在のアクティブなプロジェクトであることを確認します。コマンドは/home/student/DO285/labs/review-deploy/fix-quotas.sh
というスクリプトとしても提供されています。※
oc edit resourcequota todoapp-quota
コマンドを使用してクォータを変更することもできます。4.5. ワークステーションで再度OpenShiftの開発者ユーザーに切り替え、ポッド数のクォータが10に増加したことを確認します:
4.6. アプリケーションを再デプロイします:
4.7. プロジェクト内のポッドの状態を確認します:
アプリケーションのデプロイメントが成功し、ポッドが
Running
状態であることを確認できます。4.8. サンプルのS2Iアプリケーションを削除します:
- TODOリストアプリケーションのデプロイメントを進めることができます。最初のステップとして、アプリケーションで使用されるMySQLデータベースのために永続ストレージをプロビジョニングします。
5.1. サービスVM上に新しいNFS共有を作成します。
/home/student/DO285/labs/review-deploy
フォルダにあるconfig-nfs.sh
スクリプトをサービスVMにコピーして実行します。5.2. node1とnode2ホストが、OpenShiftマスタVMからNFSでエクスポートされたボリュームにアクセスできることを確認します。
ワークステーションで新しいターミナルウィンドウを開き、node1ホストにログインして、rootユーザーとしてNFS共有にアクセスできることを確認します。
5.3. node1で、ファイルシステムに正しいパーミッションが設定されているかを確認します:
5.4. NFS共有をアンマウントします:
5.5. 同様に、node2 VMにログインして、rootユーザーとしてNFS共有にアクセスできることを確認します:
5.6. node2で、ファイルシステムに正しいパーミッションが設定されているかを確認します:
5.7. NFS共有をアンマウントします:
5.8. MySQLデータベース用の新しいPersistentVolumeを作成します。
ワークステーションVMで
/home/student/DO285/labs/review-deploy/todoapi/openshift/mysql-pv.yaml
にあるYAMLリソースファイルを編集します。ラボの指示に従って属性を変更し、最終的な内容が次のようになるようにします:5.9. OpenShiftにクラスター管理者ユーザーとしてログインし、提供されたYAMLリソース定義ファイルを使用してPersistentVolumeを作成します:
5.10. PersistentVolumeがプロジェクトによって要求される準備が整ったことを確認します:
- OpenShiftに
nodejs-mysql-persistent
テンプレートをインポートします。todoapi
とmysql
ポッド、およびそれらに関連するサービスを組み合わせたOpenShiftテンプレートがワークステーションVMの/home/student/DO285/labs/review-deploy/todoapi/openshift/nodejs-mysql-template.yaml
ファイルに提供されています。
6.1. テンプレートファイルの内容を簡単に確認します。ファイルを編集したり変更を加えたりしないでください。
6.2. テンプレートを
openshift
名前空間にインポートして、ユーザーがアプリケーションを作成できるようにします:- ワークステーションVMで
todoui
Dockerイメージをビルドし、タグを付けてワークステーションのプライベートレジストリにプッシュします。todoui
アプリケーションのDockerfileとその関連ビルドアーティファクトは、ワークステーションVMの/home/student/DO285/labs/review-deploy/todoui/
フォルダにあります。提供されたDockerfileを簡単に確認します。
7.1. 提供された
build.sh
スクリプトを実行して、ワークステーションVMでtodoui
Dockerイメージをビルドします:7.2. 新しくビルドされた
todoui
Dockerイメージにタグを付けます:7.3. 新しくタグ付けされた
todoui
DockerイメージをサービスVM上のクラスルームプライベートDockerレジストリにプッシュします:- OpenShiftにtodoui Dockerイメージをインポートし、イメージストリームが作成されたことを確認します。
8.1. ワークステーションからtodoui Dockerイメージをプライベートレジストリからインポートします:
インポートは正常に完了しました。
8.2. todouiイメージストリームが作成されたことを確認します:
8.3. todouiイメージストリームを詳細に確認し、最新のtodoui Dockerイメージが参照されていることを確認します:
- OpenShiftウェブコンソールを使用して、nodejs-mysql-persistentテンプレートを使って新しいアプリケーションを作成します。
9.1. ワークステーションのVMからウェブブラウザを開き、OpenShiftウェブコンソール(https://master.lab.example.com)
にdeveloperユーザーとしてログインします。todoappという名前の単一のプロジェクトが表示されていることを確認します。必要に応じて自己署名証明書を受け入れる例外を作成します。
9.2. todoappをクリックし、「プロジェクトに追加」をクリックします。その後、「カタログを参照」をクリックします。カタログ参照ページで、「言語」から「JavaScript」をクリックし、JavaScriptベースのテンプレートのリストを表示します。Node.js + MySQL (Persistent)というテンプレートが表示されるはずです。

注意
このラボのテスト中、時々テンプレートがdeveloperユーザーには表示されないことがありました。その場合、adminユーザーとしてログインして再試行してください。以下のラボのステップはadminとして進めても安全です。
9.3. Node.js + MySQL (Persistent)テンプレートを選択し、次の値を使用して新しいアプリケーション「todoapi」を作成します:
パラメータ | 値 |
名前 | todoapi |
GitリポジトリURL | |
アプリケーションホスト名 | todoapi.apps.lab.example.com |
MySQLユーザー名 | todoapp |
MySQLパスワード | todoapp |
データベース名 | todoappdb |
データベース管理者パスワード | redhat |

「次へ」をクリックします。バインディングページの値は無視して、「作成」をクリックします。確認ページが表示されたら、「閉じる」をクリックします。
9.4. 「概要」リンクをクリックして、アプリケーションがビルドされてデプロイされていることを確認します。
- TODOリストアプリケーションのSQLデータをMySQLデータベースにインポートし、todoapiバックエンドサービスのAPIが正常に動作していることを確認します。
10.1. ワークステーションのVMから新しいターミナルを開き、OpenShiftにdeveloperとしてログインします。単一のプロジェクト「todoapp」にアクセスできることを確認します。
10.2. TODOリストアプリケーションのサンプルデータがワークステーションのVM上にある「/home/student/DO285/labs/review-deploy/todoapi/sql/db.sql」ファイルに提供されています。「oc port-forward」コマンドを使用してMySQLデータベースのPodに直接接続します。データベースPodの名前は「oc get pods」コマンドで確認できます:
このコマンドはシェルのプロンプトに戻りません。ターミナルウィンドウをそのままにしておき、新しいターミナルウィンドウを開いて次のステップを実行します。
10.3. db.sqlファイルのSQLデータをtodoappdbデータベースにインポートします。「/home/student/DO285/labs/review-deploy/todoapi/sql/import-data.sh」スクリプトを実行してデータをインポートします。スクリプトが正常に実行されると、データベースにインポートされたレコードのリストが表示されます:
10.4. curlコマンドを使用して、URL「http://todoapi.apps.lab.example.com/todo/api/host」にアクセスし、アプリケーションが正しく動作していることを確認します。これにより、アプリケーションが実行されているPod名とPodのIPアドレスが表示されます:

10.5. curlコマンドを使用して、URL「http://todoapi.apps.lab.example.com/todo/api/items」にアクセスし、アプリケーションがMySQLデータベースから正しくデータを取得できることを確認します:
10.6. oc port-forwardコマンドを実行しているターミナルウィンドウで、Ctrl+Cを押してポートフォワーディングを停止します。
- todouiイメージストリームを使用して新しいアプリケーションを作成します。
11.1. todouiイメージストリームに基づいて、新しいアプリケーション「todoui」を作成します:
11.2. プロジェクト内のPodの状態を確認します:
OpenShiftウェブコンソールでは、プロジェクトの「概要」ページに新しいtodoui Podが表示されているはずです。
- todouiアプリケーションのルートを作成します。
12.1. サービスを外部ユーザーに公開します:
出力:
12.2. ルートから提供されるURLを使って、todouiアプリケーションにアクセスします:
出力例:
- 最後に、ワークステーションVMのブラウザを使用して、TODOリストアプリケーションのホームページ(http://todo.apps.lab.example.com)にアクセスします。データベースに保存されたアイテムのリストが表示されるはずです。タスクを追加、編集、削除して、アプリケーションが正しく動作していることを確認してください。

注意
最初にデータベースからロードされた最初の2つのタスクは削除しないでください。これらは、ラボが正しく完了したかどうかを確認するために採点スクリプトで使用されます。
評価を行うには、次のコマンドを実行します:

コマンドを実行した後、全体的なPASS評価が表示されない場合は、作業を再確認して、再度評価コマンドを実行してください。
- 作者:みなみ
- 链接:https://www.minami.ac.cn//%E8%B3%87%E6%A0%BC%E5%8B%89%E5%BC%B7/1a6d7ae8-88e2-8066-8abb-ef1508b5e6c2
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章