Red Hat OpenShift on IBM Cloud によるマイクロサービスのデプロイ
このチュートリアルでは、費用が発生する場合があります。 コスト見積もりツールを使用して、予測使用量に基づいてコスト見積もりを生成します。
このチュートリアルでは、アプリケーションを Red Hat OpenShift on IBM Cloud にデプロイする方法について説明します。 Red Hat OpenShift on IBM Cloud は、開発者がソフトウェア・アプリケーションをデプロイし、システム管理者が実動でアプリケーションを拡大および監視するための優れた経験を提供します。
目標
- 展開するRed Hat OpenShift on IBM Cloud集まる
- マイクロサービスをデプロイする
- マイクロサービスをスケーリングする
- オペレーターを使用して IBM Cloudant をデプロイし、マイクロサービスにバインドする
- IBM Cloud Logs を使用してクラスターを監視する
- IBM Cloud Monitoring を使用してクラスターを監視する
{: caption="図
- 開発者は URL リポジトリで Red Hat OpenShift アプリケーションを初期化し、 Builder、 DeploymentConfig、 Service を生成します。
- ビルダーはソースを複製し、イメージを作成し、それを DeploymentConfig プロビジョニングのために Red Hat OpenShift レジストリにプッシュします。
- ユーザーが、フロントエンド・アプリケーションにアクセスします。
- IBM Cloudant データベース・インスタンスが、IBM Cloud Operator の Service によってプロビジョンされます。
- バックエンド・アプリケーションが、IBM Cloud Operator の Binding を使用してデータベースに接続されます。
- IBM Cloud Logs がプロビジョンされ、エージェントがデプロイされます。
- Monitoring がプロビジョンされ、エージェントがデプロイされます。
- 管理者が IBM Cloud Logs および Monitoring でアプリをモニターします。
以下のステップのいくつかを実行する スクリプトがある。 これについては、 README.mdに説明があります。
問題が発生してやり直す場合は、まず destroy.sh
スクリプトを実行し、復旧のステップに対応するスクリプトを順番に実行してください。
開始前に
このチュートリアルでは、以下が必要です。
- IBM Cloud CLI
- IBM Cloud Kubernetes Service プラグイン (
kubernetes-service
)
- IBM Cloud Kubernetes Service プラグイン (
oc
: OpenShift と対話します。
ご使用のオペレーティング環境でこれらのツールをダウンロードおよびインストールするための手順は、チュートリアルの概説ガイドに記載されています。
これらのツールのインストールを回避するには Cloud Shell を IBM Cloud コンソールから実行する。 oc version
を使用して、Red Hat OpenShift on IBM Cloud CLI のバージョンがクラスターのバージョン (4.12.x
) と一致することを確認します。一致しない場合は、以下の指示に従って、一致するバージョンをインストールしてください。
Red Hat OpenShift on IBM Cloud クラスターの作成
Red Hat OpenShift on IBM Cloud Red Hat OpenShift クラスタは、開発ライフサイクルの運用に一貫性と柔軟性を提供する コンテナオーケストレーションの上に構築されます。 Kubernetes
このセクションでは、2 つのワーカー・ノードを持つ、1 つのゾーン内の Red Hat OpenShift on IBM Cloud クラスターをプロビジョンします。
- IBM Cloud® カタログ から Red Hat OpenShift on IBM Cloud クラスターを作成します。
- オーケストレーション・サービスを Red Hat OpenShift on IBM Cloud の 4.12.x バージョンに設定する。
- OCP 使用権を選択します。
- 「インフラストラクチャー」 の下で、クラシックまたは VPC を選択します
- VPC インフラストラクチャー上の Red Hat OpenShift の場合は、Red Hat OpenShift on IBM Cloud クラスターを作成する前に VPC と 1 つのサブネットを持っている必要があります。 以下の点に留意して、ご希望の VPC を作成または検査します (標準 VPC クラスターの作成に記載されている手順を参照してください)。
- このチュートリアルで使用できるサブネットは 1 つ (サブネットのゾーンと名前をメモしてください)
- パブリック・ゲートウェイがサブネットに接続される
- 既存の Cloud Object Storage サービスを選択するか、必要な場合は新規に作成する
- VPC インフラストラクチャー上の Red Hat OpenShift の場合は、Red Hat OpenShift on IBM Cloud クラスターを作成する前に VPC と 1 つのサブネットを持っている必要があります。 以下の点に留意して、ご希望の VPC を作成または検査します (標準 VPC クラスターの作成に記載されている手順を参照してください)。
- 「ロケーション」 の下で、以下のようにします
- VPC インフラストラクチャー上の Red Hat OpenShift の場合
- リソース・グループ を選択します
- 該当しないゾーンのチェック・マークを外します
- ご希望のゾーンで、ご希望のサブネット名を確認し、ない場合は編集の鉛筆ボタンをクリックして、ご希望のサブネット名を選択します
- クラシック・インフラストラクチャー上の Red Hat OpenShift の場合、標準クラシック・クラスターの作成手順に従います。
- リソース・グループ を選択します
- 地域 を選択します
- 「可用性」 として 「単一ゾーン」 を選択します
- データ・センター を選択します
- VPC インフラストラクチャー上の Red Hat OpenShift の場合
- 「ワーカー・プール (Worker pool)」 の下で、以下のようにします
- 4 vCPUs 16GB メモリー をフレーバーとして選択します
- このチュートリアル用に、データ・センターごとに 2 つのワーカー・ノードを選択します (クラシックのみ: 「ローカル・ディスクの暗号化」 をそのままにします)
- 「統合 (Integrations)」 で、 「ロギング (Logging)」 と 「モニター (Monitoring)」 を有効にして構成します。
- リソースの詳細で、
<your-initials>
を自分のイニシャルに置き換えて、 クラスタ名を-myopenshiftcluster に設定します。 - Create をクリックして、 Red Hat OpenShift on IBM Cloud クラスターをプロビジョニングします。
ここで選択したリソース・グループをメモしておいてください。 この同じリソース・グループを、このラボのすべてのリソースに使用することになります。
Cloud シェルの初期設定
Red Hat OpenShift Container Platform CLIは、アプリケーションを管理するためのコマンドと、システムの各コンポーネントとやり取りするための低レベルのツールを公開している。
oc
コマンドを使用すると、この CLI を使用できます。
コマンド・ライン・ツールのインストールを避ける場合は、IBM Cloud Shell を使用することをお勧めします。
IBM Cloud Shell は、ブラウザーで利用できるクラウド・ベースのシェル・ワークスペースです。 完全な IBM Cloud CLI と、アプリ、リソース、インフラストラクチャーの管理に使用できる数多くのプラグインおよびツールが事前構成されています。
この手順では、IBM Cloud シェルを使用して、割り当てられたクラスターを指すように oc
を構成します。
-
クラスターの準備ができたら、右上隅のボタン (アカウントの隣) をクリックして Cloud シェルを起動します。 このウィンドウ/タブは閉じないでください。
-
OpenShift CLI のバージョンを確認します。
oc version
バージョンは最低でも 4.12.x である必要があります。そうでない場合は、 以下の 手順に従って最新バージョンをインストールしてください。
-
すべてのクラスターをリスト表示したときに、使用しているクラスターが表示されていることを確認します。
ibmcloud oc clusters
-
プレースホルダ
を置き換えて、 oc
コマンド環境を初期化する:ibmcloud oc cluster config -c <your-cluster-name> --admin
-
oc
コマンドが機能していることを確認します。oc get projects
アプリケーションのデプロイ
このセクションでは、patient-health-frontend
という Node.js Express アプリケーションをデプロイします。これは、Red Hat OpenShift の機能のデモンストレーション用の患者医療記録システムのユーザー・インターフェースです。 このサンプル・アプリケーションの GitHub リポジトリーは https://github.com/IBM-Cloud/patient-health-frontend にあります。
プロジェクトの作成
プロジェクトとは、DevOps チームによって管理されるリソースのコレクションです。 管理者がプロジェクトを作成し、開発者が、ビルドしてデプロイできるアプリケーションを作成します。
- 選択したクラスタで OpenShift ウェブコンソールボタンをクリックして、 Red Hat OpenShift ウェブコンソールに移動します。
- 左側のナビゲーション・ペインの 「管理者」 パースペクティブで、「ホーム」 > 「プロジェクト」 ビューを選択して、すべてのプロジェクトを表示します。
- 「Create Project」 をクリックして、新しいプロジェクトを作成します。 ポップアップでプロジェクトの 「名前」 に
example-health
と入力し、「表示名」 と 「説明」 はブランクのままにして、「作成」 をクリックします。 - 新しいプロジェクトの 「Project Details」 ページが表示されます。 コンテキストは、左側が Administrator > Home > Projects、上側が Projects > Project details > example-health であることを確認してください。
アプリケーションのビルドとデプロイ
- 「管理者」 から 「開発者」 パースペクティブに切り替えます。 左側に「 Developer 」>「 +Add 」、上部に「 Project: example-health 」と表示された状態であるはずです。
「プロジェクト・ビュー」 - 「 Import from Git 」を選択して、アプリケーションをビルドしてデプロイしましょう。
- 「Git Repo URL」フィールドにリポジトリー
https://github.com/IBM-Cloud/patient-health-frontend.git
を入力します。- 緑色のチェック
Builder image detected
と Node.js 16 (UBI 8) に注意してください。 - ビルダー・イメージによって言語 Node.js が自動的に検出されたことに注意してください。検出されない場合は、提供されているリストから
Node.js
を選択します。 - 「Builder Image Version」 はデフォルトのままです。
- 「Application Name」 は、文字をすべて削除して空にします (これによって 「Name」 と同じ名前がデフォルトとして設定されます)
- Name : patient-health-frontend。
- 「リソース・タイプ」 リンクをクリックして、 DeploymentConfig を選択します。
- 他の選択項目についてはデフォルトのままにします。
- 緑色のチェック
- ウィンドウ下部の 「Create」 をクリックして、アプリケーションをビルドしてデプロイします。
アプリケーションの表示
-
先ほどデプロイしたアプリが表示されるはずです。 「Developer」 パースペクティブの example-health プロジェクトの 「Topology」 ビューにいることを確認します。 このプロジェクト内のすべてのアプリケーションが表示されています。
-
ノード の 「patient-health-frontend」 を選択し、
DeploymentConfig
の詳細ビューを表示します。 「patient-health-frontend」 の横に 「DC」 と表示されていることに注目してください。 「Pods」、「Builds」、「Services」、「Routes」が表示されます。「アプリの詳細」 - Pods: Node.js アプリケーション・コンテナー
- Builds: Node.js ソース・コードから Docker イメージを作成し、そのイメージを Red Hat OpenShift コンテナー・レジストリーにデプロイし、デプロイメント構成を開始した自動生成のビルド
- Services: 複数のポッドを 1 つのサービスとしてグループ化し、listen するポートを定義することで、ポッドへのアクセス方法を Red Hat OpenShift に指示する
- Routes: IBM Cloud ネットワークから提供される LoadBalancer を使用して、サービスを外部に公開する
-
完了したビルドの横の 「View Logs」 をクリックします。 Red Hat OpenShift が Node.js アプリケーションの依存関係をインストールして Docker イメージをビルド/プッシュするために実行した処理が表示されます。 最後のエントリーは次のような表示であるはずです。
Successfully pushed image-registry.openshift-image-registry.svc:5000/example-health/patient-health-frontend@sha256:f9385e010144f36353a74d16b6af10a028c12d005ab4fc0b1437137f6bd9e20a Push successful
-
前の表示に戻るために 「Topology」 をクリックし、アプリをもう一度選択します。
-
「Routes」 の URL をクリックして、アプリケーションにアクセスします。 このアプリはデモンストレーション・モードで実行されているので、ユーザー名とパスワードには、
test:test
などの任意のストリングを入力できます。
Node.js
アプリが Red Hat OpenShift Container Platform にデプロイされました。 まとめると、次のようになります。
- Node.js の「Example Health」アプリケーションを GitHub からクラスターに直接デプロイしました。
- このアプリケーションを、Red Hat OpenShift on IBM Cloud コンソールで確認しました。
- ビルド構成 が作成されました。アプリケーションの詳細の「Builds」セクションで 「Start Build」 をクリックすることで、新しいコミットをビルドしてデプロイできます。
ロギングおよびモニタリング
このセクションでは、Red Hat OpenShift on IBM Cloud で提供されている、すぐに使用可能なロギングとモニタリングの機能について見ていきます。
アプリケーションの負荷のシミュレート
負荷をシミュレートするスクリプトを作成します。
- アプリをデプロイしたプロジェクトに接続していることを確認します。
oc project example-health
- アプリケーションにアクセスするためのパブリック・ルートを取得します。
次のような出力が表示されます。Host の値をメモしてください。oc get routes
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD patient-health-frontend patient-health-frontend-example-health.roks07-872b77d77f69503584da5a379a38af9c-0000.eu-de.containers.appdomain.cloud patient-health-frontend 8080-tcp None
- ホストを指定して変数を定義します。
HOST=$(oc get routes -o json | jq -r '.items[0].spec.host')
- アプリケーションへのアクセスを確認します。 患者情報が出力されます。
次のような出力が表示されます。curl -s -L http://$HOST/info
$ curl -s -L http://$HOST/info {"personal":{"name":"Ralph DAlmeida","age":38,"gender":"male","street":"34 Main Street","city":"Toronto","zipcode":"M5H 1T1"},"medications":["Metoprolol","ACE inhibitors","Vitamin D"],"appointments":["2018-01-15 1:00 - Dentist","2018-02-14 4:00 - Internal Medicine","2018-09-30 8:00 - Pediatry"]}
- 次のスクリプトを実行します。このスクリプトは、アプリケーションに対して無限に要求を送信し続け、トラフィックを生成します。
スクリプトを停止するには、キーボードでwhile sleep 0.2; do curl --max-time 2 -s -L http://$HOST/info >/dev/null; echo -n "." done
CTRL + c
を押します
Red Hat OpenShift on IBM Cloud ロギング
ポッドが 1 つしかないので、アプリケーション・ログの確認は簡単です。
-
「Developer」 パースペクティブの 「Topology」 ビューにいることを確認します。
-
アプリを選択してポッドに移動します。
-
「ポッド」 の下で、ポッドの名前の横に表示される 「ログを表示」 をクリックして、実行中のアプリケーションからのストリーミング・ログを表示します。 まだトラフィックを生成している場合は、要求が発行されるたびにログ・メッセージが表示されます。
ポッド・ログ
Red Hat OpenShift on IBM Cloud の端末
Kubernetes の優れた点の 1 つとして、SSH 端末で簡単にアプリケーション・ポッドをデバッグできるという点があります。 Red Hat OpenShift、ダッシュボードで直接ターミナルを起動することができるので、さらに簡単です。
- 「Logs」 タブを 「Terminal」 タブに切り替えます。
- 以下のシェル・コマンドを実行します。
コマンド | 説明 |
---|---|
ls |
プロジェクト・ファイルをリストします。 |
ps aux |
実行中のプロセスをリストします。 |
cat /etc/redhat-release |
基礎 OS を表示します。 |
curl localhost:8080/info |
node app.js プロセスから出力します。 |
Red Hat OpenShift on IBM Cloud モニター
新しいアプリをデプロイするとき、構成を変更するとき、または単にクラスターの状態を調査するときに、開発者は、プロジェクトを範囲とするダッシュボードで詳しい洞察を得ることができます。
- 左側メニューの 「Observe 」をクリックして、 開発者パースペクティブのダッシュボードにアクセスします。
- 「イベント」 タブをクリックして、もう少し詳しく調べることもできます。 イベント は、イベントのタイムラインを調べて潜在的なエラー・メッセージを見つけるために役立ちます。 新規のロールアウトの状態を追跡したり、既存の資産を管理したりするとき、また、ルートを公開するなどの簡単な操作を実行するときでも、アクティビティーの時系列を調べるために「イベント」ビューが欠かせません。 複数のオペレーターが 1 つのクラスターに対して処理を行う場合には、より一層重要になります。
Red Hat OpenShift のほとんどすべてのアクションが、このビューに表示されるイベントを生成します。 リアルタイムで更新されるので、状態の変更を追跡するのに優れた手段です。
メトリックとダッシュボード
このセクションでは、 Red Hat OpenShift に含まれるモニタリングとメトリクスのダッシュボードについて説明します。
ダッシュボード
Red Hat OpenShift には、プロジェクトをモニターするための事前定義ダッシュボードが付属しています。
- まずは 「Developer」 パースペクティブを 「Administrator」 パースペクティブに切り替えます。
- 左側のバーで 「Observe」>「Dashboards」 に移動します。
- ドロップダウンから 「Kubernetes」/「Compute Resources」/「Namespace (Pods)」 を選択し、名前空間を「 example-health 」に設定します。
- アプリケーションの CPU とメモリーの使用量に注目します。 これは、実稼働環境でアプリケーションの CPU またはメモリーの平均使用量を調べるときに役に立ちます。特に一日の間に使用量が変動している場合などに役に立ちます。 変動に対応する方法の 1 つが自動スケーリングです。後で少し実際に試してみましょう。
メトリック
Red Hat OpenShift は、照会を実行し、プロットで視覚化されたメトリックを調べるための Web インターフェースを提供します。 この機能を使用すると、クラスター状態の概要を把握し、問題をトラブルシューティングすることができます。
-
「監視」>「メトリック」 にナビゲートします。
-
以下の式を入力し、 「照会の実行」 をクリックします。 照会に関連付けられている値とグラフが表示されます。
sum(container_cpu_usage_seconds_total{container="patient-health-frontend"})
「メトリック・グラフ」
アプリケーションのスケーリング
このセクションでは、前のセクションで確認したメトリックを基に、負荷に応じて UI アプリケーションをスケーリングできます。
リソース制限の有効化
自動スケーリングの前に、CPU とメモリーの最大リソース制限を設定する必要があります。
先ほどのダッシュボードでは、負荷が「.002」から「.02」のコアを消費していた。 これは、2 ミリコアから 20 ミリコアに相当します。 安全のために、最大 30 ミリコアと想定しましょう。 さらに、このデータは、アプリケーションが約 25
-65
MB の RAM を消費することを示しています。 以下の手順を実行して、deploymentConfig にリソース制限を設定します。
-
トラフィックを生成するスクリプトが実行中であることを確認します。
-
Administrator パースペクティブに切り替えます。
-
「Workloads」>「DeploymentConfigs」 に移動します。
-
example-health プロジェクトを選択します。
-
patient-health-frontend
の「 Actions 」メニュー (縦に並んだ 3 つのドット) から、「 Edit DeploymentConfig 」を選択します。「デプロイメント」 -
「YAML view」 の下で、「spec」>「template」>「spec」>「containers」 のセクションを見つけ、空のリソースに以下のリソース制限を追加します。
resources {}
を置換します。YAML ではインデントが厳密に使用されるので、スペーシングが正しいことを確認してください。resources: limits: cpu: 30m memory: 100Mi requests: cpu: 3m memory: 40Mi
変更後のスニペットを次に示します。
ports: - containerPort: 8080 protocol: TCP resources: limits: cpu: 30m memory: 100Mi requests: cpu: 3m memory: 40Mi terminationMessagePath: /dev/termination-log
-
保存 して、変更を適用します。
-
「イベント」 タブに移動して、レプリケーション・コントローラーが変更されたことを確認します。
「リソース限界」
自動スケーリング機能の有効化
リソース制限が構成されたので、ポッドの自動スケーリング機能を有効にすることができます。
デフォルトでは、自動スケーリング機能は、CPU またはメモリーに基づくスケーリングを実行できます。 指定した最小数から最大数までの間で、ポッド数のバランスが取られます。 ポッドの CPU 平均使用量が、定義された CPU 要求目標を上回らないように、自動スケーリング機能が、自動的にポッドを作成または削除します。 一般的には、ポッドの CPU 使用率が 50
% から 90
% に近づいたらスケール・アップを開始するようにします。
ここで与えている負荷には、1
% を使用します。
-
「管理者」 パースペクティブで 「Workloads」>「HorizontalPodAutoscalers」 に移動し、「Create HorizontalPodAutoscaler」 をクリックします。
HPA エディターの内容をこの yaml に置き換えます。
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: patient-hpa namespace: example-health spec: scaleTargetRef: apiVersion: apps.openshift.io/v1 kind: DeploymentConfig name: patient-health-frontend minReplicas: 1 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: averageUtilization: 1 type: Utilization
-
「作成」 をクリックします。
自動スケーリング機能のテスト
負荷をシミュレートするスクリプトを実行していないと、ポッド数は 1 のまま変わらないはずです。
-
デプロイメント構成の 「Overview」 ページを開いて確認します。 「Workloads」 > 「DeploymentConfigs」 をクリックし、patient-health-frontend をクリックしてから、「Details」 パネルが選択されていることを確認します。
-
負荷のシミュレートを開始します (アプリケーションに対する負荷をシミュレートするには、前のセクションを参照してください)。
4/10 ポッドにスケール 自動スケーリング機能による調整が行われるまでに数分かかることがあります。
これで完了です。 これで、可用性が高く、自動的にスケーリングされるフロントエンド Node.js アプリケーションができました。 Red Hat OpenShift は、ポッドの CPU 使用率がリソース制限の 1
%( 30
ミリコア)を大幅に超えたため、アプリケーションポッドを自動的にスケーリングします。
コマンド・ラインからの自動スケーリング
コマンド・ラインでも自動スケーリング機能などのリソースを削除および作成できます。
- まずは、コンテキストが対象プロジェクトであることを確認します。
oc project example-health
- 先ほど作成した自動スケーリング機能を取得します。
oc get hpa
- 先ほど作成した自動スケーリング機能を削除します。
oc delete hpa/patient-hpa
- 最大ポッド数を 9 にして新しい自動スケーリング機能を作成します。
oc autoscale deploymentconfig/patient-health-frontend --name patient-hpa --min 1 --max 9 --cpu-percent=1
- デプロイメントの 「Workloads」>「DeploymentConfigs」
patient-health-frontend
の詳細ページに再び移動します。
IBM Cloud Operator を使用した Cloudant DB の作成
現在、Example Health の patient-health-frontend
アプリではメモリー内のダミー患者を使用しています。 この演習では、IBM Cloud で Cloudant サービスを作成し、そのサービスに患者データを取り込みます。 Cloudant は、CouchDB をベースとする NoSQL Database as a Service です。
IBM Cloud Operator の有効化
オペレーターの機能について正確に理解しましょう。 最初の演習では、ビルダーを使用して、 DeploymentConfig Red Hat OpenShiftに付属しているデフォルトのリソース・タイプを使用して単純アプリケーションをデプロイしました。 カスタムリソース定義では、 IBM Cloud サービスのような、 Red Hat OpenShift on IBM Cloud にプリインストールされていないリソースタイプを作成できます。 オペレーターは、リソースのライフサイクルを管理し、カスタム・リソース記述子 (CRD) を作成して、ネイティブの「Kubernetes」のようにカスタム・リソースを管理することを可能にします。
- 「Administrator」 パースペクティブで、「Operators」>「OperatorHub」 をクリックします。
- 「IBM Cloud Operator」 を見つけて、「Install」 をクリックします。
- デフォルトのオプションのまま、「Install」 をクリックします。
- 数秒後に、
installed operator - ready for use
が表示されます。
CRD を使用した Cloudant のサービスとバインドの作成
クリックして開きます。 「Prerequisites」 セクションまでスクロールダウンします。
このセクションでは、IBM Cloudant データベースを作成するために適切な権限を持つ API キーが必要です。 API キーは、Kubernetes のシークレット・リソースに保管されます。 このリソースはシェルを使用して作成する必要があります。 インストールされたオペレーターの 「Prerequisites」 セクションに手順が表示されています。 ステップ:
-
クラスターに関連付けられているのと同じリソース・グループとリージョンを使用してください。
ibmcloud target -g <resource_group> -r <region>
アカウント内のリソース・グループを表示するには、
ibmcloud resource groups
コマンドを実行します。 -
リソース・グループとリージョンがクラスターと一致していることを確認します。 以下のコマンドを実行すると、クラスターが返されます。
ibmcloud oc cluster ls
次のような出力になります。
$ ibmcloud oc cluster ls
OK
Name ID State Created Workers Location Version Resource Group Name Provider
osmicro ck68svdd0vvcfs6ad9ag normal 18 hours ago 2 Dallas 4.12.26_1562_openshift default vpc-gen2
-
IBM 提供のヘルパー・スクリプトを使用して、以下のリソースを作成します。
- IBM Cloud を使用するユーザーとその権限を表す、IBM Cloud の API 鍵。
secret-ibm-cloud-operator
名前空間のdefault
という名前の Kubernetes シークレット。 このシークレットには、api-key
とregion
というキーが入っています。 オペレーターは、このデータを使用して Cloudant サービス・インスタンスを作成します。- リージョンとリソース・グループを保持するための、
config-ibm-cloud-operator
名前空間にあるdefault
という名前の Kubernetes ConfigMap リソース。
次の curl コマンドを使用します。
curl -sL https://raw.githubusercontent.com/IBM/cloud-operators/master/hack/configure-operator.sh | bash
-
Red Hat OpenShift Web コンソールに戻り、「IBM Cloud Operator」 ページの 「Installed Operators」 上にある 「Service」 タブの下の 「Create Service」 をクリックし、「YAML view」 を選択して、YAML エディターを表示します。
-
serviceClass は cloudantnosqldb に、plan は lite または standard のいずれかに置き換えます (Lite プランは 1 アカウントにつき 1 つのみ利用できます)。
<your-initials>
を置き換えます。apiVersion: ibmcloud.ibm.com/v1 kind: Service metadata: annotations: ibmcloud.ibm.com/self-healing: enabled name: <your-initials>-cloudant-service namespace: example-health spec: serviceClass: cloudantnosqldb plan: standard
-
「作成」 をクリックして IBM Cloudant データベース・インスタンスを作成します。 「Administrator」 パースペクティブの 「Operators」 > 「Installed Operators」 > 「IBM Cloud Operator」 で、「Service」 パネルに「Project: example-health」が表示されているはずです。
-
作成したばかりの
-cloudant-serviceを クリックすると、時間の経過とともに状態フィールドがプロビジョニングから オンラインに変わります。 -
先ほど作成した Cloudant サービス・リソースに対するバインディング・リソースとシークレット・リソースを作成します。 「Operators」 > 「Installed Operators」 > 「IBM Cloud Operator」 > 「Binding」 タブに戻ります。 「Binding」 タブを開き、「Create Binding」 をクリックし、「YAML View」 を選択します。 serviceName
<your-initials>-cloudant-service
(先ほど作成した サービス に指定した名前) に関連付けられる cloudant-binding を作成します。apiVersion: ibmcloud.ibm.com/v1 kind: Binding metadata: name: cloudant-binding namespace: example-health spec: serviceName: <your-initials>-cloudant-service
-
オプションとして、Red Hat OpenShift のリソース( サービス 、サービスの バインディング 、バインディングの シークレット ) と IBM Cloud のリソース ( サービス 、サービスのインスタンス、インスタンスのサービス資格情報) の関係について、もう少し詳しく確認します。 Cloud シェルで以下のようにします。
ibmcloud resource service-instances --service-name cloudantnosqldb
YOURINITIALS=<your-initials>
ibmcloud resource service-instance $YOURINITIALS-cloudant-service
ibmcloud resource service-keys --instance-name $YOURINITIALS-cloudant-service --output json
次のような出力になります。
youyou@cloudshell:~$ ibmcloud resource service-instances --service-name cloudantnosqldb Retrieving instances with type service_instance in all resource groups in all locations under .. OK Name Location State Type <your-initials>-cloudant-service us-south active service_instance youyou@cloudshell:~$ ibmcloud resource service-instance <your-initials>-cloudant-service Retrieving service instance <your-initials>-cloudant-service in all resource groups under ... OK Name: <your-initials>-cloudant-service ID: crn:v1:bluemix:public:cloudantnosqldb:us-south:a/0123456789507a53135fe6793c37cc74:SECRET GUID: SECRET Location: us-south Service Name: cloudantnosqldb Service Plan Name: standard Resource Group Name: Default State: active Type: service_instance Sub Type: Created at: 2020-05-06T22:39:25Z Created by: youyou@us.ibm.com Updated at: 2020-05-06T22:40:03Z Last Operation: Status create succeeded Message Provisioning is complete Updated At 2020-05-06 22:40:03.04469305 +0000 UTC youyou@cloudshell:~$ ibmcloud resource service-keys --instance-name $YOURINITIALS-cloudant-service --output json [ { "guid": "01234560-902d-4078-9a7f-20446a639aeb", "id": "crn:v1:bluemix:public:cloudantnosqldb:us-south:a/0123456789507a53135fe6793c37cc74:SECRET", "url": "/v2/resource_keys/01234560-902d-4078-9a7f-20446a639aeb", "created_at": "2020-05-06T23:03:43.484872077Z", "updated_at": "2020-05-06T23:03:43.484872077Z", "deleted_at": null, "name": "cloudant-binding", "account_id": "0123456789507a53135fe6793c37cc74", "resource_group_id": "01234567836d49029966ab5be7fe50b5", "source_crn": "crn:v1:bluemix:public:cloudantnosqldb:us-south:a/0123456789507a53135fe6793c37cc74:SECRET", "state": "active", "credentials": { "apikey": "SECRET", "host": "SECRET", "iam_apikey_description": "Auto-generated for key SECRET", "iam_apikey_name": "cloudant-binding", "iam_role_crn": "SECRET", "iam_serviceid_crn": "SECRET", "password": "SECRET", "port": 443, "url": "https://01234SECRET", "username": "01234567-SECRET" }, "iam_compatible": true, "resource_instance_url": "/v2/resource_instances/SECRET", "crn": "crn:v1:bluemix:public:cloudantnosqldb:us-south:a/0123456789507a53135fe6793c37cc74:SECRET" } ]
Node.js Patient バックエンド・データベース・アプリのデプロイ
次は、Cloudant DB に患者データを取り込む Node.js アプリを作成します。 これは、先ほどデプロイしたフロントエンド・アプリケーションにもデータを提供します。
- プロジェクト example-health を選択した状態にします。
oc project example-health
- 次の new-app コマンドを実行すると、ビルド構成とデプロイメント構成が作成されます。 追加アプリケーションの CLI 呼び出しを以下に示します (フロントエンドでは GUI コンソールを使用したことを思い出してください)。
oc new-app --name=patient-health-backend --as-deployment-config registry.access.redhat.com/ubi9/nodejs-20-minimal:latest~https://github.com/IBM-Cloud/patient-health-backend
- コンソールに戻り、「開発者」 パースペクティブの トポロジー ・ビューで、「patient-health-backend」 アプリを開き、ビルドが完了するのを待ちます。 ポッド の起動に失敗していることが分かります。 ポッド のログをクリックすると、次のように表示されます。
> node app.js /opt/app-root/src/app.js:23 throw("Cannot find Cloudant credentials, set CLOUDANT_URL.") ^ Cannot find Cloudant credentials, set CLOUDANT_URL.
- この問題を解決しましょう。環境変数 DeploymentConfig に、オペレーターのバインディング・セクションで先ほど作成した cloudant-binding シークレットを設定します。 アプリをクリックし、DC の隣の名前を選択して、
patient-health-backend
アプリのデプロイメント構成に移動します。「デプロイメント構成」 - 「Environment」 タブに移動し、「Add from ConfigMap or Secret」 をクリックし、CLOUDANT_URL という名前の新しい環境変数を作成します。 cloudant-binding シークレットを選択したら、キーに url を選択します。 保存 をクリックします。
シークレットからの環境 - 「Topology」 タブに戻り、patient-health-backend をクリックします。 すぐに 「Pods」 セクションに 「Running」 と表示されるはすです。 実行中のポッドの横にある 「View logs」 をクリックし、作成されたデータベースに注目します。
Patient Health Backend アプリを使用するための Patient Health Frontend アプリの構成
patient-health-frontend
アプリケーションには、バックエンド・マイクロサービスの URL を表す環境変数があります。
-
フロントエンドの DeploymentConfig で、その API_URL 環境変数を default に設定します。
patient-health-frontend
「Topology」 ビューでフロントエンド・アプリをクリックし、 DC の隣の名前を選択して、 アプリのデプロイメント構成に移動します。 -
「Environment」 タブに移動し、「Single values (env)」 セクションで、
API_URL
という名前と値default
を追加します。 「Save」 、「Reload」 の順にクリックします。 これにより、http://patient-health-backend:8080/
への接続が確立されます。これは、ポッド・ログで確認できます。 次のコマンドのPod Template / Containers / Port
という出力を探して、これが正しいポートであることを確認できます。oc describe dc/patient-health-backend
これで、アプリケーションは、Cloudant DB に保管された疑似患者のデータに基づいて動作するようになりました。 Cloudant DB に保管された任意のユーザー ID/パスワード (例: opall:opall ) を使用してログインできるようになりました。
- 実際のアプリケーションでは、このようなパスワードをプレーン・テキストで保管 してはいけません 。 Cloudant DB の患者(および代替ログイン)を確認するには、 IBM Cloud Resource List の
services
に移動します。-cloudant-serviceを クリックします。 - 「Launch Dashboard」 ボタンをクリックして Cloudant ダッシュボードを起動し、
patients
db をクリックします。 - クリックすると、さまざまな患者としてログインできます。
Forward Red Hat OpenShift on IBM Cloud logs and monitoring to IBM services
クラスターのログはIBM Cloud®ログサービスに転送することができ、クラウド用の完全なログ分析とストレージ環境に統合することができる クラスタのロギング クラスタ・メトリクスをクラウド監視システムに統合可能 -クラスタの健全性を監視
ロギングとメトリクスのデータが分析システムに流れるには数分かかることがあるため、後で使用するために、この時点で両方に接続しておくのがベストである。
クラスターのモニター
IBM Cloud Monitoring は、IBM Cloud アーキテクチャーの一部として組み込むことができる、クラウド・ネイティブかつコンテナー・インテリジェントな管理システムです。 このシステムを使用して、アプリケーション、サービス、およびプラットフォームのパフォーマンスと正常性について、運用の可視化が可能になります。 管理者、DevOps チーム、開発者向けのフルスタックのテレメトリーを備え、パフォーマンスの問題のモニタリングとトラブルシューティング、アラートの定義、カスタム・ダッシュボードの設計を行える高度な機能も用意されています。 詳細はこちらをご覧ください。
次の手順では、アプリケーションの正常性をモニターするためにダッシュボードとメトリックを使用する方法について説明します。
事前定義されたモニタリング・ビューとダッシュボードの表示
ビューとダッシュボードを使用して、インフラストラクチャー、アプリケーション、およびサービスをモニターできます。 事前定義されたダッシュボードを使用できます。 また、Web UI を使用するか、またはプログラムで、カスタム・ダッシュボードを作成することもできます。 ダッシュボードをバックアップおよび復元するには、Python スクリプトを使用します。
以下の表は、さまざまなタイプの事前定義ダッシュボードを示しています。
タイプ | 説明 |
---|---|
ワークロードの状況とパフォーマンス | ポッドをモニターするために使用できるダッシュボード。 |
Node 現状とパフォーマンス | ホストおよびコンテナーでのリソース使用状況およびシステム・アクティビティーをモニターするために使用できるダッシュボード。 |
ネットワーク | ネットワークの接続およびアクティビティーをモニターするために使用できるダッシュボード。 |
Monitoring ダッシュボードの表示
- Red Hat OpenShift on IBM Cloud クラスターに移動し、Red Hat OpenShift クラスターに注目します
- ご使用のクラスターをクリックし、左側の 「概要」 タブが選択されていることを確認します
- 「モニター」 の横の 「統合」 セクションで、 「起動」 ボタンをクリックします。
新しく作成した 「モニタリング」 インスタンスに、使用可能な初期データがない場合があります。
- 数分経過すると、生データが表示されます
- 約 1 時間後、索引が作成されて、このチュートリアルを進めるのに必要な詳しい情報が提供されます
- Dashboards] セクションで、 [ Kubernetes ]>[Pod Status & Performance]を選択して、クラスタ上で実行されているすべてのワークロードの生のメトリクスを表示します。
- namespace フィルターを example-health に設定して、アプリケーションのポッドにフォーカスします。
- 左側ペインの 「Dashboards」 で、「Dashboard Templates」 の 「Applications」 を展開します。 次に、「HTTP」 を選択してクラスターの HTTP 負荷の概要を取得します。
クラスターとノードの容量の調査
-
「Dashboards」 を選択し、以下の 2 つのダッシュボード・テンプレートを確認します。
- 「Containers」>「Container Resource Usage」
- 「Host Infrastructure」>「Host Resource Usage」
-
Kubernetes > 「ポッド・ライトサイジング (Pod Rightsizing)」&「ワークロード・キャパシティーの最適化 (Workload Capacity Optimization)」 テンプレートを選択します。 このダッシュボードは、ポッドのサイズが正しく設定されていることを確認することで、インフラストラクチャーを最適化し、クラスターの支出をより適切に制御するのに役立ちます。 メモリーまたは CPU (あるいはその両方) の要求を減らすことによって、リソースを解放できるかどうかを理解します。
アプリケーションの詳細はこちら
-
「ダッシュボード」 およびテンプレート Kubernetes >「ワークロード状況」&「パフォーマンス」 を選択します。
クラスター内のすべてのポッドを示す詳細ダッシュボード。
-
カスタマイズされたダッシュボードを作成し、対象範囲として特定の名前空間を設定します。
- 右上にある 「マイ・ダッシュボードにコピー」 をクリックして、
Workload Status & Performanceapp example-health
という名前を付けます。 - 「作成して開く」 をクリックして、独自のダッシュボードを作成します。
- ダッシュボードの範囲を編集します。
kube_namespace_name
、is
、example-health
のフィルターを設定します。- 保存 をクリックします。
ダッシュボードに、example-health 名前空間に焦点を当てた情報が表示されるようになりました。
HTTP、レイテンシ、エラー TimeChartsまでスクロールダウンして、アプリケーションのパフォーマンスを理解してください。
「カスタム・ネットワーク・トラフィックと帯域幅」 - 右上にある 「マイ・ダッシュボードにコピー」 をクリックして、
IBM Cloud Monitoring については、IBM Cloud 資料に詳しく記載されています。
リソースを削除する
リソース・リストで、削除するリソースを見つけて削除します。
- Red Hat OpenShift on IBM Cloud クラスターを削除します。
- クラスターを削除せずに Red Hat OpenShift リソースを削除するには、以下のコマンドを実行します。
oc delete all --all --namespace example-health oc delete project/example-health
- IBM Cloud Logs インスタンスを削除します。
- IBM Cloud Monitoring を削除します。
- IBM Cloudant を削除し、マイクロサービスへのバインドを削除します。
- IBM Cloudant サービス
リソースによっては、即時に削除されずに保持される場合があります (デフォルトでは 7 日間)。 リソースを完全に削除して再利用することも、保存期間内に復元することもできます。 リソースの再利用を使用する方法については、この資料を参照してください。