1.5. 自动服务绑定
quarkus-kubernetes-service-binding 扩展可在检测到应用程序需要访问可用可绑定 Operator 提供的外部服务后自动生成 ServiceBinding 资源。
可以为有限的服务类型生成自动服务绑定。要与 Kubernetes 和 Quarkus 服务的已建立术语一致,本章将这些服务类型称为类型。
| 服务绑定类型 | Operator | API 版本 | Kind |
|
| postgres-operator.crunchydata.com/v1beta1 | PostgresCluster | |
|
| pxc.percona.com/v1-9-0 | PerconaXtraDBCluster | |
|
| psmdb.percona.com/v1-9-0 | PerconaServerMongoDB |
- Red Hat build of Quarkus 2.13 支持 MongoDB Operator 作为技术预览提供,只适用于客户端。
- 有关 Red Hat build of Quarkus 2.13 中支持的 Panache 扩展列表,请参阅 Quarkus 应用程序配置器 页面。
1.5.1. 自动数据源绑定 复制链接链接已复制到粘贴板!
对于传统数据库,每当配置数据源时,都会启动自动绑定,如下所示:
quarkus.datasource.db-kind=postgresql
quarkus.datasource.db-kind=postgresql
以上配置结合存在 quarkus-datasource,quarkus-jdbc-postgresql,quarkus-kubernetes -kubernetes , 和 quarkus-kubernetes-service-binding 属性,会导致 postgresql 数据库类型的 ServiceBinding 资源生成。
通过使用 Operator 资源的 apiVersion 和 kind 属性(与使用的 postgresql Operator 匹配),生成的 ServiceBinding 资源将服务或资源绑定到应用程序。
当您没有为数据库服务指定名称时,db-kind 属性的值将用作默认名称。
services: - apiVersion: postgres-operator.crunchydata.com/v1beta1 kind: PostgresCluster name: postgresql
services:
- apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
name: postgresql
指定数据源的名称,如下所示:
quarkus.datasource.fruits-db.db-kind=postgresql
quarkus.datasource.fruits-db.db-kind=postgresql
生成的 ServiceBinding 中的服务如下所示:
services: - apiVersion: postgres-operator.crunchydata.com/v1beta1 kind: PostgresCluster name: fruits-db
services:
- apiVersion: postgres-operator.crunchydata.com/v1beta1
kind: PostgresCluster
name: fruits-db
同样,如果您使用 mysql,可以指定数据源的名称,如下所示:
quarkus.datasource.fruits-db.db-kind=mysql
quarkus.datasource.fruits-db.db-kind=mysql
生成的 服务 包含以下内容:
services: - apiVersion: pxc.percona.com/v1-9-0 kind: PerconaXtraDBCluster name: fruits-db
services:
- apiVersion: pxc.percona.com/v1-9-0
kind: PerconaXtraDBCluster
name: fruits-db
1.5.1.1. 自定义自动服务绑定 复制链接链接已复制到粘贴板!
虽然开发了自动服务绑定功能来消除尽可能多的手动配置,但在某些情况下,您可能需要手动修改生成的 ServiceBinding 资源。生成过程专门依赖于从应用程序提取的信息以及支持的 Operator 知识,这些 Operator 可能无法反映集群中部署的内容。生成的资源通常基于对常见服务类型支持的可绑定操作器的了解,以及为防止可能不匹配而开发的一系列约定,例如:
- 目标资源名称与数据源名称不匹配
- 需要为该服务类型使用特定 Operator 而不是默认 Operator
- 当用户需要使用除 default 或 latest 以外的任何其他版本时,会发生版本冲突
约定
- 目标资源协调根据 Operator 的类型和服务类型决定。
-
默认情况下,目标资源名称设置为与服务类型匹配,如
postgresql、mysql、mongo。 - 对于命名数据源,使用数据源的名称。
-
对于命名
mongo客户端,使用客户端的名称。
示例 1:名称不匹配
如果您需要修改生成的 ServiceBinding 来修复名称不匹配,请使用 quarkus.kubernetes-service-binding.services 属性,并将服务名称指定为服务键。
service 键 通常是服务的名称,例如数据源的名称,或 mongo 客户端的名称。如果这个值不可用,则改为使用 postgresql、mysql、mongo 等数据源类型。
为了避免不同类型的服务之间命名冲突,请使用特定数据源类型(如 postgresql- <person> ) 。
作为服务密钥 添加前缀
以下示例演示了如何自定义 PostgresCluster 资源的 apiVersion 属性:
quarkus.datasource.db-kind=postgresql quarkus.kubernetes-service-binding.services.postgresql.api-version=postgres-operator.crunchydata.com/v1beta2
quarkus.datasource.db-kind=postgresql
quarkus.kubernetes-service-binding.services.postgresql.api-version=postgres-operator.crunchydata.com/v1beta2
示例 2:为数据源应用自定义名称
在示例 1 中,db-kind(postgresql)被用作服务密钥。在本例中,由于数据源按照惯例命名,因此改为使用fruits-db。
以下示例显示,对于命名数据源,数据源名称用作目标资源的名称:
quarkus.datasource.fruits-db.db-kind=postgresql
quarkus.datasource.fruits-db.db-kind=postgresql
这与以下配置相同:
quarkus.kubernetes-service-binding.services.fruits-db.api-version=postgres-operator.crunchydata.com/v1beta1 quarkus.kubernetes-service-binding.services.fruits-db.kind=PostgresCluster quarkus.kubernetes-service-binding.services.fruits-db.name=fruits-db
quarkus.kubernetes-service-binding.services.fruits-db.api-version=postgres-operator.crunchydata.com/v1beta1
quarkus.kubernetes-service-binding.services.fruits-db.kind=PostgresCluster
quarkus.kubernetes-service-binding.services.fruits-db.name=fruits-db
更新于 2024-04-23