1.5. 自动服务绑定
当 quarkus-kubernetes-service-binding
扩展检测到需要访问兼容可绑定 Operator 提供的外部服务的应用程序时,它会自动生成 ServiceBinding
资源。
只能为有限的服务类型生成自动服务绑定。
与既定的 Kubernetes 和 Quarkus 服务术语保持一致,本章使用术语"kinds"来引用这些服务类型。
服务绑定类型 | 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 3.2 支持 MongoDB Operator 作为技术预览提供,只适用于客户端。
- 有关红帽构建的 Quarkus 3.2 中支持的 Panache 扩展列表,请参阅 Quarkus 应用程序配置器 页面。
1.5.1. 自动数据源绑定
对于传统数据库,每当配置数据源时,都会启动自动绑定,如下所示:
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
指定数据源的名称,如下所示:
quarkus.datasource.fruits-db.db-kind=postgresql
生成的 ServiceBinding
中的服务如下所示:
services: - apiVersion: postgres-operator.crunchydata.com/v1beta1 kind: PostgresCluster name: fruits-db
同样,如果您使用 mysql
,可以指定数据源的名称,如下所示:
quarkus.datasource.fruits-db.db-kind=mysql
生成的 服务
包含以下内容:
services: - apiVersion: pxc.percona.com/v1-9-0 kind: PerconaXtraDBCluster name: fruits-db
1.5.1.1. 自定义自动服务绑定
虽然开发了自动服务绑定功能来消除尽可能多的手动配置,但在某些情况下,您可能需要手动修改生成的 ServiceBinding
资源。
生成过程专门依赖于从应用程序中提取的信息以及支持的 Operator 知识,这些 Operator 可能无法反映集群中部署的内容。
生成的资源通常基于对常见服务类型支持的可绑定 Operator 的知识,以及为防止可能不匹配而开发的一系列约定,例如:
- 目标资源名称与数据源名称不匹配。
- 需要为该服务类型使用特定 Operator 而不是默认 Operator。
- 当用户需要使用非默认版本或最新的版本时,会发生版本冲突。
约定 :
- 目标资源协调会根据 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
示例 2:为数据源应用自定义名称
在示例 1 中,使用服务键 db-kind
(postgresql
)。在本实例中,使用规则后使用数据源名称(fruits-db
),因为数据源被命名。
以下示例显示,对于命名数据源,数据源名称用作目标资源的名称:
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
其他资源
- 有关可用属性的更多信息,请参阅 Kubernetes 服务绑定规格 的工作负载投射 部分。
更新于 2024-10-11