1.5. 自动服务绑定


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

注意

只能为有限的服务类型生成自动服务绑定。

与既定的 Kubernetes 和 Quarkus 服务术语保持一致,本章使用术语"kinds"来引用这些服务类型。

表 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

前面提到的配置以及存在 quarkus-datasourcequarkus-jdbc-postgresqlquarkus-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

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

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 类型和服务类型建立。
  • 默认情况下,目标资源名称与服务类型一致,如 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

示例 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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.