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

MongoDBSearch 资源规范

MongoDBSearch 自定义资源可以在 Kubernetes 中与 MongoDB 数据库部署一起部署和配置 MongoDB Search 和向量搜索节点。MongoDBSearch 资源部署 mongot 进程,通过同步 MongoDB 部署中的数据提供全文和语义搜索功能。

要了解有关部署 MongoDB Search 和向量搜索的更多信息,请参阅部署 MongoDB 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 操作符从其中衍生它创建的 Kubernetes 资源名称,例如 {name}-search-{clusterIndex}-{shardName}。Kubernetes 操作符验证每个生成的名称都符合 Kubernetes DNS 对标签的 63 个字符和对子域名称的 253 个字符的限制。

spec.clusters

类型:对象数组

适用于 MongoDBSearch 资源的每个 Kubernetes 集群的部署配置。此字段为必填字段,必须包含至少一个条目和最多 50 个条目:单集群部署的一个条目,或多集群部署中运行 mongot 节点的每个 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 Search 和 向量搜索 资源关联的 MongoDBMongoDBCommunity 资源的名称。Kubernetes 操作符 支持副本集和分片集群。您不能有多于一个引用相同 MongoDBMongoDBCommunity 资源的 MongoDBSearch 资源。

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

如果省略,Kubernetes 操作符 将查找与此 MongoDBSearch 资源同名的 MongoDBMongoDBCommunity 资源。

spec.source.mongodbResourceRef.namespace

类型:字符串

spec.source.mongodbResourceRef.name 引用的 MongoDBMongoDBCommunity 资源的命名空间。Kubernetes 操作符当前忽略此字段,并始终使用 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 操作符将拒绝配置。

spec.source.x509.clientCertificateSecretRef

类型:对象

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

  • tls.crt — 客户端证书

  • tls.key — 私钥

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

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

spec.source.x509.keyFilePasswordSecretRef

类型:对象

包含密码的 Secret,用于解密 spec.source.x509.clientCertificateSecretRef 中经密码加密的私钥。Secret 必须在 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

类型:对象

包含 TLS 客户端证书和密钥的 Secret,mongot 在与源 MongoDB 部署进行 TLS 握手期间会呈现该 Secret。Secret 必须包含以下密钥:

  • tls.crt — 客户端证书

  • tls.key — 私钥

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

spec.source.tls.keyFilePasswordSecretRef

类型:对象

包含密码的 Secret,用于解密 spec.source.tls.clientCertificateSecretRef 中经密码加密的私钥。Secret 必须在 keyFilePassword 键下包含密码。如果私钥未加密,请忽略此字段。

spec.source.external

类型:对象

描述外部数据源的设置。仅当您想连接到未使用 Kubernetes 操作符 部署的外部 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 操作符 为每个分片创建一个 mongot StatefulSet。至少指定一个分片条目。

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

类型:字符串

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

Kubernetes 操作符 将 metadata.name、集群索引和 shardName 组合到它创建的 Kubernetes 资源名称中,并验证每个生成的名称都符合 Kubernetes DNS 对标签的 63 个字符和对子域名称的 253 个字符的限制。使 shardName 足够短以适应这些限制。

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

类型:字符串数组

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

spec.source.external.keyfileSecretRef

类型:对象

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

spec.source.external.tls.ca.name

类型:字符串

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

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

spec.clusters

类型:对象数组

适用于 MongoDBSearch 资源的每个 Kubernetes 集群的部署配置。此字段为必填字段,必须包含至少一个条目,最多包含 50 个条目。所有大小调整和放置设置,例如 replicasloadBalancerresourceRequirementspersistencejvmFlagsstatefulSet,都存在于 clusters 条目中。这些设置没有顶级等效项。

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

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

  • name 每个条目都必须是独一无二的。

  • index 每个条目都必须是独一无二的。

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

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

Kubernetes 操作符通过 CRD 验证规则和协调时验证来实施这些规则。

spec.clusters[].name

类型:字符串

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

如果 spec.clusters 包含多个条目,则需要 name,必须在条目之间独一无二,并且在创建资源后不可更改。

