对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

MongoDBSearch 资源规范

MongoDBSearch 自定义资源允许您在Kubernetes中部署和配置MongoDB Search 和 Vector Search 节点以及MongoDB 数据库部署。 MongoDBSearch资源部署 mongot 进程,这些进程通过同步MongoDB 部署中的数据来提供全文搜索和语义搜索功能。

要学习;了解有关部署MongoDB Search 和 Vector Search 的更多信息,请参阅部署MongoDB Search 和 Vector Search。

以下示例显示了MongoDBSearch自定义资源的资源规范:

注意

此示例不是有效配置。它包含所有可用字段,这些字段填充了示例值以供参考。有些字段是互斥的,有些字段优先于其他字段(示例,source.external 优先于 source.mongodbResourceRef)。有关有效组合,请参阅下面的字段说明。

1spec:
2 source:
3 # external takes precedence over mongodbResourceRef
4 mongodbResourceRef:
5 name: mdb
6 external:
7 # hostAndPorts and shardedCluster are mutually exclusive
8 hostAndPorts:
9 - mdb-rs-external-0.example.com:27017
10 - mdb-rs-external-1.example.com:27017
11 - mdb-rs-external-2.example.com:27017
12 shardedCluster:
13 router:
14 hosts:
15 - mongos1.example.com:27017
16 - mongos2.example.com:27017
17 shards:
18 - shardName: shard-0
19 hosts:
20 - shard0-node1.example.com:27018
21 - shard0-node2.example.com:27018
22 - shardName: shard-1
23 hosts:
24 - shard1-node1.example.com:27018
25 - shard1-node2.example.com:27018
26 keyfileSecretRef:
27 name: mdb-keyfile
28 key: keyfile
29 tls:
30 # ca references a ConfigMap that contains ca.crt
31 ca:
32 name: mdbc-rs-ca
33 username: search-sync-source
34 passwordSecretRef:
35 name: mdbc-rs-search-sync-source-password
36 key: password
37 # x509 authentication (mutually exclusive with
38 # username/passwordSecretRef and source.tls)
39 x509:
40 clientCertificateSecretRef:
41 name: mongot-x509-client-cert
42 # Set only if the private key is encrypted
43 keyFilePasswordSecretRef:
44 name: mongot-x509-key-password
45 # TLS client certificate for SCRAM connections
46 # (mutually exclusive with x509):
47 # tls:
48 # clientCertificateSecretRef:
49 # name: mongot-scram-client-cert
50 # keyFilePasswordSecretRef:
51 # name: mongot-scram-key-password
52 security:
53 tls:
54 certificateKeySecretRef:
55 name: mdbs-tls-secret
56 certsSecretPrefix: my-prefix
57 # Set only if the private key is encrypted
58 keyFilePasswordSecretRef:
59 name: mdbs-tls-key-password
60 version: "1.70.1"
61 autoEmbedding:
62 embeddingModelAPIKeySecret:
63 name: embedding-model-api-query-key
64 providerEndpoint: https://ai.mongodb.com/v1/embeddings
65 featureFlags:
66 enableOverloadRetrySignal: true
67 logLevel: INFO
68 observability:
69 prometheus:
70 mode: enabled
71 port: 9946
72 metricsForwarder:
73 mode: auto
74 resourceRequirements:
75 requests:
76 cpu: 100m
77 memory: 128Mi
78 limits:
79 cpu: 250m
80 memory: 256Mi
81 deployment:
82 spec:
83 template:
84 spec:
85 nodeSelector:
86 kubernetes.io/os: linux
87 opsManager:
88 agentCredentials:
89 name: om-agent-api-key
90 projectConfigMapRef:
91 name: om-project-config
92 clusters:
93 - name: cluster-1
94 index: 0
95 replicas: 2
96 loadBalancer:
97 # Option 1: Operator-managed Envoy load balancer
98 managed:
99 externalHostname: "{shardName}.search.apps.example.com"
100 routerHostname: "search-router.apps.example.com:27028"
101 replicas: 2
102 resourceRequirements:
103 requests:
104 cpu: "100m"
105 memory: 128Mi
106 limits:
107 cpu: "500m"
108 memory: 512Mi
109 deployment:
110 spec:
111 template:
112 spec:
113 nodeSelector:
114 kubernetes.io/os: linux
115 retryPolicy:
116 numRetries: 2
117 perTryTimeout: "60s"
118 minMongotReadyReplicas: 1
119 # Option 2: User-provided (BYO) load balancer
120 # (mutually exclusive with managed)
121 unmanaged:
122 endpoint: "{shardName}-search-lb.corp.example.com:443"
123 resourceRequirements:
124 limits:
125 cpu: "3"
126 memory: 5Gi
127 requests:
128 cpu: "2"
129 memory: 4Gi
130 persistence:
131 single:
132 storage: 16G
133 storageClass: standard
134 statefulSet:
135 spec:
136 template:
137 spec:
138 nodeSelector:
139 kubernetes.io/os: linux
140 jvmFlags:
141 - -Xms2g
142 - -Xmx2g
143 advancedMongotConfigs:
144 someAdvancedSetting: value
145 syncSourceSelector:
146 matchTagSets:
147 - region: us-east-1
148 workload: search
149 - {}
150 shardOverrides:
151 - shardNames:
152 - shard-0
153 replicas: 3
154 resourceRequirements:
155 requests:
156 cpu: "4"
157 memory: 8Gi
158 persistence:
159 single:
160 storage: 32G
161 jvmFlags:
162 - -Xms4g
163 - -Xmx4g
164 statefulSet:
165 spec:
166 template:
167 spec:
168 nodeSelector:
169 disktype: ssd

