1.4. 半自動メソッドを使用して ServiceBinding カスタムリソースを生成する
ServiceBinding リソースをセミコロンで生成できます。以下の手順は、アプリケーションの設定およびデプロイのための Operator のインストール方法など、OpenShift Container Platform のデプロイメントプロセスを示しています。
次の手順では、Crunchy Data から Service Binding Operator および PostgreSQL Operator をインストールします。
PostgreSQL Operator は、サードパーティーのコンポーネントです。PostgreSQL Operator のサポートポリシーと使用条件については、ソフトウェアベンダーである Crunchy Data にお問い合わせください。
次に、この手順では PostgreSQL クラスター(簡単なアプリケーション)を作成し、最後に、これをプロビジョニングされたクラスターにバインドします。
前提条件
- OpenShift Container Platform 4.10 クラスターを作成している。
- OperatorHub からクラスター全体の Operator をインストールするのに必要な OperatorHub および OpenShift Container Platform 管理者権限にアクセスできる。
以下がインストールされている。
-
oc
オーケストレーションツール - Maven と Java
-
手順
以下の手順では、HOME (~
) ディレクトリーを保存先およびインストール先として使用します。
OpenShift Container Platform Web UI から Service Binding Operator をインストールする に記載された手順を使用して、Service Binding Operator バージョン 1.0 以降をインストールします。
インストールを確認します。
oc get csv -n openshift-operators -w
-
Service Binding Operator の
フェーズ
がSucceeded
に設定されている場合は、次のステップに進みます。
-
Service Binding Operator の
Web コンソールまたは CLI を使用して、OperatorHub から Crunchy PostgreSQL Operator をインストールします。手順へのリンクは、デプロイと使用 セクションを参照してください。
インストールを確認します。
oc get csv -n openshift-operators -w
-
Operator の
フェーズ
がSucceeded
に設定されている場合は、次のステップに進みます。
-
Operator の
PostgreSQL クラスターを作成します。
クラスターを作成し、後でアプリケーションをデプロイするスペースで新規 OpenShift Container Platform namespace を作成します。この手順では、namespace は
demo
と呼ばれます。oc new-project demo
次のカスタムリソースを作成し、
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 から再利用しています。
作成したカスタムリソースを適用します。
oc apply -f ~/pg-cluster.yml
注記このコマンドは、
pg-cluster.yml
ファイルを HOME に保存していることを前提としています。Pod をチェックしてインストールを確認します。
oc get pods -n demo
-
Pod が
READY
状態になるまで待機します。これは、インストールが完了したことを示します。
-
Pod が
PostgreSQL データベースにバインドする Quarkus アプリケーションを作成します。
作成するアプリケーションは、Hibernate と panache を使用して PostgreSQL に接続するシンプルな
todo
アプリケーションです。アプリケーションを生成します。
mvn com.redhat.quarkus.platform:quarkus-maven-plugin:2.13.9.SP2-redhat-00003:create \ -DplatformGroupId=com.redhat.quarkus.platform \ -DplatformVersion=2.13.9.SP2-redhat-00003 \ -DprojectGroupId=org.acme \ -DprojectArtifactId=todo-example \ -DclassName="org.acme.TodoResource" \ -Dpath="/todo"
PostgreSQL への接続、すべての必要リソースの生成、およびアプリケーション用コンテナーイメージの構築に必要なエクステンションをすべて追加します。
./mvnw quarkus:add-extension -Dextensions="resteasy-reactive-jackson,jdbc-postgresql,hibernate-orm-panache,openshift,kubernetes-service-binding"
次の例に示すように、単純なエンティティーを作成します。
package org.acme; import javax.persistence.Column; import javax.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; } }
エンティティーを公開します。
package org.acme; import javax.transaction.Transactional; import javax.ws.rs.*; import javax.ws.rs.core.Response; import javax.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(); } }
ServiceBinding
リソースを生成して、ターゲット PostgreSQL クラスターにバインドします。サービス座標を指定してバインディングを生成し、データソースを設定します。
-
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
-
apiVersion:
いくつかの初期データを指定して
import.sql
スクリプトを作成します。INSERT INTO todo(id, title, completed) VALUES (nextval('hibernate_sequence'), 'Finish the blog post', false);
アプリケーション (
ServiceBinding
を含む) をデプロイし、クラスターに適用します。mvn clean install -Dquarkus.kubernetes.deploy=true -DskipTests
- デプロイメントが完了するまで待ちます。
検証
デプロイメントを確認します。
oc get pods -n demo -w
インストールの検証
ローカルで http ポートにポート転送し、
/todo
エンドポイントにアクセスします。oc port-forward service/todo-example 8080:80
以下の URL をブラウザーで開きます。
http://localhost:8080/todo
関連情報
- 詳細は、Quick Start ガイドの Service Binding Operator セクションを参照してください。