spec.clusters[].index

类型:整型

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

Kubernetes 操作符在为此集群入口创建的 Kubernetes 资源名称中包含索引,例如 StatefulSets 的 {name}-search-{index}、Services 的 {name}-search-{index}-svc 和 ConfigMaps 的 {name}-search-{index}-config。对于分片集群源,名称还包含分片名称,例如 示例 {name}-search-{index}-{shardName}{name}-search-{index}-{shardName}-svc

警告

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

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

spec.clusters[].replicas

类型:整型

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

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

如果将 spec.clusters[].replicas 设置为 0,则 Kubernetes 操作符 会将此集群中的 mongot 部署离线。Kubernetes Operator 会将 StatefulSet 扩展到零个节点,并保留 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 操作符将应用另一个的默认值。

spec.clusters[].persistence.single

类型:对象

MongoDB Search 和 向量搜索 持久卷的存储配置,其中存储索引。每个搜索实例(节点)都有其独立的存储。

标量
数据类型
说明

labelSelector

字符串

storage

字符串

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

storageClass

字符串

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

MongoDBSearch 仅支持 single 持久性模式,该模式使用一个卷来存储所有数据。虽然 CRD 模式也包含 spec.clusters[].persistence.multiple 字段,但 Kubernetes Operator 不会应用它。如果您省略 persistence,Kubernetes 操作符 会将 spec.clusters[].persistence.single.storage 设置为 16G

spec.clusters[].loadBalancer

类型:对象

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

必须设立managedunmanaged 之一。

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

spec.clusters[].loadBalancer.managed

类型:对象

配置操作符管理的Envoy 负载均衡器。此字段与 spec.clusters[].loadBalancer.unmanaged 互斥。

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

spec.clusters[].loadBalancer.managed.externalHostname

类型:字符串

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

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

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

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

spec.clusters[].loadBalancer.managed.routerHostname

类型:字符串

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

如果使用带有外部分片 MongoDB 源 (spec.source.external.shardedCluster) 的托管式负载均衡器,则此字段为必填字段。Kubernetes Operator 会忽略副本集源和操作符托管的 MongoDB 的此字段。

externalHostname 不同,Kubernetes 操作符使用此值的字面值,因此该值不得包含 {shardName} 占位符。此终结点是 mongos 的分片无关入口点。

spec.clusters[].loadBalancer.managed.replicas

类型:整型

要在此 Kubernetes 集群中部署的 Envoy 代理节点数。该值必须大于或等于 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 操作符合并到操作符创建的 Envoy 部署中的覆盖。此对象包含带有 labelsannotationsmetadata 字段,以及带有 apps/v1/DeploymentSpec 对象的 spec 字段。

spec.clusters[].loadBalancer.managed.retryPolicy

类型:对象

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

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

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

类型:整型

每个请求的最大重试次数。该值必须大于或等于 1。如果省略,则默认为 2,这样每个请求共可重试三次。

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

类型:字符串

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

spec.clusters[].loadBalancer.managed.minMongotReadyReplicas

类型:整型

mongot 组(例如,一个分片的 mongot 实例)在 Envoy 代理将流量路由到它之前必须具备的就绪 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 操作符为每个分片扩展的 {shardName} 占位符,并且必须包含除占位符以外的内容。对于外部副本集源,该值不得包含 {shardName} 占位符。

spec.clusters[].shardOverrides

类型:对象数组

覆盖会将此集群入口中的特定分片大小设置为不同于集群默认的值。

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

每个覆盖都包含必须的 shardNames 列表(至少一个入口)和可选的 replicasresourceRequirementspersistencejvmFlagsstatefulSet 字段。如果您在覆盖中设置 replicasresourceRequirementspersistencejvmFlags,它们将替换指定分片的集群值。jvmFlags 仅在您将其设置为非空列表时替换集群值。Kubernetes 操作符将 statefulSet 深度合并到集群值。您未设置的字段将继承集群值。

spec.clusters[].syncSourceSelector.matchTagSets

类型:对象数组