本部分介绍必须用于所有MongoDBSearch资源的设置。

apiVersion

类型:字符串

MongoDB Kubernetes资源模式的版本。将值设置为 mongodb.com/v1

kind

类型:字符串

要创建的 MongoDB Kubernetes 资源类型。 将其设置为MongoDBSearch

metadata.namespace

类型:字符串

应在其中创建 MongoDBSearch资源的命名空间。要利用 MongoDBSearchMongoDBMongoDBCommunity 资源的自动配置,应在与 MongoDBMongoDBCommunity资源相同的命名空间中创建 MongoDBSearch资源。

metadata.name

类型:字符串

MongoDBSearch资源的唯一标识符。该名称必须是有效的Kubernetes DNS 子域名。保持名称简短。 Kubernetes Operator 从中派生出其创建的Kubernetes资源的名称,示例{name}-search-{clusterIndex}-{shardName}。 Kubernetes Operator 验证每个生成的名称是否符合Kubernetes DNS 限制:标签为 63 个字符,子域名为 253 个字符。

spec.clusters

类型:对象数组

资源的按 KubernetesMongoDBSearch 集群部署配置。此字段为必填字段,必须包含至少一个条目,最多50 个条目:一个条目用于单集群部署,或者一个条目用于多集群部署中运行mongot 个 Pod 的每个Kubernetes集群。有关完整字段参考,包括nameindex ,请参阅集群部署设置。

MongoDBSearch自定义资源可以使用以下设置:

spec.source

类型:对象

描述 mongot 的MongoDB源的设置。源可以是副本集或分片集群。在以下情况下需要此设置:

  • MongoDB 是外部的

  • MongoDB 的名称不同于 MongoDBSearch

MongoDBSearch资源必须始终连接到MongoDB 部署。如果使用带有MongoDBMongoDBCommunity CRD 的Kubernetes Operator 进行部署,并且spec.source 为空,则Kubernetes Operator 使用基于metadata.name 的以下内容在Kubernetes中查找数据库:

  • 在同一命名空间中查找与 MongoDBSearch 中为 metadata.name设立的名称相同的 MongoDBMongoDBCommunity 资源。

  • <MongoDBSearch.metadata.name>-<username>-password 密钥中查找 mongot 用户的密码密钥,对于默认用户名,该密钥会生成 <MongoDBSearch.metadata.name>-search-sync-source-password

spec.source.mongodbResourceRef.name

类型:字符串

与此MongoDB搜索和向量搜索资源关联的 MongoDBMongoDBCommunity资源的名称。 Kubernetes Operator 同时支持副本集和分片的集群。不能有多个 MongoDBSearch资源引用同一 MongoDBMongoDBCommunity资源。

仅当您的 MongoDBMongoDBCommunity资源部署在同一Kubernetes集群中并且与 MongoDBSearch资源位于同一命名空间中时,才使用此字段。如果您的数据库部署在Kubernetes外部或位于不同的命名空间中,请使用 spec.source.external 配置与数据库的连接。如果同时设立这两个字段,则 spec.source.external 优先。

如果省略, Kubernetes Operator 会查找与此 MongoDBSearch资源同名的 MongoDBMongoDBCommunity资源。

spec.source.mongodbResourceRef.namespace

类型:字符串

spec.source.mongodbResourceRef.name 引用的 MongoDBMongoDBCommunity资源的命名空间。 Kubernetes Operator 目前会忽略此字段,并始终使用 MongoDBSearch资源的命名空间。不支持跨命名空间引用。如果您的数据库位于不同的命名空间中,请使用 spec.source.external

spec.source.username

类型:字符串

用于通过 mongodmongot 进行身份验证的用户名。指定的用户必须具有searchCoordinator角色。如果省略, Kubernetes 操作符 假定用户名名为 search-sync-source

spec.source.passwordSecretRef.name

类型:字符串

