1.4. 半自動メソッドを使用した ServiceBinding カスタムリソースの生成


ServiceBinding リソースを半自動的に生成できます。以下の手順は、アプリケーションの設定とデプロイに使用する Operator のインストールを含む、OpenShift Container Platform のデプロイメントプロセスを示しています。

この手順では、Service Binding OperatorCrunchy Data の PostgreSQL Operator をインストールします。

重要

PostgreSQL Operator は、サードパーティーのコンポーネントです。PostgreSQL Operator のサポートポリシーと使用条件は、ソフトウェアベンダーである Crunchy Data にお問い合わせください。

次の手順には、PostgreSQL クラスターの作成、単純なアプリケーションのセットアップ、その後のプロビジョニングされたクラスターへのデプロイとバインドが含まれます。

前提条件

  • OpenShift Container Platform 4.12 クラスターを作成している。
  • OperatorHub からクラスター全体に Operator をインストールするために必要な、OperatorHub および OpenShift Container Platform への管理者権限を持っている。
  • 以下がインストールされている。

    • OpenShift、oc、オーケストレーションツール
    • Maven と Java

手順

以下の手順では、HOME (~) ディレクトリーを保存先およびインストール先として使用します。

  1. OpenShift Container Platform Web UI から Service Binding Operator をインストールする に記載された手順を使用して、Service Binding Operator バージョン 1.3.3 以降をインストールします。

    1. インストールを確認します。

      oc get csv -w

      Service Binding OperatorphaseSucceeded に設定されたことを確認し、次のステップに進みます。

  2. Web コンソールまたは CLI を使用して、OperatorHub から Crunchy PostgreSQL Operator をインストールします。

    1. インストールを確認します。

      oc get csv -w

      Operator の phaseSucceeded に設定されたことを確認し、次のステップに進みます。

  3. PostgreSQL クラスターを作成します。

    1. 新しい OpenShift Container Platform namespace を作成します。これは、後でクラスターを作成し、アプリケーションをデプロイするために使用します。ここで説明する手順では、この namespace を demo と呼びます。

      oc new-project demo
    2. 次のカスタムリソースを作成し、pg-cluster.yml として保存します。

      apiVersion: postgres-operator.crunchydata.com/v1beta1
      kind: PostgresCluster
      metadata:
        name: hippo
      spec:
        openshift: true
        image: registry.developers.crunchydata.com/crunchydata/crunchy-postgres:ubi8-14.2-1
        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
      注記

      この YAML は、Service Binding Operator Quickstart から再利用しています。

    3. 作成したカスタムリソースを適用します。

      oc apply -f ~/pg-cluster.yml
      注記

      このコマンドは、pg-cluster.yml ファイルが HOME ディレクトリーに保存されていることを前提としています。

    4. Pod でインストールを確認します。

      oc get pods -n demo
      • インストールが完了して Pod が READY 状態になるまで待ちます。
  4. PostgreSQL データベースにバインドする Quarkus アプリケーションを作成します。

    ここで作成するアプリケーションは、Hibernate と Panache を使用して PostgreSQL に接続する基本的な todo アプリケーションです。

    1. アプリケーションを生成します。

      mvn com.redhat.quarkus.platform:quarkus-maven-plugin:3.8.6.SP1-redhat-00002:create \
        -DplatformGroupId=com.redhat.quarkus.platform \
        -DplatformVersion=3.8.6.SP1-redhat-00002 \
        -DprojectGroupId=org.acme \
        -DprojectArtifactId=todo-example \
        -DclassName="org.acme.TodoResource" \
        -Dpath="/todo"
    2. PostgreSQL への接続、すべての必要リソースの生成、およびアプリケーション用コンテナーイメージの構築に必要なエクステンションをすべて追加します。

      ./mvnw quarkus:add-extension -Dextensions="resteasy-reactive-jackson,jdbc-postgresql,hibernate-orm-panache,openshift,kubernetes-service-binding"
    3. 次の例に示すように、単純なエンティティーを作成します。

      package org.acme;
      
      import jakarta.persistence.Column;
      import jakarta.persistence.Entity;
      
      import io.quarkus.hibernate.orm.panache.PanacheEntity;
      
      @Entity
      public class Todo extends PanacheEntity {
      
          @Column(length = 40, unique = true)
          public String title;
      
          public boolean completed;
      
          public Todo() {
          }
      
          public Todo(String title, Boolean completed) {
              this.title = title;
          }
      
      }
    4. エンティティーを公開します。

      package org.acme;
      
      import jakarta.transaction.Transactional;
      import jakarta.ws.rs.*;
      import jakarta.ws.rs.core.Response;
      import jakarta.ws.rs.core.Response.Status;
      import java.util.List;
      
         @Path("/todo")
         public class TodoResource {
      
             @GET
             @Path("/")
             public List<Todo> getAll() {
               return Todo.listAll();
             }
      
             @GET
             @Path("/{id}")
             public Todo get(@PathParam("id") Long id) {
                 Todo entity = Todo.findById(id);
                 if (entity == null) {
                     throw new WebApplicationException("Todo with id of " + id + " does not exist.", Status.NOT_FOUND);
                 }
                 return entity;
             }
      
             @POST
             @Path("/")
             @Transactional
             public Response create(Todo item) {
                 item.persist();
                 return Response.status(Status.CREATED).entity(item).build();
             }
      
             @GET
             @Path("/{id}/complete")
             @Transactional
             public Response complete(@PathParam("id") Long id) {
                 Todo entity = Todo.findById(id);
                 entity.id = id;
                 entity.completed = true;
                 return Response.ok(entity).build();
             }
      
      
             @DELETE
             @Transactional
             @Path("/{id}")
             public Response delete(@PathParam("id") Long id) {
                 Todo entity = Todo.findById(id);
                 if (entity == null) {
                     throw new WebApplicationException("Todo with id of " + id + " does not exist.", Status.NOT_FOUND);
                 }
                 entity.delete();
                 return Response.noContent().build();
             }
      
         }
  5. ServiceBinding リソースを生成して、ターゲット PostgreSQL クラスターにバインドします。

    1. サービス座標を指定してバインディングを生成し、データソースを設定します。

      • apiVersion: postgres-operator.crunchydata.com/v1beta1
      • kind: PostgresCluster
      • name: pg-cluster

        次の例に示すとおり、これは接頭辞 quarkus.kubernetes-service-binding.services.<id>. を設定して行います。id は、プロパティーをグループ化するために使用され、任意の値を割り当てることができます。

        quarkus.kubernetes-service-binding.services.my-db.api-version=postgres-operator.crunchydata.com/v1beta1
        quarkus.kubernetes-service-binding.services.my-db.kind=PostgresCluster
        quarkus.kubernetes-service-binding.services.my-db.name=hippo
        
        quarkus.datasource.db-kind=postgresql
        quarkus.hibernate-orm.database.generation=drop-and-create
        quarkus.hibernate-orm.sql-load-script=import.sql
    2. いくつかの初期データを指定して import.sql スクリプトを作成します。

      INSERT INTO todo(id, title, completed) VALUES (nextval('hibernate_sequence'), 'Finish the blog post', false);
  6. アプリケーション (ServiceBinding を含む) をデプロイし、クラスターに適用します。

    mvn clean install -Dquarkus.kubernetes.deploy=true -DskipTests

    デプロイメントが完了するまで待ちます。

検証

  1. デプロイメントを確認します。

    oc get pods -n demo -w
  2. インストールを確認します。

    1. ローカルで HTTP ポートにポート転送し、/todo エンドポイントにアクセスします。

      oc port-forward service/todo-example 8080:80
    2. Web ブラウザーで、以下の URL を開きます。

      http://localhost:8080/todo

関連情報

  • 詳細は、Quick Start ガイドの Service Binding Operator セクションを参照してください。
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.