副本集标签集的有序列表,通过副本集标签选择同步源 mongod 节点。这个 Kubernetes 操作符将列表传递给 mongot 配置。mongot 从第一个匹配的标签集选择的节点同步,并优先从节点同步。

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

spec.clusters[].jvmFlags

类型:字符串数组

传递给 mongot 进程的 Java虚拟机(JVM) 标志。每个标志必须以 -X-XX:-D 开头,不得包含空格,且只能包含字母数字字符以及 ._+:-= 字符。针对不符合这些规则的标志,Kubernetes 操作符将拒绝。

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

spec.clusters[].statefulSet

类型:对象

Kubernetes 操作符为部署 mongot 节点创建的 StatefulSet 的覆盖。此对象包含一个带有 labelsannotationsmetadata 字段,以及一个带有 apps/v1/StatefulSetSpec 对象的 spec 字段。Kubernetes 操作符始终在最后应用覆盖,因此它们会覆盖 Kubernetes 操作符计算的设置。

注意

请勿使用 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 将流量路由到正确的分片,而 SNI 取决于 TLS ClientHello。如果在此配置中省略 spec.security.tls,则 Kubernetes 操作符将无法协调。

spec.security.tls.certificateKeySecretRef.name

类型:字符串

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

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

spec.security.tls.certsSecretPrefix

类型:字符串

Kubernetes Operator 用于通过命名规范推导 TLS 秘密名称的前缀。如果设置此字段,Kubernetes 操作符 将按照以下模式查找秘密:

组件
密钥名称模式

副本集的 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 操作符 为所有拓扑结构使用每个集群一个托管的负载均衡器服务器证书。对于分片集群,此证书的 SAN 必须包括 externalHostnamerouterHostname 中的所有扩展分片主机名称。