包含密码的密钥名称,mongot 必须使用该密码与 mongod 进行身份验证。如果省略,则默认为 <MongoDBSearch.metadata.name>-<username>-password,其中 <username>spec.source.username 的值。对于默认用户名search-sync-source,这会产生 <MongoDBSearch.metadata.name>-search-sync-source-password

spec.source.passwordSecretRef.key

类型:字符串

将密码值存储在密钥中所使用的密钥。如果省略,则默认为 password

spec.source.x509

类型:对象

mongot同步源连接配置 x509客户端证书身份验证。如果设立此字段,则 mongot 使用 x509 而不是用户名和密码对MongoDB进行身份验证。

该字段与 spec.source.passwordSecretRefspec.source.usernamespec.source.tls 互斥。如果您同时指定 x509 和 密码身份验证, Kubernetes Operator 会拒绝配置。

spec.source.x509.clientCertificateSecretRef

类型:对象

包含 x509客户端证书和密钥的密钥,用于对MongoDB同步源进行身份验证。密钥必须包含以下键:

  • tls.crt — 客户端证书

  • tls.key — 私钥

如果私钥使用密码加密,请将密码存储在单独的密钥中,并使用 spec.source.x509.keyFilePasswordSecretRef 引用它。

如果设立spec.source.x509,则必须指定此字段。

spec.source.x509.keyFilePasswordSecretRef

类型:对象

包含密码的密钥,该密码可对 spec.source.x509.clientCertificateSecretRef 中的密码加密私钥进行解密。密钥必须包含 keyFilePassword 密钥下的密码。如果私钥未加密,则省略此字段。

spec.source.tls

类型:对象

如果使用SCRAM (用户名和密码)身份验证,请为 mongot同步源连接配置 TLS客户端证书。如果设立此字段,则 mongot 会在与源MongoDB 部署(双向 TLS 传输)的 TLS 握手期间提供客户端证书。 mongot 仍使用用户名和密码进行身份验证。

仅在SCRAM身份验证(spec.source.passwordSecretRef) 中使用此字段。该字段与 spec.source.x509 互斥。如果您希望客户端证书本身提供服务身份验证档案,请改用 spec.source.x509

spec.source.tls.clientCertificateSecretRef

类型:对象

包含 mongot 在与源MongoDB 部署的TLS 握手期间提供的 TLS客户端证书和密钥的密钥。密钥必须包含以下键:

  • tls.crt — 客户端证书

  • tls.key — 私钥

如果设立spec.source.tls,则必须指定此字段。

spec.source.tls.keyFilePasswordSecretRef

类型:对象

包含密码的密钥,该密码可对 spec.source.tls.clientCertificateSecretRef 中的密码加密私钥进行解密。密钥必须包含 keyFilePassword 密钥下的密码。如果私钥未加密,则省略此字段。

spec.source.external

类型:对象

描述外部数据源的设置。仅当您要连接到未使用Kubernetes Operator 部署的外部MongoDB时,才需指定这些设置。如果指定这些设置,它们将优先于 spec.source.mongodbResourceRef

spec.source.external.hostAndPorts

类型:字符串数组

外部副本集的主机名和端口列表。此字段与 spec.source.external.shardedCluster 互斥。使用 hostAndPorts 作为副本集源,使用 shardedCluster 作为分片集群源。

spec.source.external.shardedCluster

类型:对象

声明外分片的MongoDB 集群作为 mongot 的数据源。包含 mongos 路由器和每分片副本集节点的配置。

spec.source.external.shardedCluster.router.hosts

类型:字符串数组

host:port 格式的 mongos 路由器实例的终结点列表。所有 mongot 实例都连接到这些路由器。至少指定一个条目。

spec.source.external.shardedCluster.shards

类型:对象数组

外部MongoDB 集群中所有分片的列表。每个条目描述一个分片的副本集。 Kubernetes Operator 为每个分片创建一个 mongot StatefulSet。指定至少一个分片条目。

spec.source.external.shardedCluster.shards[*].shardName

类型:字符串

分片的逻辑名称。该名称在所有分片中必须是唯一的,并且必须符合Kubernetes DNS 标签名称规则 1123(RFC):小写字母数字字符和连字符- (),以字母数字字符开头和结尾,最大长度为63 个字符。不允许使用句点. () 和下划线_ ()。

Kubernetes Operator 将 metadata.name、集群索引和 shardName 组合到其创建的Kubernetes资源的名称中,并验证每个生成的名称是否符合Kubernetes DNS 的 63 个字符字符和 253 个字符的限制用于子域名。对于这些限制,请保持 shardName 足够短。

spec.source.external.shardedCluster.shards[*].hosts

类型:字符串数组

此分片的 mongod副本集节点的端点列表,采用 host:port 格式。至少指定一个条目。每个分片都有自己的 mongot 实例群组,这些实例的数据仅来自该分片的副本集。

spec.source.external.keyfileSecretRef

类型:对象

