6.5. IBM Power、IBM Z、IBM LinuxONE でサービスバインディングを使用する
サービスバインディング Operator は、ワークロードおよびバッキングサービスのデータプレーンを管理します。本ガイドでは、データベースインスタンスの作成、アプリケーションのデプロイ、サービスバインディング Operator を使用してアプリケーションとデータベースサービス間のバインディング接続の作成に役立つ例を使用してその手順を説明します。
前提条件
-
cluster-admin
パーミッションを持つアカウントを使用して OpenShift Container Platform クラスターにアクセスできる。 -
oc
CLI がインストールされている。 - OperatorHub からサービスバインディング Operator をインストールしている。
6.5.1. PostgreSQL Operator のデプロイ
手順
-
my-petclinic
namespace に Dev4Devs PostgreSQL Operator をデプロイするには、シェルで以下のコマンドを実行します。
$ oc apply -f - << EOD
---
apiVersion: v1
kind: Namespace
metadata:
name: my-petclinic
---
apiVersion: operators.coreos.com/v1
kind: OperatorGroup
metadata:
name: postgres-operator-group
namespace: my-petclinic
---
apiVersion: operators.coreos.com/v1alpha1
kind: CatalogSource
metadata:
name: ibm-multiarch-catalog
namespace: openshift-marketplace
spec:
sourceType: grpc
image: quay.io/ibm/operator-registry-<architecture> 1
imagePullPolicy: IfNotPresent
displayName: ibm-multiarch-catalog
updateStrategy:
registryPoll:
interval: 30m
---
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: postgresql-operator-dev4devs-com
namespace: openshift-operators
spec:
channel: alpha
installPlanApproval: Automatic
name: postgresql-operator-dev4devs-com
source: ibm-multiarch-catalog
sourceNamespace: openshift-marketplace
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: database-view
labels:
servicebinding.io/controller: "true"
rules:
- apiGroups:
- postgresql.dev4devs.com
resources:
- databases
verbs:
- get
- list
EOD
- 1
- Operator イメージ
-
IBM Power®:
quay.io/ibm/operator-registry-ppc64le:release-4.9
-
IBM Z® および IBM® LinuxONE:
quay.io/ibm/operator-registry-s390x:release-4.8
-
IBM Power®:
検証
Operator のインストール後に、
openshift-operators
namespace の Operator サブスクリプションを一覧表示します。$ oc get subs -n openshift-operators
出力例
NAME PACKAGE SOURCE CHANNEL postgresql-operator-dev4devs-com postgresql-operator-dev4devs-com ibm-multiarch-catalog alpha rh-service-binding-operator rh-service-binding-operator redhat-operators stable
6.5.2. PostgreSQL データベースインスタンスの作成
PostgreSQL データベースインスタンスを作成するには、Database
カスタムリソース (CR) を作成し、データベースを設定する必要があります。
手順
シェルで以下のコマンドを実行して、
my-petclinic
namespace にDatabase
CR を作成します。$ oc apply -f - << EOD apiVersion: postgresql.dev4devs.com/v1alpha1 kind: Database metadata: name: sampledatabase namespace: my-petclinic annotations: host: sampledatabase type: postgresql port: "5432" service.binding/database: 'path={.spec.databaseName}' service.binding/port: 'path={.metadata.annotations.port}' service.binding/password: 'path={.spec.databasePassword}' service.binding/username: 'path={.spec.databaseUser}' service.binding/type: 'path={.metadata.annotations.type}' service.binding/host: 'path={.metadata.annotations.host}' spec: databaseCpu: 30m databaseCpuLimit: 60m databaseMemoryLimit: 512Mi databaseMemoryRequest: 128Mi databaseName: "sampledb" databaseNameKeyEnvVar: POSTGRESQL_DATABASE databasePassword: "samplepwd" databasePasswordKeyEnvVar: POSTGRESQL_PASSWORD databaseStorageRequest: 1Gi databaseUser: "sampleuser" databaseUserKeyEnvVar: POSTGRESQL_USER image: registry.redhat.io/rhel8/postgresql-13:latest databaseStorageClassName: nfs-storage-provisioner size: 1 EOD
この
Database
CR に追加されたアノテーションは、サービスバインディング接続を有効にし、Operator の調整をトリガーします。この出力では、データベースインスタンスが作成されていることを検証します。
出力例
database.postgresql.dev4devs.com/sampledatabase created
データベースインスタンスを作成したら、
my-petclinic
namespace のすべての Pod が実行されていることを確認します。$ oc get pods -n my-petclinic
出力 (表示に数分かかる) で、データベースが作成され設定されていることを検証できます。
出力例
NAME READY STATUS RESTARTS AGE sampledatabase-cbc655488-74kss 0/1 Running 0 32s
データベースを設定したら、サンプルアプリケーションをデプロイしてデータベースサービスに接続できます。
6.5.3. Spring PetClinic サンプルアプリケーションのデプロイ
OpenShift Container Platform クラスターに、Spring PetClinic サンプルアプリケーションをデプロイするには、デプロイメント設定を使用し、アプリケーションをテストできるようにローカル環境を設定する必要があります。
手順
シェルで以下のコマンドを実行して、
spring-petclinic
アプリケーションをPostgresCluster
カスタムリソース (CR) でデプロイします。$ oc apply -n my-petclinic -f - << EOD --- apiVersion: apps/v1 kind: Deployment metadata: name: spring-petclinic labels: app: spring-petclinic spec: replicas: 1 selector: matchLabels: app: spring-petclinic template: metadata: labels: app: spring-petclinic spec: containers: - name: app image: quay.io/service-binding/spring-petclinic:latest imagePullPolicy: Always env: - name: SPRING_PROFILES_ACTIVE value: postgres - name: org.springframework.cloud.bindings.boot.enable value: "true" ports: - name: http containerPort: 8080 --- apiVersion: v1 kind: Service metadata: labels: app: spring-petclinic name: spring-petclinic spec: type: NodePort ports: - port: 80 protocol: TCP targetPort: 8080 selector: app: spring-petclinic EOD
この出力では、Spring PetClinic サンプルアプリケーションが作成され、デプロイされていることを確認します。
出力例
deployment.apps/spring-petclinic created service/spring-petclinic created
注記Web コンソールの Developer パースペクティブでコンテナーイメージ を使用してアプリケーションをデプロイする場合は、Advanced options の Deployment セクションで以下の環境変数を入力する必要があります。
- Name: SPRING_PROFILES_ACTIVE
- Value: postgres
以下のコマンドを実行して、アプリケーションがまだデータベースサービスに接続されていないことを確認します。
$ oc get pods -n my-petclinic
CrashLoopBackOff
ステータスが表示されるまで数分かかります。出力例
NAME READY STATUS RESTARTS AGE spring-petclinic-5b4c7999d4-wzdtz 0/1 CrashLoopBackOff 4 (13s ago) 2m25s
この段階では、Pod は起動に失敗します。アプリケーションとの対話を試みると、エラーが返されます。
サービスバインディング Operator を使用すると、アプリケーションをデータベースサービスに接続できるようになります。
6.5.4. Spring PetClinic サンプルアプリケーションを PostgreSQL データベースサービスに接続します。
サンプルアプリ ks−本をデータベースサービスに接続するには、サービスバインディング Operator がバインディングデータをアプリケーションにプロジェクションするようにトリガーする ServiceBinding
カスタムリソース (CR) を作成する必要があります。
手順
ServiceBinding
CR を作成し、バインディングデータにパッチを適用します。$ oc apply -n my-petclinic -f - << EOD --- apiVersion: binding.operators.coreos.com/v1alpha1 kind: ServiceBinding metadata: name: spring-petclinic-pgcluster spec: services: 1 - group: postgresql.dev4devs.com kind: Database 2 name: sampledatabase version: v1alpha1 application: 3 name: spring-petclinic group: apps version: v1 resource: deployments EOD
この出力では、バインディングデータをサンプルアプリケーションにプロジェクションする
ServiceBinding
CR が作成されていることを確認します。出力例
servicebinding.binding.operators.coreos.com/spring-petclinic created
サービスバインディングのリクエストが正常に完了したことを確認します。
$ oc get servicebindings -n my-petclinic
出力例
NAME READY REASON AGE spring-petclinic-postgresql True ApplicationsBound 47m
デフォルトでは、データベースサービスのバインディングデータからの値は、サンプルアプリケーションを実行するワークロードコンテナーにファイルとしてプロジェクションされます。たとえば、Secret リソースからの値はすべて
bindings/spring-petclinic-pgcluster
ディレクトリーに反映されます。これが作成されたら、トポロジーに移動し、接続を視覚的に確認できます。
図6.1 spring-petclinic のサンプルデータベースへの接続
アプリケーションポートからポート転送を設定し、ローカル環境からサンプルアプリケーションにアクセスします。
$ oc port-forward --address 0.0.0.0 svc/spring-petclinic 8080:80 -n my-petclinic
出力例
Forwarding from 0.0.0.0:8080 -> 8080 Handling connection for 8080
http://localhost:8080 にアクセスします。
localhost:8080 で Spring PetClinic サンプルアプリケーションにリモートでアクセスできるようになり、アプリケーションがデータベースサービスに接続されていることを確認できます。