Kubernetes 操作符按以下顺序解析 mongot 服务器证书秘密名称:

  1. 如果设置 spec.security.tls.certificateKeySecretRef.name,Kubernetes 操作符将使用该名称。

  2. 如果设置 certsSecretPrefix,Kubernetes 操作符 将使用上述表中的命名模式。

  3. 如果您未设置任何字段,Kubernetes 操作符将使用副本集部署的默认名称 {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 证书秘密中包含解密密码加密服务器私钥的密码的秘密。Secret 必须包含 keyFilePassword 密钥下的密码。如果服务器私钥未加密,请忽略此字段。

spec.logLevel

类型:字符串

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

  • TRACE

  • DEBUG

  • INFO

  • WARN

  • ERROR

如果省略,则默认值为 INFO

spec.observability.prometheus

类型:对象

针对 Prometheus 指标终结点的配置,在 mongot 中。如果您忽略此字段,Kubernetes 操作符 将在默认端口 9946 上启用指标终结点。

spec.observability.prometheus.mode

类型:字符串

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

spec.observability.prometheus.port

类型:整型

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

spec.observability.metricsForwarder

类型:对象

指标转发器的配置,这是由 Kubernetes 操作符创建的一个部署,用于抓取 mongot Prometheus 指标并将其转发给 MongoDB Ops Manager。

spec.observability.metricsForwarder.mode

类型:字符串

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

  • auto — Kubernetes Operator 为操作符管理的 MongoDB (Ops Manager 支持)源创建转发器,并且仅在设置 spec.observability.metricsForwarder.opsManager 时为外部源创建转发器。对于 MongoDBCommunity 源,Kubernetes 操作符 不会创建转发器。

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

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

如果省略,则默认值为 auto

enabledauto 模式要求启用 Prometheus 终结点 (spec.observability.prometheus)。如果您禁用终结点,Kubernetes 操作符将报告 Invalid 指标转发器状态。

spec.observability.metricsForwarder.resourceRequirements

类型core/v1/ResourceRequirements

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

spec.observability.metricsForwarder.deployment

类型:对象

Kubernetes 操作符合并到操作符创建的指标转发器部署中的覆盖。此对象包含带有 labelsannotationsmetadata 字段,以及带有 apps/v1/DeploymentSpec 对象的 spec 字段。

spec.observability.metricsForwarder.opsManager

类型:对象

指标转发器发送指标至的 MongoDB Ops Manager 项目和凭证。如果省略,Kubernetes 操作符将从源 MongoDB 资源的连接配置中获取项目和凭证。请为外部 MongoDB 源设置此字段,在不存在源 MongoDB 资源的情况下使用。

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

重要

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

spec.autoEmbedding

类型:对象

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

spec.autoEmbedding.embeddingModelAPIKeySecret.name

类型:字符串

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

仅当 spec.autoEmbedding.providerEndpoint 指向操作符管理的自托管 Voyage AI 嵌入服务时,您才可以省略 embeddingModelAPIKeySecret。否则,Kubernetes 操作符需要它。

spec.autoEmbedding.providerEndpoint

类型:字符串

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

spec.featureFlags

类型:对象

mongot 的功能标志。如果将标志设置为 true,则 Kubernetes Operator 会将其渲染到 mongot 配置中。如果您省略 featureFlags 对象或单个标志,则应用该标志的模式默认值(enableOverloadRetrySignaltrue)。

spec.featureFlags.enableOverloadRetrySignal

类型:布尔值

启用 mongot 超负载重试信号。如果启用此标志,mongot 会通过 gRPC RESOURCE_EXHAUSTED 响应向上游代理(如操作符管理的 Envoy 负载均衡器)发送负载分流信号。代理之后会在另一个 mongot 实例上重试该请求。

如果省略,则默认值为 true

spec.version

类型:字符串

mongodb-search Docker 图像的版本。如果省略,Kubernetes 操作符 会使用其包含的默认 MongoDB Search 版本。您可以显式设置版本,以防止升级 Kubernetes 操作符 时自动升级。

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

status.phase

类型:字符串

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

status.message

类型:字符串

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

status.lastTransition

类型:字符串

status.phase 最后过渡的时间戳。

status.observedGeneration

类型:整型

Kubernetes 操作符最后处理的 MongoDBSearch 资源的生成。

status.warnings

类型:字符串数组

Kubernetes 操作符报告的资源警告。

status.version

类型:字符串

Kubernetes 操作符 协调的 MongoDB Search 版本 (mongot)。

status.resourcesNotReady

类型:对象数组

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

status.pvc

类型:对象数组

mongot StatefulSets 的持久卷定义状态。每个条目报告卷定义所属的 phasestatefulsetName

status.loadBalancer

类型:对象

操作符托管的负载均衡器 (Envoy) 的状态。仅在设置 spec.clusters[].loadBalancer.managed 时才会出现此字段。对于多集群部署,Kubernetes 操作符会报告所有集群的 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

类型:字符串

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

status.clusters

类型:对象数组

部署拓扑结构中每个集群的状态。 Kubernetes Operator 在 spec.clusters[] 中为每个集群报告一个条目,因此单集群部署只有一个条目。每个条目独立报告该集群的搜索、负载负载均衡器和指标转发器阶段,因此您可以将问题定位到特定的集群和组件。

status.clusters[].name

类型:字符串

成员集群的名称。在单集群部署中为空。

status.clusters[].index

类型:整型

此集群的 spec.clusters[] 固定索引。将每个状态条目映射回其规范条目,与列表顺序无关。

status.clusters[].search

类型:字符串

此集群的 mongot StatefulSet 中的最差阶段。对于副本集集源,集群运行一个 mongot StatefulSet;对于分片的源,集群为每个分片运行一个 StatefulSet。值可以是 PendingRunningFailed

status.clusters[].searchMessage

类型:字符串

search 不是 Running 时,带有原因的人类可读消息。

status.clusters[].loadBalancer

类型:字符串

此集群的托管负载负载均衡器(Envoy) 阶段。如果未配置托管负载负载均衡器,则为空。值可以是 PendingRunningFailed

status.clusters[].loadBalancerMessage

类型:字符串

loadBalancer 不是 Running 时,带有原因的人类可读消息。

status.clusters[].metricsForwarder

类型:字符串

此集群的Ops Manager指标转发器阶段。未启用指标转发器时为空。值可以是 PendingRunningFailed

status.clusters[].metricsForwarderMessage

类型:字符串

metricsForwarder 不是 Running 时,带有原因的人类可读消息。