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

MongoDB搜索和向量搜索设置

您可以使用Kubernetes Operator 的MongoDB控制器将MongoDB Search 和 向量搜索 与MongoDB 8.2 或更高版本一起部署。

以下示例显示了MongoDB Search 和 Vector Search部署的 spec对象内的设置。要学习;了解有关这些设置的更多信息,请参阅必需设置可选设置。

注意

此示例不是可用配置。它包含所有可用字段,并填充了示例值以供参考。某些字段互相排斥,某些字段优先于其他字段(例如,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

本部分介绍部署MongoDB Search 和 Vector Search资源所需的设置。如果您在自定义资源定义 (CRD) 中仅定义必需设置,则 Kubernetes 操作符的 MongoDB 控制器将使用所有可选设置的默认值来配置 MongoDBSearch。

apiVersion

类型:字符串

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

kind

类型:字符串

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

metadata.namespace

类型:字符串

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

metadata.name

类型:字符串

MongoDBSearch 资源的唯一标识符。名称必须是有效的 Kubernetes DNS 子域名称。使名称简短。Kubernetes 操作符从中获取其创建的 Kubernetes 资源的名称,例如 {name}-search-{clusterIndex}-{shardName}。Kubernetes 操作符验证每个生成的名称是否符合 Kubernetes DNS 对标签的 63 个字符和对子域名称的 253 个字符的限制。

spec.clusters

类型:对象数组

每个 Kubernetes 集群的 MongoDBSearch 部署配置。此字段为必填字段,必须包含至少一个条目和最多 50 个条目:单集群部署的一个条目,或多集群部署中运行 mongot 个 Pod 的每个 Kubernetes 集群的一个条目。有关完整字段参考(包括 nameindex),请参阅 spec.集群。

本节介绍MongoDB搜索和向量搜索资源的可选设置。如果省略可选设置并在 CRD 中仅定义必需设置,Kubernetes 操作符的 MongoDB 控制器将使用所有可选设置的默认值来配置 MongoDBSearch。

spec.source

类型:对象

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

  • MongoDB 是外部的

  • MongoDB 与 MongoDBSearch 具有不同的名称

MongoDBSearch资源必须始终连接到MongoDB 部署。如果使用带有 MongoDBMongoDBCommunity CRD 的Kubernetes 操作符 进行部署,并且 spec.source 为空,则Kubernetes 操作符 使用基于 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 操作符 同时支持副本集和分片的集群。不能有多个 MongoDBSearch资源引用同一 MongoDBMongoDBCommunity资源。如果指定其他名称,则必须明确点要启用MongoDB Search 和 向量搜索 的 MongoDBMongoDBCommunity

如果您引用分片集群MongoDB资源, Kubernetes Operator 会自动发现分片拓扑结构(分片名称、副本集成员、mongos 路由器)并自动创建每个分片的 mongot StatefulSet。您无需执行任何其他外部配置。

仅当您的 MongoDBMongoDBCommunity资源部署在同一Kubernetes集群中并且与 MongoDBSearch资源位于同一命名空间中时,才使用此字段。如果设立此字段, Kubernetes 操作符 会自动:

  • 设置正确的数据库连接字符串。

  • 通过设置必要的参数来重新配置MongoDB 数据库部署,以启用搜索功能,并配置搜索Pod 的地址。

如果数据库部署在 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:
clientCertificateSecretRef:
name: mongot-x509-client-cert
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 键下包含密码。如果私钥未加密,请忽略此字段。

只有在配置与外部MongoDB 部署的连接时才需要以下设置。

spec.source.external

类型:对象

描述外部数据源的设置。此对象描述了 MongoDB Search 和向量搜索资源连接到外部 MongoDB 的设置。仅在要连接到未使用 Kubernetes 操作符 部署的外部 MongoDB 时才指定这些设置。如果指定这些设置,它们将优先于 spec.source.mongodbResourceRef。如果使用 Kubernetes 操作符 在同一集群中安装 MongoDB,则这些设置是可选的。

spec.source.external.keyfileSecretRef

类型:对象

包含 mongod 密钥文件的秘密,mongot 使用该密钥文件连接到外部 MongoDB 部署。

spec.source.external.keyfileSecretRef.name

类型:字符串

包含密钥文件的 Secret 名称。如果设置 spec.source.external.keyfileSecretRef,则必须指定此字段。

spec.source.external.keyfileSecretRef.key

类型:字符串

密钥文件在秘钥中的存储密钥。此字段为可选字段。

spec.source.external.hostAndPorts

类型:字符串数组

外部副本集的主机名和端口列表。这是MongoDB副本集的托管种子列表。mongot 以副本集模式连接数据库,并使用 db.hello() 获取所有其他节点的列表。

此字段与 spec.source.external.shardedCluster 互斥。使用 hostAndPorts 作为副本集源,使用 shardedCluster 作为分片集群源。

例子

hostAndPorts:
- mdbc-rs-0.my-external-domain.example.com:27017
- mdbc-rs-1.my-external-domain.example.com:27017
- mdbc-rs-2.my-external-domain.example.com:27017
spec.source.external.tls

类型:对象

mongot 连接到外部MongoDB 数据库时必须使用的 TLS 设置。

spec.source.external.tls.ca.name

类型:字符串

包含颁发 mongod 节点使用的 TLS 证书的证书颁发机构的可信链的 ConfigMap 名称。

例子

spec:
source:
external:
tls:
ca:
name: trusted-ca

您必须在此 ConfigMap 中的 ca.crt 密钥下指定证书(或证书链)。

例子

kind: ConfigMap
apiVersion: v1
metadata:
name: trusted-ca
data:
ca.crt: |
-----BEGIN CERTIFICATE-----
MIIDBTCCAe2gAwIBAgIIH3EOUAGAsx0wDQYJKoZIhvcNAQELBQAwFTETMBEGA1UE
[...]
U/4rN8Ias/FONYFRtGfs9uXHmo2MP04BF+9ED2dlbNDUbat+6XCozLJj98nI4VEi
qaV3JrVFHTgN
-----END CERTIFICATE-----

只有在配置与外部MongoDB分片集群的连接时才需要以下设置。它们扩展了现有的 spec.source.external 设置。

注意

spec.source.external.hostAndPorts (对于副本集)和 spec.source.external.shardedCluster 是互斥的。仅指定其中之一。

spec.source.external.shardedCluster

类型:对象

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

仅当MongoDB分片集群部署在Kubernetes外部且不受Kubernetes Operator托管,才使用此选项。对于使用 MongoDB CRD 部署的操作符托管的集群,请改用 spec.source.mongodbResourceRef。Kubernetes Operator 自动发现分片拓扑结构。

例子

spec:
source:
external:
shardedCluster:
router:
hosts:
- "mongos1.external:27017"
- "mongos2.external:27017"
shards:
- shardName: "shard-0"
hosts:
- "shard0-node1.external:27018"
- "shard0-node2.external:27018"
- shardName: "shard-1"
hosts:
- "shard1-node1.external:27018"
- "shard1-node2.external:27018"
spec.source.external.shardedCluster.router

类型:对象

外分片集群的 mongos(路由器)实例的配置。

spec.source.external.shardedCluster.router.hosts

类型:字符串数组

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

例子

router:
hosts:
- "mongos1.external:27017"
- "mongos2.external:27017"
spec.source.external.shardedCluster.shards

类型:对象数组

外部MongoDB 集群中所有分片的列表。每个条目描述一个分片的副本集。Kubernetes 操作符 为每个分片创建一个 mongot StatefulSet,其中每个 StatefulSet 包含 spec.clusters[].replicas 中指定数量的 Pod。指定至少一个分片条目。

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

类型:字符串

分片的逻辑名称。Kubernetes 操作符 使用此名称来命名Kubernetes资源(StatefulSet、Services、Secret)。该值可以与MongoDB分片名称不同。

命名约束:

  • 在所有分片中必须是唯一的。

  • 必须符合 Kubernetes DNS 标签名称规则 (RFC 1123),该规则允许使用小写字母数字字符和连字符 (-),并要求名称以字母数字字符开头和结尾。不允许使用句点 (.) 和下划线 (_)。最大长度为 63 个字符。

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

例子

shards:
- shardName: "shard-0"
hosts:
- "shard0-node1.external:27018"
spec.source.external.shardedCluster.shards[*].hosts

类型:字符串数组

此分片的 mongod副本集的终结点列表,采用 host:port 格式。mongot 实例从这些托管复制数据。至少指定一个条目。

每个副本集(分片)都有自己的 mongot 实例群组,这些实例仅从该副本集获取数据。不同的分片从不股票相同的 mongot 实例。

例子

shards:
- shardName: "shard-0"
hosts:
- "shard0-node1.external:27018"
- "shard0-node2.external:27018"
- "shard0-node3.external:27018"

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

spec.clusters

类型:对象数组

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

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

例子

spec:
clusters:
- {}

对于多集群部署,请为运行 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 操作符将 StatefulSet 扩展到零个节点,并保留 MongoDBSearch 资源及其他 Kubernetes 资源。

如果省略,则默认值为 1

例子

spec:
clusters:
- replicas: 2
spec.clusters[].resourceRequirements

类型core/v1/ResourceRequirements

mongodb-search容器可以请求和限制使用的 CPU 和内存。我们建议使用此字段自定义资源分配,而不是使用 spec.clusters[].statefulSet 覆盖。

如果您没有覆盖 spec.clusters[].jvmFlags 中的Java虚拟机(JVM)堆大小, Kubernetes 操作符会将默认堆大小 (-Xmx) 设置为 mongot 容器内存请求的 50%。相应地调整 spec.clusters[].resourceRequirements 以控制 Pod 资源和Java虚拟机(JVM)堆大小。

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

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

类型:对象

mongodb-search容器可消耗的资源(CPU和内存)的上限。默认情况下,未设置任何限制。如果省略,则不会限制该节点,因此可能会使用节点上的所有资源。我们建议根据工作负载设置限制。

spec.clusters[].resourceRequirements.requests

类型:对象

mongodb-search 容器请求的 CPU 和内存量。如果您仅指定 cpumemory 之一,Kubernetes 操作符 将应用另一个的默认值。如果省略,Kubernetes 操作符 将使用以下默认值:

requests:
cpu: 2
memory: 4Gi
spec.clusters[].persistence.single

类型:对象

MongoDB Search 和 Vector Search 持久卷的存储配置,其中存储MongoDB Search 和 Vector Search 索引。每个搜索实例(pod) 都有自己独立的存储来维护索引,该存储不与MongoDB 数据库共享。只有索引元数据(定义)存储在数据库中。

标量
数据类型
说明

labelSelector

字符串

storage

字符串

要安装的 持久卷的最小大小。此值以整数表示,后跟采用 JEDEC 表示法的存储单位。

默认值为16G

例如,如果 副本集 需要 60 GB 的存储空间,则将该值设置为 60G

storageClass

字符串

持久卷声明中指定的存储类型。您可以在此 对象 规范中使用此存储类型之前,将其创建为 StorageClass 对象。

确保将StorageClass reclaimPolicy设立为Retain。这可确保在删除持久卷声明时保留数据。

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

spec.clusters[].loadBalancer

类型:对象

mongod(或 mongos)和 mongot 之间实现 L7 负载平衡的配置。如果 spec.clusters[].replicas 大于 1,则此字段为必填项。如果 spec.clusters[].replicas1,则此字段为可选字段。您甚至可以为单个 mongot实例配置负载负载均衡器,为以后扩展做好准备。

必须设立managedunmanaged 之一。

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

负载负载均衡器会影响 mongod 客户端看到哪些 TLS 证书以及这些证书必须包含哪些主机名:

  • 如果没有负载负载均衡器mongod 会直接连接到 mongot。向 mongod 提供的 TLS 证书是 mongot 自己的证书。如果MongoDB 集群位于Kubernetes外部,则 mongot 服务将在外部域上公开。您必须在 mongot TLS 证书的 SAN(主题备用名称)字段中包含该外部域。

  • 使用托管负载均衡器(spec.clusters[].loadBalancer.managed),Envoy 代理是唯一直接连接到 mongot 的组件。Envoy 代理通过内部服务 FQDN 访问 mongot

    • 副本集: <name>-search-<clusterIndex>-svc.<ns>.svc.cluster.local

    • 分片集群: <name>-search-<clusterIndex>-<shard>-svc.<ns>.svc.cluster.local

    我们建议您将这些服务 FQDN 包含在 mongot TLS 证书的 SAN 字段中。操作符管理的 Envoy 代理目前仅针对证书权限验证 mongot 证书,不匹配 SAN 主机名。外部 mongod 进程会看到 Envoy 代理的 TLS 证书,因此请将外部域名包含在 Envoy 证书的 SAN 中,而不是 mongot 证书中。

提示

即使您最初部署单个 mongot Pod,也要启用托管负载负载均衡器。负载负载均衡器就位后,如果您稍后扩展spec.clusters[].replicas,TLS 证书中的域将保持稳定,因为负载负载均衡器已经存在于 mongodmongot 之间。

spec.clusters[].loadBalancer.managed

类型:对象

配置 Operator 托管的Envoy负载负载均衡器。Kubernetes 操作符 通过正确的路由、mTLS 和HTTP/2+gRPC流固定来部署和托管 Envoy 代理。将此字段设置为空对象({}) 以使用默认值。

此字段与 spec.clusters[].loadBalancer.unmanaged 互斥。

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

例子

spec:
clusters:
- loadBalancer:
managed: {}
spec.clusters[].loadBalancer.managed.externalHostname

类型:字符串

Envoy 代理期望用于传入请求的 SNI 匹配的主机名。Kubernetes Operator 使用此值来配置路由规则,以匹配传入 mongod 连接中的 TLS SNI字段。Envoy TLS服务器证书必须在其 SAN(主题备用名称)字段中包含此主机名。

对于分片集群源,该值必须包含 {shardName} 占位符,Kubernetes 操作符会按分片进行扩展。每个分片都有自己的主机名,Envoy TLS 服务器证书必须在其 SAN 中包含所有扩展的分片主机名。您可以使用通配符证书以单个证书覆盖所有分片,并在添加分片时避免重新颁发。对于副本集源,请勿使用 {shardName} 占位符。

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

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

例子

# Replica set with external MongoDB
spec:
clusters:
- loadBalancer:
managed:
externalHostname: "search.apps.example.com"
# Sharded cluster with external MongoDB
spec:
clusters:
- loadBalancer:
managed:
externalHostname: "{shardName}.search.example.com"
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 的分片无关入口点。

在多集群部署中,每个集群条目通常使用不同的值。然而,Kubernetes 操作符允许跨集群共享一个值,例如,如果一个跨越可用区的故障转移代理前端接入了多个集群的 Envoy 代理。

例子

spec:
clusters:
- loadBalancer:
managed:
externalHostname: "{shardName}.search.example.com"
routerHostname: "search-router.example.com:27028"
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:
resourceRequirements:
requests:
cpu: "200m"
memory: "256Mi"
limits:
cpu: "1"
memory: "1Gi"
spec.clusters[].loadBalancer.managed.deployment

类型:对象

覆盖 Kubernetes Operator 合并到 Operator 创建的 Envoy 部署中的操作符。遵循与MongoDB资源上的 spec.statefulSet 相同的约定。如果省略, Kubernetes 操作符 将使用 Envoy 部署的默认值。

该对象包含两个字段:

  • metadata — 包含 Kubernetes 操作符合并到 Envoy 部署元数据中的 labelsannotations 字段。

  • specapps/v1/DeploymentSpec对象。Kubernetes 操作符 将这些覆盖合并到 Envoy 部署规范中。

例子

spec:
clusters:
- loadBalancer:
managed:
deployment:
spec:
template:
spec:
nodeSelector:
kubernetes.io/os: linux
spec.clusters[].loadBalancer.managed.retryPolicy

类型:对象

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

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

例子

spec:
clusters:
- loadBalancer:
managed:
retryPolicy:
numRetries: 2
perTryTimeout: "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 操作符托管 MongoDB 部署(使用 spec.source.mongodbResourceRef),则 Kubernetes 操作符会将此值作为 mongotHostsearchIndexManagementHostAndPort 写入 mongod 配置。如果 MongoDB 是外部的,则您可以使用相同值自行配置 mongod 参数。

对于外部分片集群源,该值必须包含 Kubernetes 操作符为每个分片扩展的 {shardName} 占位符,并且必须包含除占位符以外的内容。对于外部副本集源,该值不得包含 {shardName} 占位符。

例子

# Replica set example
spec:
clusters:
- loadBalancer:
unmanaged:
endpoint: "search-lb.corp.example.com:443"
# Sharded cluster example
spec:
clusters:
- loadBalancer:
unmanaged:
endpoint: "{shardName}-lb.corp.example.com:443"
spec.clusters[].shardOverrides

类型:对象数组

覆盖会导致此集群入口内的特定分片大小与集群默认值不同。使用此字段为单个分片提供比集群其他部分更多或更少的 mongot 副本、资源或存储。

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

如果在覆盖中设置 replicasresourceRequirementspersistencejvmFlags,它们将替换指定分片的集群值。Kubernetes 操作符将 statefulSet 深度合并到集群值。未设置的字段将继承集群值。

例子

spec:
clusters:
- replicas: 2
shardOverrides:
- shardNames:
- shard-0
replicas: 3
resourceRequirements:
requests:
cpu: "4"
memory: 8Gi
spec.clusters[].shardOverrides[*].shardNames

类型:字符串数组

此集群入口中应用覆盖的分片名称。此字段为必填字段,且必须包含至少一个入口。

spec.clusters[].shardOverrides[*].replicas

类型:整型

替换指定分片的集群 mongot 副本计数。0 的值会将这些分片的 mongot 个实例置于脱机状态。

spec.clusters[].shardOverrides[*].resourceRequirements

类型core/v1/ResourceRequirements

替换集群对指定分片的 CPU 和内存请求和限制。

spec.clusters[].shardOverrides[*].persistence

类型:对象

替换指定分片的集群持久卷配置。使用与 spec.clusters[].persistence 相同的模式。

spec.clusters[].shardOverrides[*].statefulSet

类型:对象

命名分片的 StatefulSet 覆盖。与其他覆盖字段不同,Kubernetes 操作符会将此值深度合并到集群的 spec.clusters[].statefulSet 值,而不是替换它。

spec.clusters[].shardOverrides[*].jvmFlags

类型:字符串数组

如果将其设置为非空列表,则替换集群用于指定分片的 spec.clusters[].jvmFlagsspec.clusters[].jvmFlags 的格式规则也适用于此字段。

spec.clusters[].syncSourceSelector

类型:对象

选择此集群入口中的 mongot 实例从哪些 mongod 节点同步数据。

spec.clusters[].syncSourceSelector.matchTagSets

类型:对象数组

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

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

例子

spec:
clusters:
- syncSourceSelector:
matchTagSets:
- region: us-east-1
workload: search
- {}
spec.clusters[].jvmFlags

类型:字符串数组

传递给 mongot进程的Java虚拟机(JVM)标志。Kubernetes Operator 使用 --jvm-flags "<all flags space-separated>"mongot初创企业命令中包含未经修改的标志。

每个标志必须以 -X-XX:-D 开头,不得包含空格,且只能包含字母数字字符以及 ._+:-= 字符。Kubernetes 操作符拒绝不符合这些规则的标志。

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

如果您提供自己的 -Xms-Xmx 值, Kubernetes 操作符 将使用它们并且不会覆盖这些值。Kubernetes Operator 始终将您提供的标志附加在 Operator 计算的标志之后。

要学习;了解更多信息,请参阅mongot的硬件大小调整

例子

spec:
clusters:
- jvmFlags:
- -Xms2g
- -Xmx2g
spec.clusters[].statefulSet

类型:对象

Kubernetes 操作符为部署 mongot 节点而创建的 StatefulSet 的覆盖。Kubernetes 操作符始终最后应用覆盖,因此它们会覆盖 Kubernetes 操作符计算的设置。

该对象包含两个字段:

  • metadata — 包含 Kubernetes 操作符合并到 StatefulSet 元数据中的 labelsannotations 字段。

  • specapps/v1/StatefulSetSpec对象。Kubernetes 操作符将这些覆盖合并到 StatefulSet 规范中。

注意

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

spec.clusters[].advancedMongotConfigs

类型:对象

此集群入口的高级 mongot 设置。Kubernetes Operator 会在 mongot 配置文件的 advancedConfigs 密钥下逐字渲染该值,而不会读取或修改该值。此字段不会影响 Kubernetes 操作符在 mongot 配置中的其他位置生成的设置。

仅对于 MongoDBSearch 资源未作为一级字段公开的 mongot 设置使用此字段。

spec.security

类型:对象

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

spec.security.tls

类型:对象

mongot TLS 设置。如果省略,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.io/tls(由 cert-manager 颁发),也可以手动创建。

Kubernetes Operator 仍支持将此字段用于副本集部署,以实现向后兼容。但是:

  • 对于分片集群部署, Kubernetes 操作符 在验证期间拒绝此字段。请改用 spec.security.tls.certsSecretPrefix,因为单个密钥引用无法涵盖每个分片的证书。

  • 如果同时指定 certificateKeySecretRefcertsSecretPrefix,则 certificateKeySecretRef 优先进行副本集部署。

对于新部署,甚至对副本集使用 spec.security.tls.certsSecretPrefix

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

其中:

  • {name} 是 MongoDBSearch资源的 metadata.name

  • {clusterIndex}spec.clusters[].index 的值(对于未设置索引的单集群部署,值为 0

  • {shardName} 的值是 spec.source.external.shardedCluster.shards[*].shardName

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

注意

对于分片集群部署,Kubernetes 操作符拒绝 certificateKeySecretRef,因为单个秘钥引用无法涵盖每分片证书。使用 certsSecretPrefix,或不设置任何字段并创建遵循默认每分片模式和默认命名的负载均衡器证书秘钥的秘钥。

例子

spec:
security:
tls:
certsSecretPrefix: my-prefix
spec.security.tls.keyFilePasswordSecretRef

类型:对象

在 TLS 证书秘密中包含解密密码加密服务器私钥的密码的秘密。Secret 必须包含 keyFilePassword 密钥下的密码。如果服务器私钥未加密,请忽略此字段。

spec.logLevel

类型:字符串

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

  • TRACE

  • DEBUG

  • INFO

  • WARN

  • ERROR

如果省略,则默认值为 INFO

spec.observability

类型:对象

MongoDBSearch 资源的可观测性设置,包括 mongot 中的 Prometheus 指标终结点和 MongoDB Ops Manager 的指标转发器。

spec.observability.prometheus

类型:对象

针对 Prometheus 指标终结点的配置,在 mongot 中。如果您省略此字段,Kubernetes 操作符将在默认端口 9946 上启用指标终结点。要禁用终结点,请将 spec.observability.prometheus.mode 设置为 disabled。要更改端口,请将 spec.observability.prometheus.port 设置为。

spec.observability.prometheus.mode

类型:字符串

mongot 中启用或禁用 Prometheus 指标终结点。值可以是以下值之一:

  • enabled

  • disabled

如果省略,则默认值为 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 Operator 将使用以下默认值:

requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 250m
memory: 256Mi
spec.observability.metricsForwarder.deployment

类型:对象

Kubernetes 操作符(Operator)合并到操作符所创建的指标(metrics)转发器部署(Deployment)中的覆盖配置。遵循与 spec.clusters[].loadBalancer.managed.deployment 相同的约定:一个包含 labelsannotationsmetadata 字段,以及一个包含 apps/v1/DeploymentSpec 对象的 spec 字段。

spec.observability.metricsForwarder.opsManager

类型:对象

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

如果设置此字段,则必须同时设置 agentCredentialsprojectConfigMapRef

spec.observability.metricsForwarder.opsManager.agentCredentials.name

类型:字符串

包含指标转发器用于身份验证的 MongoDB Ops Manager 代理 API 密钥的秘密名称。

spec.observability.metricsForwarder.opsManager.projectConfigMapRef.name

类型:字符串

包含 MongoDB Ops Manager 项目配置的 ConfigMap 名称,指标指标转发器将指标发送到该 ConfigMap。

重要

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

spec.autoEmbedding

类型:对象

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

spec.autoEmbedding.embeddingModelAPIKeySecret

类型:对象

嵌入模型提供商API密钥的配置。要启用自动嵌入,您必须创建两个键,一个用于在索引时为集合中的数据生成嵌入,另一个用于在查询时为查询文本生成嵌入。如果您还没有密钥,我们建议您从两个Atlas项目创建密钥。要学习;了解有关从Atlas用户界面为Atlas项目创建密钥的更多信息,请参阅管理API密钥。

spec.autoEmbedding.embeddingModelAPIKeySecret.name

类型:字符串

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

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

spec.autoEmbedding.providerEndpoint

类型:字符串

用于生成嵌入的嵌入模型终结点URL。值会有所不同,具体取决于您是从Atlas用户界面创建密钥(推荐)还是直接从嵌入服务创建密钥 (Voyage AI)。对于通过以下方式创建的密钥:

  • Atlas用户界面,值为 https://ai.mongodb.com/v1/embeddings(默认)

  • Voyage AI,值为 https://api.voyageai.com/v1/embeddings

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

此字段在 PHASE 列下的 kubectl get 输出中可见。

status.message

类型:字符串

可读性消息,其中包含当前状态的详细信息,例如资源处于 PendingFailed 阶段的原因。

status.lastTransition

类型:字符串

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

status.observedGeneration

类型:整型

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

status.warnings

类型:字符串数组

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

status.version

类型:字符串

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

此字段在 VERSION 列下的 kubectl get 输出中可见。

status.resourcesNotReady

类型:对象数组

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

status.pvc

类型:对象数组

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

status.loadBalancer

类型:对象

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

status.loadBalancer.phase

类型:字符串

托管负载负载均衡器的当前阶段。可能的值包括 PendingRunningFailed。Kubernetes 操作符 独立于主 status.phase 报告此阶段,因此您可以单独监控Envoy部署。

此字段也显示在 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

类型:字符串

status.clusters[].search 不是 Running 时,带有原因的人类可读消息。

status.clusters[].loadBalancer

类型:字符串

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

status.clusters[].loadBalancerMessage

类型:字符串

status.clusters[].loadBalancer 不是 Running 时,带有原因的人类可读消息。

status.clusters[].metricsForwarder

类型:字符串

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

status.clusters[].metricsForwarderMessage

类型:字符串

status.clusters[].metricsForwarder 不是 Running 时,带有原因的人类可读消息。

例子

$ kubectl get mdbs
NAME PHASE VERSION LOADBALANCER METRICSFORWARDER AGE
mdb-rs-ext-lb-search Running 1.70.1 Running Running 14m