6.5. IBM Power Systems、IBM Z、および LinuxONE でのサービスバインディングの使用

サービスバインディング Operator は、ワークロードおよびバッキングサービスのデータプレーンを管理します。本ガイドでは、データベースインスタンスの作成、アプリケーションのデプロイ、サービスバインディング Operator を使用してアプリケーションとデータベースサービス間のバインディング接続の作成に役立つ例を使用してその手順を説明します。

前提条件

  • cluster-admin パーミッションを持つアカウントを使用して OpenShift Container Platform クラスターにアクセスできる。
  • oc CLI がインストールされている。
  • OperatorHub からサービスバインディング Operator をインストールしている。

6.5.1. PostgreSQL Operator のデプロイ

手順

  1. 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
  • For IBM Z および LinuxONE: quay.io/ibm/operator-registry-s390x:release-4.8

検証

  1. 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) を作成し、データベースを設定する必要があります。

手順

  1. シェルで以下のコマンドを実行して、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

  2. データベースインスタンスを作成したら、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 サンプルアプリケーションをデプロイするには、デプロイメント設定を使用し、アプリケーションをテストできるようにローカル環境を設定する必要があります。

手順

  1. シェルで以下のコマンドを実行して、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 optionsDeployment セクションで以下の環境変数を入力する必要があります。

    • Name: SPRING_PROFILES_ACTIVE
    • Value: postgres
  2. 以下のコマンドを実行して、アプリケーションがまだデータベースサービスに接続されていないことを確認します。

    $ 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) を作成する必要があります。

手順

  1. 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
    1
    サービスリソースのリストを指定します。
    2
    データベースの CR。
    3
    Deployment または PodSpec が組み込まれた同様のリソースを参照するサンプルアプリケーション。

    この出力では、バインディングデータをサンプルアプリケーションにプロジェクションする ServiceBinding CR が作成されていることを確認します。

    出力例

    servicebinding.binding.operators.coreos.com/spring-petclinic created

  2. サービスバインディングのリクエストが正常に完了したことを確認します。

    $ oc get servicebindings -n my-petclinic

    出力例

    NAME                          READY   REASON              AGE
    spring-petclinic-postgresql   True    ApplicationsBound   47m

    デフォルトでは、データベースサービスのバインディングデータからの値は、サンプルアプリケーションを実行するワークロードコンテナーにファイルとしてプロジェクションされます。たとえば、Secret リソースからの値はすべて bindings/spring-petclinic-pgcluster ディレクトリーに反映されます。

  3. これが作成されたら、トポロジーに移動し、接続を視覚的に確認できます。

    図6.1 spring-petclinic のサンプルデータベースへの接続

    img power
  4. アプリケーションポートからポート転送を設定し、ローカル環境からサンプルアプリケーションにアクセスします。

    $ 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

  5. http://localhost:8080 にアクセスします。

    localhost:8080 で Spring PetClinic サンプルアプリケーションにリモートでアクセスできるようになり、アプリケーションがデータベースサービスに接続されていることを確認できます。

6.5.5. 関連情報