包含 mongot 用于连接到外部MongoDB 部署的mongod 密钥文件的密钥。 name字段为必填字段。 key字段为可选项。

spec.source.external.tls.ca.name

类型:字符串

ConfigMap 的名称,其中包含颁发 mongod 节点使用的 TLS 证书的证书颁发机构的可信链。您必须在此 ConfigMap 中的 ca.crt 密钥下指定证书(或证书链)。

以下设置描述了所需 spec.clusters大量的每个条目。

spec.clusters

类型:对象数组

MongoDBSearch资源的按 Kubernetes 集群部署配置。此字段为必填字段,必须至少包含一个条目,最多 50 个条目。所有大小和位置设置,例如 replicasloadBalancerresourceRequirementspersistencejvmFlagsstatefulSet 都位于 clusters 条目中。这些设置没有对应的顶级设置。

对于单集群部署,请指定一个条目。您可以省略 nameindex

对于多集群部署,请为每个运行 mongot Pod 的Kubernetes集群指定一个条目。如果指定多个条目,则应用以下规则:

  • name 每个条目都需要,并且必须是唯一的。

  • index 每个条目都需要,并且必须是唯一的。

  • MongoDB源必须是外部源 (spec.source.external)。多集群部署不支持Operator 管理的MongoDB源。

  • 每个条目都必须配置一个 Operator 托管的负载负载均衡器(loadBalancer.managed)。多集群部署不支持非托管负载均衡器。

Kubernetes Operator 通过 CRD验证规则 和 协调时验证执行这些规则。

spec.clusters[].name

类型:字符串

此条目的Kubernetes集群名称,最大长度为 253 个字符。对于单集群部署,您可以省略此字段。

如果 spec.clusters 包含多个条目,则 name 为必填项,必须在各条目中具有唯一性,并且在创建资源后无法更改。

spec.clusters[].index

类型:整型

此条目的Kubernetes集群的稳定整数标识符。该值必须介于 0999 之间,并且在各条目中必须是唯一的。如果 spec.clusters 包含多个条目,则每个条目都需要 index

Kubernetes Operator 在为此集群条目创建的Kubernetes资源名称中包含该索引,示例{name}-search-{index} 表示 StatefulSet,{name}-search-{index}-svc 表示 Services,{name}-search-{index}-config 表示 ConfigMap。对于分片集群源,名称还包括分片名称,示例{name}-search-{index}-{shardName}{name}-search-{index}-{shardName}-svc

警告

请勿更改现有条目的 index。由于索引是资源名称的一部分,因此对其进行更改会导致Kubernetes Operator 在新索引下创建新资源,并孤立旧索引下的资源。这适用于每个带有索引的资源,包括代理服务 ({name}-search-{index}[-{shardName}]-proxy-svc)、Envoy 部署和 ConfigMap ({name}-search-lb-{index})、负载负载均衡器证书密钥以及指标转发器资源 ({name}-search-metrics-forwarder-{index})。

对于单集群部署,您可以省略此字段,默认值为 0。但是,如果每个成员Kubernetes集群都运行自己的Kubernetes Operator实例,请在每个集群的 MongoDBSearch资源中将 index 显式设立为不同的值。不同的索引可防止生成的主机名和资源名称在集群之间发生冲突。

spec.clusters[].replicas

类型:整型

要在此Kubernetes集群中部署的mongot Pod 数量。对于副本集源,这是 mongot Pod 的总数。对于分片集群源,这是每个分片的 mongot Pod 数量。

如果 spec.clusters[].replicas 大于 1,则还必须配置 spec.clusters[].loadBalancer,在 mongod 和多个 mongot 实例之间路由流量。

如果将 spec.clusters[].replicas设立为 0, Kubernetes Operator 会使该集群中的 mongot部署脱机。 Kubernetes Operator 将 StatefulSet 扩展到零个 Pod,并保持 MongoDBSearch资源及其其他Kubernetes资源不变。

如果省略,则默认值为 1

spec.clusters[].resourceRequirements

类型core/v1/ResourceRequirements

mongodb-search容器可以请求和限制使用的 CPU 和内存。

如果省略, Kubernetes Operator 将使用以下默认值:

requests:
cpu: 2
memory: 4Gi
spec.clusters[].resourceRequirements.limits

类型:对象

mongodb-search容器可以消耗的资源、CPU 和内存的上限。默认下,没有设立限制。

spec.clusters[].resourceRequirements.requests

类型:对象

mongodb-search容器请求的 CPU 和内存量。如果您仅指定 cpumemory 之一, Kubernetes Operator 将应用另一个的默认值。

spec.clusters[].persistence.single

类型:对象

存储索引的MongoDB Search 和 Vector Search 持久卷的存储配置。每个搜索实例(pod) 都有自己独立的存储。

标量
数据类型
说明

labelSelector

字符串

storage

字符串

应安装的持久卷的最小大小。默认值为16G

storageClass

字符串

持久卷声明中指定的存储类型。

MongoDBSearch 仅支持single 持久模式,即所有数据使用一个卷。尽管 CRD模式还包含 spec.clusters[].persistence.multiple字段,但Kubernetes Operator 不会应用它。如果省略persistence , Kubernetes Operator 会将spec.clusters[].persistence.single.storage 设置为16G

spec.clusters[].loadBalancer

类型:对象

mongod(或 mongos)和 mongot 之间实现 L7 负载平衡的配置。如果 spec.clusters[].replicas 大于 1,则此字段为必填项。

必须设立managedunmanaged 之一。

spec.clusters 中的所有条目必须就负载负载均衡器模式达成一致:要么每个条目设置 loadBalancer.managed,要么每个条目设置 loadBalancer.unmanaged,要么没有条目设置 loadBalancer。 Kubernetes Operator 拒绝混合模式。多集群部署仅支持托管模式。

spec.clusters[].loadBalancer.managed

类型:对象

配置 Operator 托管的 Envoy 负载负载均衡器。该字段与spec.clusters[].loadBalancer.unmanaged 互斥。

对于分片集群源,如果使用托管负载负载均衡器,还必须配置 spec.security.tls。 Envoy 代理使用 SNI 将流量路由到正确的分片,这需要 TLS。

spec.clusters[].loadBalancer.managed.externalHostname

类型:字符串

Envoy 代理期望用于传入请求的 SNI 匹配的主机名。 Envoy TLS服务器证书必须在其 SAN(主题备用名称)字段中包含此主机名。

对于分片集群源,该值必须包含 {shardName} 占位符, Kubernetes Operator 会按分片扩展该分片。每个分片都有自己的主机名,Envoy TLS服务器证书必须包含其 SAN 中的所有扩展分片主机名。对于副本集源,请勿使用 {shardName} 占位符。

如果MongoDB由外部托管(不是由Kubernetes 操作符 部署),则此字段为必填项。如果MongoDB在同一集群中由 Operator 托管,则省略此字段,因为Kubernetes Operator 会自动配置路由。

在多集群部署中,每个集群条目通常使用不同的主机名。但是, Kubernetes Operator 允许跨集群共享一个主机名,示例,如果跨可用区的故障转移代理位于多个集群的 Envoy 代理前面。

spec.clusters[].loadBalancer.managed.routerHostname

类型:字符串

mongos 路由器用于通过托管Envoy 负载负载均衡器访问此集群的 mongot 实例的端点(采用 host:port 格式)。 Kubernetes Operator 使用主机名在集群级路由链上进行 SNI 匹配,因此 Envoy TLS服务器证书必须在其 SAN 中包含此主机名。

如果您将托管负载负载均衡器与外部分分片的MongoDB源 (spec.source.external.shardedCluster) 一起使用,则此字段为必填项。 Kubernetes Operator 会忽略副本集源和 Operator 托管的MongoDB 的此字段。

externalHostname 不同, Kubernetes Operator 逐字使用该值,因此该值不得包含 {shardName} 占位符。此端点是 mongos 与分片无关的入口点。

spec.clusters[].loadBalancer.managed.replicas

类型:整型

要在此Kubernetes集群中部署的Envoy 代理 Pod 数量。该值必须为 1 或更大。如果省略,则默认为 1

spec.clusters[].loadBalancer.managed.resourceRequirements

类型core/v1/ResourceRequirements

Envoy容器可以请求和限制的 CPU 和内存。如果指定此设置, Kubernetes 操作符 会完全替换默认值。

如果省略, Kubernetes Operator 将使用以下默认值:

requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 500m
memory: 512Mi
spec.clusters[].loadBalancer.managed.deployment

类型:对象

覆盖Kubernetes Operator 合并到 Operator 创建的 Envoy 部署中的操作。此对象包含一个具有metadata labels和 的 字段,以及一个具有annotations specapps/v1 /DeploymentSpec对象的 字段。

spec.clusters[].loadBalancer.managed.retryPolicy

类型:对象

重试 Envoy 代理应用于单个 gRPC 流到上游 mongot 实例的行为。 Envoy 代理会将每次重试尝试发送到与失败尝试不同的 mongot托管。

如果省略此字段,Envoy 代理将使用默认值重试:2 次重试,每次尝试超时为 60s

spec.clusters[].loadBalancer.managed.retryPolicy.numRetries

类型:整型

每个请求的最大重试次数。该值必须为 1 或更大。如果省略,则默认为 2,即允许每个请求总共尝试 3 次。

spec.clusters[].loadBalancer.managed.retryPolicy.perTryTimeout

类型:字符串

每次尝试的超时时间,包括原始请求,以持续时间字符串表示(示例"30s")。如果省略,则默认为 "60s"

spec.clusters[].loadBalancer.managed.minMongotReadyReplicas

类型:整型

在 Envoy 代理将流量路由到 mongot群组(示例,一个分片的 mongot 实例)之前,该组必须具备的就绪 mongot 副本的最小数量。当某个群组低于此阈值时,Envoy 代理会将发往该群组的流量转发到正常的 mongot群组,并使用 routed_from_another_shard 标头标记这些请求。这些请求返回空结果而不是错误。

该值必须为 1 或更大。如果省略,则默认为 1

spec.clusters[].loadBalancer.unmanaged

类型:对象

配置用户提供的(自带)L7 负载负载均衡器。该字段与 spec.clusters[].loadBalancer.managed 互斥。多集群部署不支持非托管负载均衡器。

spec.clusters[].loadBalancer.unmanaged.endpoint

类型:字符串

BYO 负载负载均衡器的端点,采用 host:port 格式。如果配置 spec.clusters[].loadBalancer.unmanaged,则必须指定此字段。

如果Kubernetes Operator 管理MongoDB 部署(使用 spec.source.mongodbResourceRef), Kubernetes Operator 会将此值作为 mongotHostsearchIndexManagementHostAndPort 写入 mongod 配置。

对于外分片集群源,该值必须包含Kubernetes Operator 按分片展开的 {shardName} 占位符,并且必须包含的不仅仅是占位符。对于外部副本集源,该值不得包含 {shardName} 占位符。

spec.clusters[].shardOverrides

类型:对象数组

以不同于集群默认值的方式覆盖此集群条目中特定分片的大小。

您只能将此字段与外分片集群源 (spec.source.external.shardedCluster) 一起使用。您引用的每个分片名称必须存在于 spec.source.external.shardedCluster.shards[*].shardName 中,并且您可以为每个集群条目覆盖每个分片最多一次。

每个覆盖项都包含必填的 shardNames 列表(至少一个条目)以及可选的 replicasresourceRequirementspersistencejvmFlagsstatefulSet 字段。如果您在覆盖中设立replicasresourceRequirementspersistencejvmFlags,它们将替换指定分片的集群值。仅当将 jvmFlags设立为非空列表时,才会替换集群值。 Kubernetes Operator 将 statefulSet 深度合并到集群值上。您未设立的字段会继承集群值。

spec.clusters[].syncSourceSelector.matchTagSets

类型:对象数组

副本集标签集的有序列表,按副本集标签选择同步源 mongod 节点。 Kubernetes Operator 将该列表传递给 mongot 配置。 mongot 从第一个匹配标签集选择的节点进行同步,并且优先选择从节点(secondary node from replica set)节点。

每个条目都是标签名称到标签值的映射。空文档({}) 匹配任何节点,因此如果没有早期标签集匹配,您可以附加尾随 {} 条目作为匹配任意后备。您最多可以指定 50 个条目。

spec.clusters[].jvmFlags

类型:字符串数组

传递给 mongot进程的Java虚拟机(JVM)标志。每个标志必须以 -X-XX:-D 开头,不得包含空格,并且只能包含字母数字字符和 ._+:-= 个字符。 Kubernetes Operator 会拒绝与这些规则不匹配的标志。

如果您未在此字段中指定 -Xms-Xmx, Kubernetes Operator 会自动计算堆大小,将两者设置为 spec.clusters[].resourceRequirements.requests.memory 的一半。如果您不指定资源要求, Kubernetes Operator 会使用默认4Gi 内存请求,产生大约 -Xmx2048m -Xms2048m。 Kubernetes Operator 始终将您提供的标志附加在 Operator 计算的标志之后。

spec.clusters[].statefulSet

类型:对象

覆盖Kubernetes Operator 为部署mongot Pod 创建的 StatefulSet。此对象包含一个具有metadata labels和 的 字段,以及一个具有annotations specapps/v1 /StatefulSetSpec对象的 字段。 Kubernetes Operator 始终最后应用覆盖项,因此它们会覆盖Kubernetes Operator 计算的设置。

注意

请勿使用 spec.clusters[].statefulSet 来设立资源要求或持久性设置。请分别使用 spec.clusters[].resourceRequirementsspec.clusters[].persistence 字段。

spec.clusters[].advancedMongotConfigs

类型:对象

此集群条目的高级 mongot 设置。 Kubernetes Operator 会逐字呈现 mongot 配置文件的 advancedConfigs 键下的值,而不读取或修改该值。仅将此字段用于 MongoDBSearch资源不作为一流字段公开的 mongot 设置。

spec.security

类型:对象

mongot 侦听服务器的安全设置。

spec.security.tls

类型:对象

TLS 设置。mongot如果省略,mongot 将不会对传入连接使用 TLS。

如果将托管负载负载均衡器与分片集群源一起使用,则此字段为必填字段。 Envoy 代理使用 SNI 将流量路由到正确的分片,这取决于 TLS ClientHello。如果您在此配置中省略 spec.security.tls, Kubernetes Operator 将无法进行协调。

spec.security.tls.certificateKeySecretRef.name

类型:字符串

自版本 1.8.0 起已弃用。:请改用 spec.security.tls.certsSecretPrefix

包含私钥 (tls.key) 和证书 (tls.crt) 的同一命名空间中的 TLS 密钥的名称。 Kubernetes Operator 仍支持将此字段用于副本集部署,以实现向后兼容。对于分片集群部署, Kubernetes Operator 在验证期间拒绝此字段,因为单个密钥引用无法涵盖每个分片的证书。

spec.security.tls.certsSecretPrefix

类型:字符串

Kubernetes Operator 用于按命名约定派生 TLS 密钥名称的前缀。如果设立此字段, Kubernetes Operator 会按照以下模式查找密钥:

组件
密钥名称模式

副本集的 mongot服务器证书

{certsSecretPrefix}-{name}-search-cert

分片 mongot 证书(每个集群和分片)

{certsSecretPrefix}-{name}-search-{clusterIndex}-{shardName}-cert

托管负载负载均衡器服务器证书(每个集群,所有拓扑)

{certsSecretPrefix}-{name}-search-lb-{clusterIndex}-cert

托管负载负载均衡器客户端证书

{certsSecretPrefix}-{name}-search-lb-{clusterIndex}-client-cert

Kubernetes Operator 对所有拓扑的每个集群使用一个托管负载负载均衡器服务器证书。对于分片的集群,此证书的 SAN 必须包含 externalHostnamerouterHostname 中的所有扩展分片主机名。

Kubernetes Operator 按以下顺序解析 mongot服务器证书密钥名称:

  1. 如果设立spec.security.tls.certificateKeySecretRef.name, Kubernetes Operator 将使用该名称。

  2. 如果设立certsSecretPrefix, Kubernetes Operator 将使用上表中的命名模式。

  3. 如果您未设立这两个字段,则Kubernetes Operator 将使用默认名称 {name}-search-cert 进行副本集部署,或使用默认的分片模式{name}-search-{clusterIndex}-{shardName}-cert 进行分片的部署。

如果您不设立certsSecretPrefix,托管负载负载均衡器证书也会使用默认名称: Kubernetes Operator 为服务器证书挂载 {name}-search-lb-{clusterIndex}-cert,为客户端证书挂载 {name}-search-lb-{clusterIndex}-client-cert

spec.security.tls.keyFilePasswordSecretRef

类型:对象

包含密码的密钥,该密码用于解密 TLS 证书密钥中经过密码加密的服务器私钥。密钥必须包含 keyFilePassword 密钥下的密码。如果服务器私钥未加密,请忽略此字段。

spec.logLevel

类型:字符串

mongot 日志的详细程度。值可以是以下之一:

  • TRACE

  • DEBUG

  • INFO

  • WARN

  • ERROR

如果省略,则默认值为 INFO

spec.observability.prometheus

类型:对象

mongot 中 Prometheus指标端点的配置。如果省略此字段, Kubernetes Operator 将在默认端口 9946 上启用指标端点。

spec.observability.prometheus.mode

类型:字符串

mongot 中启用或禁用 Prometheus指标端点。值可以是 enableddisabled。如果省略,则默认为 enabled

spec.observability.prometheus.port

类型:整型

启用Prometheus指标终结点的端口。默认情况下,在端口 9946 上启用 Prometheus 指标终结点。

spec.observability.metricsForwarder

类型:对象

指标转发器的配置,这是Kubernetes Operator 创建的用于抓取 mongot Prometheus指标并将其转发到Ops Manager 的部署。

spec.observability.metricsForwarder.mode

类型:字符串

Kubernetes Operator 是否创建指标转发器。值可以是以下之一:

  • auto — Kubernetes Operator 为 Operator 托管的 MongoDB(Ops Manager支持)源创建转发器,并且仅当您设立spec.observability.metricsForwarder.opsManager 时才为外部源创建转发器。对于 MongoDBCommunity 源, Kubernetes Operator 不会创建转发器。

  • enabled — Kubernetes Operator 始终会创建转发器。如果源是 MongoDBCommunity资源, Kubernetes Operator 会报告错误,因为 MongoDBCommunity 源不支持转发器。

  • disabled — Kubernetes Operator 从不创建转发器。

如果省略,则默认值为 auto

enabledauto 模式需要启用 Prometheus 端点 (spec.observability.prometheus)。如果禁用端点, Kubernetes Operator 会报告 Invalid指标转发器状态。

spec.observability.metricsForwarder.resourceRequirements

类型core/v1/ResourceRequirements

指标转发器容器可以请求和限制的 CPU 和内存。如果省略, Kubernetes Operator 将使用 cpu: 100mmemory: 128Mi 的请求以及 cpu: 250mmemory: 256Mi 的限制。

