1.5. 自动服务绑定


quarkus-kubernetes-service-binding 扩展可在检测到应用程序需要访问可用可绑定 Operator 提供的外部服务后自动生成 ServiceBinding 资源。

注意

可以为有限的服务类型生成自动服务绑定。要与 Kubernetes 和 Quarkus 服务的已建立术语一致,本章将这些服务类型称为类型。

Expand
表 1.1. 支持自动服务绑定的 Operator

服务绑定类型

Operator

API 版本

Kind

postgresql

CrunchyData Postgres

postgres-operator.crunchydata.com/v1beta1

PostgresCluster

mysql

Percona XtraDB 集群

pxc.percona.com/v1-9-0

PerconaXtraDBCluster

mongo

Percona MongoDB

psmdb.percona.com/v1-9-0

PerconaServerMongoDB

重要

1.5.1. 自动数据源绑定

对于传统数据库,每当配置数据源时,都会启动自动绑定,如下所示:

quarkus.datasource.db-kind=postgresql
Copy to Clipboard Toggle word wrap

以上配置结合存在 quarkus-datasource,quarkus-jdbc-postgresql,quarkus-kubernetes -kubernetes , 和 quarkus-kubernetes-service-binding 属性,会导致 postgresql 数据库类型的 ServiceBinding 资源生成。

通过使用 Operator 资源的 apiVersionkind 属性(与使用的 postgresql Operator 匹配),生成的 ServiceBinding 资源将服务或资源绑定到应用程序。

当您没有为数据库服务指定名称时,db-kind 属性的值将用作默认名称。

 services:
 - apiVersion: postgres-operator.crunchydata.com/v1beta1
   kind: PostgresCluster
   name: postgresql
Copy to Clipboard Toggle word wrap

指定数据源的名称,如下所示:

quarkus.datasource.fruits-db.db-kind=postgresql
Copy to Clipboard Toggle word wrap

生成的 ServiceBinding 中的服务如下所示:

 services:
 - apiVersion: postgres-operator.crunchydata.com/v1beta1
   kind: PostgresCluster
   name: fruits-db
Copy to Clipboard Toggle word wrap

同样,如果您使用 mysql,可以指定数据源的名称,如下所示:

quarkus.datasource.fruits-db.db-kind=mysql
Copy to Clipboard Toggle word wrap

生成的 服务 包含以下内容:

 services:
 - apiVersion: pxc.percona.com/v1-9-0
   kind: PerconaXtraDBCluster
   name: fruits-db
Copy to Clipboard Toggle word wrap

1.5.1.1. 自定义自动服务绑定

虽然开发了自动服务绑定功能来消除尽可能多的手动配置,但在某些情况下,您可能需要手动修改生成的 ServiceBinding 资源。生成过程专门依赖于从应用程序提取的信息以及支持的 Operator 知识,这些 Operator 可能无法反映集群中部署的内容。生成的资源通常基于对常见服务类型支持的可绑定操作器的了解,以及为防止可能不匹配而开发的一系列约定,例如:

  • 目标资源名称与数据源名称不匹配
  • 需要为该服务类型使用特定 Operator 而不是默认 Operator
  • 当用户需要使用除 default 或 latest 以外的任何其他版本时,会发生版本冲突

约定

  • 目标资源协调根据 Operator 的类型和服务类型决定。
  • 默认情况下,目标资源名称设置为与服务类型匹配,如 postgresqlmysqlmongo
  • 对于命名数据源,使用数据源的名称。
  • 对于命名 mongo 客户端,使用客户端的名称。

示例 1:名称不匹配

如果您需要修改生成的 ServiceBinding 来修复名称不匹配,请使用 quarkus.kubernetes-service-binding.services 属性,并将服务名称指定为服务键。

service 键 通常是服务的名称,例如数据源的名称,或 mongo 客户端的名称。如果这个值不可用,则改为使用 postgresqlmysqlmongo 等数据源类型。

为了避免不同类型的服务之间命名冲突,请使用特定数据源类型(如 postgresql- <person> ) 作为服务密钥 添加前缀

以下示例演示了如何自定义 PostgresCluster 资源的 apiVersion 属性:

quarkus.datasource.db-kind=postgresql
quarkus.kubernetes-service-binding.services.postgresql.api-version=postgres-operator.crunchydata.com/v1beta2
Copy to Clipboard Toggle word wrap

示例 2:为数据源应用自定义名称

在示例 1 中,db-kind(postgresql)被用作服务密钥。在本例中,由于数据源按照惯例命名,因此改为使用fruits-db

以下示例显示,对于命名数据源,数据源名称用作目标资源的名称:

quarkus.datasource.fruits-db.db-kind=postgresql
Copy to Clipboard Toggle word wrap

这与以下配置相同:

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
Copy to Clipboard Toggle word wrap

更新于 2024-04-23

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat