6.4. サービスバインディングの使用
サービスバインディング Operator は、ワークロードおよびバッキングサービスのデータプレーンを管理します。本ガイドでは、データベースインスタンスの作成、アプリケーションのデプロイ、サービスバインディング Operator を使用してアプリケーションとデータベースサービス間のバインディング接続の作成に役立つ例を使用してその手順を説明します。
前提条件
-
cluster-admin
パーミッションを持つアカウントを使用して OpenShift Container Platform クラスターにアクセスできる。 -
oc
CLI がインストールされている。 - OperatorHub からサービスバインディング Operator をインストールしている。
v5 Update チャネルを使用して、OperatorHub から Crunchy Postgres for Kubernetes Operator の 5.1.2 バージョンをインストールしました。また、インストールした Operator が、
my-petclinic
namespace など、適切な namespace で利用できる。注記oc create namespace my-petclinic
コマンドを使用して namespace を作成できます。v5 Update チャネルを使用して、OperatorHub から Crunchy Postgres for Kubernetes Operator の 5.1.2 バージョンをインストールしました。インストールされた Operator は、
my-petclinic
プロジェクトなどの適切なプロジェクトで使用できます。注記oc new-project my-petclinic
コマンドを使用してプロジェクトを作成できます。
6.4.1. PostgreSQL データベースインスタンスの作成 リンクのコピーリンクがクリップボードにコピーされました!
PostgreSQL データベースインスタンスを作成するには、PostgresCluster
カスタムリソース (CR) を作成し、データベースを設定する必要があります。
手順
シェルで以下のコマンドを実行して、
my-petclinic
namespace にPostgresCluster
CR を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow この
PostgresCluster
CR に追加されたアノテーションは、サービスバインディング接続を有効にし、Operator の調整をトリガーします。この出力では、データベースインスタンスが作成されていることを検証します。
出力例
postgrescluster.postgres-operator.crunchydata.com/hippo created
postgrescluster.postgres-operator.crunchydata.com/hippo created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow データベースインスタンスを作成したら、
my-petclinic
namespace のすべての Pod が実行されていることを確認します。oc get pods -n my-petclinic
$ oc get pods -n my-petclinic
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力 (表示に数分かかる) で、データベースが作成され設定されていることを検証できます。
出力例
NAME READY STATUS RESTARTS AGE hippo-backup-9rxm-88rzq 0/1 Completed 0 2m2s hippo-instance1-6psd-0 4/4 Running 0 3m28s hippo-repo-host-0 2/2 Running 0 3m28s
NAME READY STATUS RESTARTS AGE hippo-backup-9rxm-88rzq 0/1 Completed 0 2m2s hippo-instance1-6psd-0 4/4 Running 0 3m28s hippo-repo-host-0 2/2 Running 0 3m28s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow データベースを設定したら、サンプルアプリケーションをデプロイしてデータベースサービスに接続できます。
6.4.2. Spring PetClinic サンプルアプリケーションのデプロイ リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform クラスターに、Spring PetClinic サンプルアプリケーションをデプロイするには、デプロイメント設定を使用し、アプリケーションをテストできるようにローカル環境を設定する必要があります。
手順
シェルで以下のコマンドを実行して、
spring-petclinic
アプリケーションをPostgresCluster
カスタムリソース (CR) でデプロイします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow この出力では、Spring PetClinic サンプルアプリケーションが作成され、デプロイされていることを確認します。
出力例
deployment.apps/spring-petclinic created service/spring-petclinic created
deployment.apps/spring-petclinic created service/spring-petclinic created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記Web コンソールの Developer パースペクティブでコンテナーイメージ を使用してアプリケーションをデプロイする場合は、Advanced options の Deployment セクションで以下の環境変数を入力する必要があります。
- Name: SPRING_PROFILES_ACTIVE
- Value: postgres
以下のコマンドを実行して、アプリケーションがまだデータベースサービスに接続されていないことを確認します。
oc get pods -n my-petclinic
$ oc get pods -n my-petclinic
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力に
CrashLoopBackOff
ステータスが表示されるまで、数分かかります。出力例
NAME READY STATUS RESTARTS AGE spring-petclinic-5b4c7999d4-wzdtz 0/1 CrashLoopBackOff 4 (13s ago) 2m25s
NAME READY STATUS RESTARTS AGE spring-petclinic-5b4c7999d4-wzdtz 0/1 CrashLoopBackOff 4 (13s ago) 2m25s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この段階では、Pod は起動に失敗します。アプリケーションとの対話を試みると、エラーが返されます。
サービスを公開して、アプリケーションのルートを作成します。
oc expose service spring-petclinic -n my-petclinic
$ oc expose service spring-petclinic -n my-petclinic
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力は、
spring-petclinic
サービスが公開され、Spring PetClinic サンプルアプリケーションのルートが作成されたことを確認します。出力例
route.route.openshift.io/spring-petclinic exposed
route.route.openshift.io/spring-petclinic exposed
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
サービスバインディング Operator を使用すると、アプリケーションをデータベースサービスに接続できるようになります。
6.4.3. Spring PetClinic サンプルアプリケーションを PostgreSQL データベースサービスに接続します。 リンクのコピーリンクがクリップボードにコピーされました!
サンプルアプリ ks−本をデータベースサービスに接続するには、サービスバインディング Operator がバインディングデータをアプリケーションにプロジェクションするようにトリガーする ServiceBinding
カスタムリソース (CR) を作成する必要があります。
手順
ServiceBinding
CR を作成し、バインディングデータにパッチを適用します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow この出力では、バインディングデータをサンプルアプリケーションにプロジェクションする
ServiceBinding
CR が作成されていることを確認します。出力例
servicebinding.binding.operators.coreos.com/spring-petclinic created
servicebinding.binding.operators.coreos.com/spring-petclinic created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サービスバインディングのリクエストが正常に完了したことを確認します。
oc get servicebindings -n my-petclinic
$ oc get servicebindings -n my-petclinic
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY REASON AGE spring-petclinic-pgcluster True ApplicationsBound 7s
NAME READY REASON AGE spring-petclinic-pgcluster True ApplicationsBound 7s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトでは、データベースサービスのバインディングデータからの値は、サンプルアプリケーションを実行するワークロードコンテナーにファイルとしてプロジェクションされます。たとえば、Secret リソースからの値はすべて
bindings/spring-petclinic-pgcluster
ディレクトリーに反映されます。注記オプションとして、ディレクトリーの内容を出力して、アプリケーションのファイルに反映されたバインディングデータが含まれることを確認することもできます。
for i in username password host port type; do oc exec -it deploy/spring-petclinic -n my-petclinic -- /bin/bash -c 'cd /tmp; find /bindings/*/'$i' -exec echo -n {}:" " \; -exec cat {} \;'; echo; done
$ for i in username password host port type; do oc exec -it deploy/spring-petclinic -n my-petclinic -- /bin/bash -c 'cd /tmp; find /bindings/*/'$i' -exec echo -n {}:" " \; -exec cat {} \;'; echo; done
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例: シークレットリソースからのすべての値
/bindings/spring-petclinic-pgcluster/username: <username> /bindings/spring-petclinic-pgcluster/password: <password> /bindings/spring-petclinic-pgcluster/host: hippo-primary.my-petclinic.svc /bindings/spring-petclinic-pgcluster/port: 5432 /bindings/spring-petclinic-pgcluster/type: postgresql
/bindings/spring-petclinic-pgcluster/username: <username> /bindings/spring-petclinic-pgcluster/password: <password> /bindings/spring-petclinic-pgcluster/host: hippo-primary.my-petclinic.svc /bindings/spring-petclinic-pgcluster/port: 5432 /bindings/spring-petclinic-pgcluster/type: postgresql
Copy to Clipboard Copied! Toggle word wrap Toggle overflow アプリケーションポートからポート転送を設定し、ローカル環境からサンプルアプリケーションにアクセスします。
oc port-forward --address 0.0.0.0 svc/spring-petclinic 8080:80 -n my-petclinic
$ oc port-forward --address 0.0.0.0 svc/spring-petclinic 8080:80 -n my-petclinic
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Forwarding from 0.0.0.0:8080 -> 8080 Handling connection for 8080
Forwarding from 0.0.0.0:8080 -> 8080 Handling connection for 8080
Copy to Clipboard Copied! Toggle word wrap Toggle overflow http://localhost:8080/petclinic にアクセスします。
localhost:8080 で Spring PetClinic サンプルアプリケーションにリモートでアクセスできるようになり、アプリケーションがデータベースサービスに接続されていることを確認できます。