spec.observability.metricsForwarder.deployment

类型:对象

覆盖Kubernetes Operator 合并到 Operator 创建的指标转发器部署中的操作。此对象包含一个具有metadata labels和 的 字段,以及一个具有annotations specapps/v1 /DeploymentSpec对象的 字段。

spec.observability.metricsForwarder.opsManager

类型:对象

指标转发器向其发送指标的Ops Manager项目和凭证。如果省略, Kubernetes Operator 会从源MongoDB资源的连接配置中派生项目和凭证。为不存在源MongoDB资源的外部MongoDB源设置此字段。

如果设立此字段,则必须同时设立agentCredentials.name(包含Ops Manager代理API密钥的密钥)和 projectConfigMapRef.name(包含Ops Manager项目配置的 ConfigMap)。

重要

自动嵌入仅作为MongoDB Community Edition部署的预览功能提供。在预览期间,功能和相应的文档可能随时更改。要学习;了解更多信息,请参阅预览功能。

spec.autoEmbedding

类型:对象

在集合中自动嵌入文本数据的配置。

spec.autoEmbedding.embeddingModelAPIKeySecret.name

类型:字符串

包含嵌入模型API密钥的密钥名称, mongot必须使用该密钥在索引时和查询时生成嵌入。密钥必须包含indexing-key 键下的索引时键和query-key 键下的查询时键。

仅当 spec.autoEmbedding.providerEndpoint 指向 Operator 管理的自托管 Voyage AI嵌入服务时,才能省略 embeddingModelAPIKeySecret。否则, Kubernetes Operator 会需要它。

spec.autoEmbedding.providerEndpoint

类型:字符串

用于生成嵌入的嵌入模型端点URL 。

spec.featureFlags

类型:对象

mongot 的功能标志。如果将标志设立为 true, Kubernetes Operator 会将其呈现到 mongot 配置中。如果省略 featureFlags对象或单个标志,则应用该标志的模式默认(true 表示 enableOverloadRetrySignal)。

spec.featureFlags.enableOverloadRetrySignal

类型:布尔值

启用 mongot 过载重试信号。如果启用此标志,mongot 会通过 gRPC RESOURCE_EXHAUSTED 响应向上游代理(例如 Operator 托管的 Envoy 负载负载均衡器)发出负载卸载信号。然后,代理会在另一个 mongot实例上重试该请求。

如果省略,则默认值为 true

spec.version

类型:字符串

mongodb-search Docker映像的版本。如果省略, Kubernetes Operator 将使用与之捆绑的默认MongoDB Search 版本。您可以在升级Kubernetes Operator 时明确设立版本以防止自动升级。

Kubernetes Operator 在 MongoDBSearch资源的 status字段下报告状态信息。

status.phase

类型:字符串

MongoDBSearch资源的当前阶段。可能的值包括 PendingRunningFailedDisabledUpdatedUnsupported

status.message

类型:字符串

人类可读的消息,其中包含有关当前状态的详细信息。

status.lastTransition

类型:字符串

status.phase 上次转换的时间戳。

status.observedGeneration

类型:整型

生成Kubernetes Operator 上次处理的 MongoDBSearch资源。

status.warnings

类型:字符串数组

Kubernetes Operator 为资源报告的警告。

status.version

类型:字符串

Kubernetes Operator 协调的MongoDB Search (mongot) 版本。

status.resourcesNotReady

类型:对象数组

尚未准备就绪的Kubernetes依赖资源。每个条目报告资源的 kindname,以及可选的 messageerrors 列表。

status.pvc

类型:对象数组

mongot StatefulSet 的持久卷声明的状态。每个条目都报告声明所属的 phasestatefulsetName

status.loadBalancer

类型:对象

Operator 管理的负载负载均衡器(Envoy) 的状态。仅当设立spec.clusters[].loadBalancer.managed 时,此字段才会出现。对于多集群部署, Kubernetes Operator 会报告所有集群的 Envoy 部署中的最差阶段。

status.loadBalancer.phase

类型:字符串

托管负载负载均衡器的当前阶段。可能的值包括 PendingRunningFailed。此字段在 LOADBALANCER 列下的 kubectl get 输出中可见。

status.loadBalancer.message

类型:字符串

人类可读的消息,其中包含有关托管负载负载均衡器状态的详细信息。

status.metricsForwarder

类型:对象

指标转发器的状态。

status.metricsForwarder.phase

类型:字符串

指标转发器的当前阶段。可能的值包括 PendingRunningFailed。如果将 spec.observability.metricsForwarder.mode设立为 disabled,则该阶段报告 Disabled。此字段在 METRICSFORWARDER 列下的 kubectl get 输出中可见。

status.metricsForwarder.message

类型:字符串

人类可读的消息,其中包含指标转发器状态的详细信息。