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 を作成できます。

6.4.1. PostgreSQL データベースインスタンスの作成

PostgreSQL データベースインスタンスを作成するには、PostgresCluster カスタムリソース (CR) を作成し、データベースを設定する必要があります。

手順

  1. シェルで以下のコマンドを実行して、my-petclinic namespace に PostgresCluster CR を作成します。

    $ oc apply -n my-petclinic -f - << EOD
    ---
    apiVersion: postgres-operator.crunchydata.com/v1beta1
    kind: PostgresCluster
    metadata:
      name: hippo
    spec:
      image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres:ubi8-14.4-0
      postgresVersion: 14
      instances:
        - name: instance1
          dataVolumeClaimSpec:
            accessModes:
            - "ReadWriteOnce"
            resources:
              requests:
                storage: 1Gi
      backups:
        pgbackrest:
          image: registry.developers.crunchydata.com/crunchydata/crunchy-pgbackrest:ubi8-2.38-0
          repos:
          - name: repo1
            volume:
              volumeClaimSpec:
                accessModes:
                - "ReadWriteOnce"
                resources:
                  requests:
                    storage: 1Gi
    EOD

    この PostgresCluster CR に追加されたアノテーションは、サービスバインディング接続を有効にし、Operator の調整をトリガーします。

    この出力では、データベースインスタンスが作成されていることを検証します。

    出力例

    postgrescluster.postgres-operator.crunchydata.com/hippo created

  2. データベースインスタンスを作成したら、my-petclinic namespace のすべての Pod が実行されていることを確認します。

    $ oc get pods -n my-petclinic

    出力 (表示に数分かかる) で、データベースが作成され設定されていることを検証できます。

    出力例

    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

    データベースを設定したら、サンプルアプリケーションをデプロイしてデータベースサービスに接続できます。

6.4.2. 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
              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 は起動に失敗します。アプリケーションとの対話を試みると、エラーが返されます。

  3. サービスを公開して、アプリケーションのルートを作成します。

    $ oc expose service spring-petclinic -n my-petclinic

    出力は、spring-petclinic サービスが公開され、Spring PetClinic サンプルアプリケーションのルートが作成されたことを確認します。

    出力例

    route.route.openshift.io/spring-petclinic exposed

サービスバインディング Operator を使用すると、アプリケーションをデータベースサービスに接続できるようになります。

6.4.3. 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: postgres-operator.crunchydata.com
          version: v1beta1
          kind: PostgresCluster 2
          name: hippo
      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-pgcluster   True    ApplicationsBound   7s

    デフォルトでは、データベースサービスのバインディングデータからの値は、サンプルアプリケーションを実行するワークロードコンテナーにファイルとしてプロジェクションされます。たとえば、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

    出力例: シークレットリソースからのすべての値

    /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

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

    $ 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

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

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

6.4.4. 関連情報