MongoDBSearch 自定义资源可以在 Kubernetes 中与 MongoDB 数据库部署一起部署和配置 MongoDB Search 和向量搜索节点。MongoDBSearch 资源部署 mongot 进程,通过同步 MongoDB 部署中的数据提供全文和语义搜索功能。
要了解有关部署 MongoDB Search 和向量搜索的更多信息,请参阅部署 MongoDB Search 和向量搜索。
例子
以下示例显示了MongoDBSearch自定义资源的资源规范:
注意
此示例不是可用配置。它包含所有可用字段,并填充了示例值以供参考。某些字段互相排斥,某些字段优先于其他字段(例如,source.external优先于source.mongodbResourceRef)。有关有效组合,请参阅下面的字段说明。
1 spec: 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 资源设置
本部分介绍必须用于所有MongoDBSearch资源的设置。
apiVersion类型:字符串
MongoDB Kubernetes资源模式的版本。将值设置为
mongodb.com/v1。
kind类型:字符串
要创建的 MongoDB Kubernetes 资源类型。 将其设置为
MongoDBSearch。
metadata.namespace类型:字符串
应在其中创建
MongoDBSearch资源的命名空间。要利用MongoDBSearch和MongoDB或MongoDBCommunity资源的自动配置,应在与MongoDB或MongoDBCommunity资源相同的命名空间中创建MongoDBSearch资源。
metadata.name类型:字符串
MongoDBSearch资源的唯一标识符。名称必须是有效的 Kubernetes DNS 子域名称。使名称简短。Kubernetes 操作符从其中衍生它创建的 Kubernetes 资源名称,例如{name}-search-{clusterIndex}-{shardName}。Kubernetes 操作符验证每个生成的名称都符合 Kubernetes DNS 对标签的 63 个字符和对子域名称的 253 个字符的限制。spec.clusters类型:对象数组
Per-Kubernetes-cluster deployment configuration for the
MongoDBSearchresource. This field is required and must contain at least one entry and at most 50 entries: one entry for a single-cluster deployment, or one entry for each Kubernetes cluster that runsmongotpods in a multi-cluster deployment. For the full field reference, includingnameandindex, see Cluster Deployment Settings.
可选的MongoDBSearch 资源设置
MongoDBSearch自定义资源可以使用以下设置:
数据源设置
spec.source类型:对象
描述
mongot的MongoDB源的设置。源可以是副本集或分片集群。在以下情况下需要此设置:MongoDB是外部的MongoDB的名称不同于MongoDBSearch
MongoDBSearch资源必须始终连接到一个 MongoDB 部署。如果使用 Kubernetes 操作符和MongoDB或MongoDBCommunityCRD 进行部署,并且spec.source为空,Kubernetes 操作符将根据metadata.name使用以下方式在 Kubernetes 中查找数据库:在同一命名空间中查找与
MongoDBSearch中为metadata.name设立的名称相同的MongoDB或MongoDBCommunity资源。从
<MongoDBSearch.metadata.name>-<username>-password密钥中查找mongot用户的密码密钥,对于默认用户名,可产生<MongoDBSearch.metadata.name>-search-sync-source-password。
spec.source.mongodbResourceRef.name类型:字符串
要与此 MongoDB Search 和 向量搜索 资源关联的
MongoDB或MongoDBCommunity资源的名称。Kubernetes 操作符 支持副本集和分片集群。您不能有多于一个引用相同MongoDB或MongoDBCommunity资源的MongoDBSearch资源。仅当您的
MongoDB或MongoDBCommunity资源部署在同一 Kubernetes 集群中且与MongoDBSearch资源位于同一命名空间时,才使用此字段。如果您的数据库部署在 Kubernetes 外部或位于不同的命名空间中,请使用spec.source.external配置与数据库的连接。如果您同时设置了这两个字段,则spec.source.external会优先。如果省略,Kubernetes 操作符 将查找与此
MongoDBSearch资源同名的MongoDB或MongoDBCommunity资源。spec.source.mongodbResourceRef.namespace类型:字符串
spec.source.mongodbResourceRef.name引用的MongoDB或MongoDBCommunity资源的命名空间。Kubernetes 操作符当前忽略此字段,并始终使用MongoDBSearch资源的命名空间。不支持跨命名空间引用。如果您的数据库在不同的命名空间中,请使用spec.source.external。spec.source.username类型:字符串
Username to use to authenticate
mongotwithmongod. The specified user must have thesearchCoordinatorrole. If omitted, the Kubernetes Operator assumes the username issearch-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。
x509 身份验证设置
spec.source.x509类型:对象
为
mongot同步源连接配置 x509客户端证书身份验证。如果设立此字段,则mongot使用 x509 而不是用户名和密码对MongoDB进行身份验证。该字段与
spec.source.passwordSecretRef、spec.source.username和spec.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键下包含密码。如果私钥未加密,请忽略此字段。
SCRAM 客户端证书设置
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类型:对象
描述外部数据源的设置。仅当您想连接到未使用 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 操作符 为每个分片创建一个
mongotStatefulSet。至少指定一个分片条目。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 个条目。所有大小调整和放置设置,例如replicas、loadBalancer、resourceRequirements、persistence、jvmFlags和statefulSet,都存在于clusters条目中。这些设置没有顶级等效项。对于单集群部署,请指定一个条目。您可以省略
name和index。对于多集群部署,请为运行
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 集群的稳定整数标识符。该值必须在
0和999之间,并且在所有条目中必须是唯一的。如果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 和内存量。如果您仅指定cpu或memory之一,Kubernetes 操作符将应用另一个的默认值。spec.clusters[].persistence.single类型:对象
MongoDB Search 和 向量搜索 持久卷的存储配置,其中存储索引。每个搜索实例(节点)都有其独立的存储。
MongoDBSearch仅支持single持久性模式,该模式为所有数据使用一个卷。尽管 CRD 模式也包含spec.clusters[].persistence.multiple字段,但 Kubernetes 操作符不会应用它。如果省略persistence,Kubernetes Operator 将spec.clusters[].persistence.single.storage设置为16G。
负载均衡
spec.clusters[].loadBalancer类型:对象
L7 在
mongod(或mongos)与mongot之间负载均衡的配置。如果spec.clusters[].replicas大于1,则此字段为必填字段。必须设立
managed或unmanaged之一。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 部署中的覆盖。此对象包含带有
labels和annotations的metadata字段,以及带有 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 会将此值作为mongotHost和searchIndexManagementHostAndPort写入mongod配置。对于外部分片集群源,该值必须包含 Kubernetes 操作符为每个分片扩展的
{shardName}占位符,并且必须包含除占位符以外的内容。对于外部副本集源,该值不得包含{shardName}占位符。
每分片覆盖
spec.clusters[].shardOverrides类型:对象数组
覆盖会将此集群入口中的特定分片大小设置为不同于集群默认的值。
您只能将此字段与外部分片集群源 (
spec.source.external.shardedCluster) 一起使用。您引用的每个分片名称都必须存在于spec.source.external.shardedCluster.shards[*].shardName,并且每个分片在每个集群条目中最多可以被覆盖一次。每个覆盖都包含必须的
shardNames列表(至少一个入口)和可选的replicas、resourceRequirements、persistence、jvmFlags和statefulSet字段。如果您在覆盖中设置replicas、resourceRequirements、persistence或jvmFlags,它们将替换指定分片的集群值。jvmFlags仅在您将其设置为非空列表时替换集群值。Kubernetes 操作符将statefulSet深度合并到集群值。您未设置的字段将继承集群值。
同步源选择
spec.clusters[].syncSourceSelector.matchTagSets类型:对象数组
副本集标签集的有序列表,通过副本集标签选择同步源
mongod节点。这个 Kubernetes 操作符将列表传递给mongot配置。mongot从第一个匹配的标签集选择的节点同步,并优先从节点同步。每个条目都是标签名称到标签值的映射。空文档 (
{}) 匹配任何节点,因此,如果没有早期标签集匹配,您可以添加尾随{}条目作为匹配任何回退。您最多可以指定 50 条目。
JVM Flags
spec.clusters[].jvmFlags类型:字符串数组
传递给
mongot进程的 Java虚拟机(JVM) 标志。每个标志必须以-X、-XX:或-D开头,不得包含空格,且只能包含字母数字字符以及.、_、+、:、-和=字符。针对不符合这些规则的标志,Kubernetes 操作符将拒绝。如果您未在此字段中指定
-Xms或-Xmx,Kubernetes 操作符会将两者都设置为spec.clusters[].resourceRequirements.requests.memory的一半,从而自动计算堆大小。如果您未指定资源要求,Kubernetes 操作符会使用默认的 4Gi 内存请求,产生大约-Xmx2048m -Xms2048m。Kubernetes 操作符始终将您提供的标志附加在操作符计算的标志之后。
StatefulSet 覆盖
spec.clusters[].statefulSet类型:对象
Kubernetes 操作符为部署
mongot节点创建的 StatefulSet 的覆盖。此对象包含一个带有labels和annotations的metadata字段,以及一个带有 apps/v1/StatefulSetSpec 对象的spec字段。Kubernetes 操作符始终在最后应用覆盖,因此它们会覆盖 Kubernetes 操作符计算的设置。注意
请勿使用
spec.clusters[].statefulSet来设立资源要求或持久性设置。请分别使用spec.clusters[].resourceRequirements和spec.clusters[].persistence字段。
高级 mongot 设置
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-certKubernetes 操作符 为所有拓扑结构使用每个集群一个托管的负载均衡器服务器证书。对于分片集群,此证书的 SAN 必须包括
externalHostname和routerHostname中的所有扩展分片主机名称。Kubernetes 操作符按以下顺序解析
mongot服务器证书秘密名称:如果设置
spec.security.tls.certificateKeySecretRef.name,Kubernetes 操作符将使用该名称。如果设置
certsSecretPrefix,Kubernetes 操作符 将使用上述表中的命名模式。如果您未设置任何字段,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密钥下的密码。如果服务器私钥未加密,请忽略此字段。
LoggingSettings
spec.logLevel类型:字符串
mongot日志的详细程度。值可以是以下之一:TRACEDEBUGINFOWARNERROR
如果省略,则默认值为
INFO。
指标设置
spec.observability.prometheus类型:对象
针对 Prometheus 指标终结点的配置,在
mongot中。如果您忽略此字段,Kubernetes 操作符 将在默认端口9946上启用指标终结点。spec.observability.prometheus.mode类型:字符串
在
mongot中启用或禁用 Prometheus 指标终结点。值可以是enabled或disabled。如果省略,值默认为enabled。spec.observability.prometheus.port类型:整型
启用Prometheus指标终结点的端口。默认情况下,在端口
9946上启用 Prometheus 指标终结点。spec.observability.metricsForwarder类型:对象
指标转发器的配置,这是由 Kubernetes 操作符创建的一个部署,用于抓取
mongotPrometheus 指标并将其转发给 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。enabled和auto模式要求启用 Prometheus 终结点 (spec.observability.prometheus)。如果您禁用终结点,Kubernetes 操作符将报告Invalid指标转发器状态。spec.observability.metricsForwarder.resourceRequirements类型:core/v1/ResourceRequirements
指标转发器容器可以请求和限制的 CPU 和内存。如果省略,Kubernetes 操作符将使用
cpu: 100m和memory: 128Mi的请求,以及cpu: 250m和memory: 256Mi的限制。spec.observability.metricsForwarder.deployment类型:对象
Kubernetes 操作符合并到操作符创建的指标转发器部署中的覆盖。此对象包含带有
labels和annotations的metadata字段,以及带有 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)。
自动嵌入设置
重要
Automated embedding is available as a Preview feature for only MongoDB Community Edition deployment. The feature and corresponding documentation might change at any time during the Preview period. To learn more, see Preview Features.
spec.autoEmbedding类型:对象
集合中文本数据自动嵌入的配置。
spec.autoEmbedding.embeddingModelAPIKeySecret.name类型:字符串
包含嵌入模型 API 密钥的秘密名称,
mongot必须使用该密钥在索引和查询时生成嵌入。Secret 必须在indexing-key密钥下包含索引时间密钥,并在query-key密钥下包含查询时间密钥。仅当
spec.autoEmbedding.providerEndpoint指向操作符管理的自托管 Voyage AI 嵌入服务时,您才可以省略embeddingModelAPIKeySecret。否则,Kubernetes 操作符需要它。spec.autoEmbedding.providerEndpoint类型:字符串
用于生成嵌入的嵌入模型终结点 URL。
功能标志设置
spec.featureFlags类型:对象
mongot的功能标志。如果将标志设置为true,则 Kubernetes Operator 会将其渲染到mongot配置中。如果您省略featureFlags对象或单个标志,则应用该标志的模式默认值(enableOverloadRetrySignal的true)。spec.featureFlags.enableOverloadRetrySignal类型:布尔值
启用
mongot超负载重试信号。如果启用此标志,mongot会通过 gRPCRESOURCE_EXHAUSTED响应向上游代理(如操作符管理的 Envoy 负载均衡器)发送负载分流信号。代理之后会在另一个mongot实例上重试该请求。如果省略,则默认值为
true。
其他设置
spec.version类型:字符串
mongodb-searchDocker 图像的版本。如果省略,Kubernetes 操作符 会使用其包含的默认 MongoDB Search 版本。您可以显式设置版本,以防止升级 Kubernetes 操作符 时自动升级。
状态字段
Kubernetes 操作符在 MongoDBSearch 资源的 status 字段下报告状态信息。
status.phase类型:字符串
MongoDBSearch资源的当前阶段。可能的值包括Pending、Running、Failed、Disabled、Updated和Unsupported。status.message类型:字符串
可读消息,其中包含有关当前状态的详细信息。
status.lastTransition类型:字符串
status.phase最后过渡的时间戳。status.observedGeneration类型:整型
Kubernetes 操作符最后处理的
MongoDBSearch资源的生成。status.warnings类型:字符串数组
Kubernetes 操作符报告的资源警告。
status.version类型:字符串
Kubernetes 操作符 协调的 MongoDB Search 版本 (
mongot)。status.resourcesNotReady类型:对象数组
尚未就绪的依赖 Kubernetes 资源。每个条目都会报告资源的
kind和name,以及可选的message和errors列表。status.pvc类型:对象数组
mongotStatefulSets 的持久卷定义状态。每个条目报告卷定义所属的phase和statefulsetName。status.loadBalancer类型:对象
操作符托管的负载均衡器 (Envoy) 的状态。仅在设置
spec.clusters[].loadBalancer.managed时才会出现此字段。对于多集群部署,Kubernetes 操作符会报告所有集群的 Envoy 部署中最差的阶段。status.loadBalancer.phase类型:字符串
托管负载均衡器的当前阶段。可能的值包括
Pending、Running和Failed。此字段在LOADBALANCER列下的kubectl get输出中可见。status.loadBalancer.message类型:字符串
包含有关托管负载均衡器状态的详细信息的人可读消息。
status.metricsForwarder类型:对象
指标转发器的状态。
status.metricsForwarder.phase类型:字符串
指标转发器的当前阶段。可能的值包括
Pending、Running和Failed。如果您将spec.observability.metricsForwarder.mode设置为disabled,则阶段报告Disabled。此字段显示在METRICSFORWARDER列下的kubectl get输出中。status.metricsForwarder.message类型:字符串
可读消息,其中包含有关指标转发器状态的详细信息。
status.clusters类型:对象数组
跨部署拓扑的每集群状态。Kubernetes 操作符在
spec.clusters[]中为每个集群报告一个条目,因此单集群部署正好有一个条目。每个条目独立报告该集群的搜索、负载均衡器和指标转发器阶段,因此您可以将问题局部化到特定的集群和组件。status.clusters[].name类型:字符串
节点集群的名称。在单集群部署中为空。
status.clusters[].index类型:整型
此集群的
spec.clusters[]固定索引。将每个状态条目独立映射回其规格条目,不受列表顺序的影响。status.clusters[].search类型:字符串
此集群的
mongotStatefulSets 中最差的阶段。集群为副本集源运行一个mongotStatefulSet,或为分片源的每个分片运行一个 StatefulSet。值可以是Pending、Running或Failed。status.clusters[].searchMessage类型:字符串
当
search不是Running时,可读消息包含原因。status.clusters[].loadBalancer类型:字符串
此集群的托管负载均衡器 (Envoy) 阶段。未配置托管负载均衡器时为空。值可以是
Pending、Running或Failed。status.clusters[].loadBalancerMessage类型:字符串
当
loadBalancer不是Running时,可读消息包含原因。status.clusters[].metricsForwarder类型:字符串
此集群的 MongoDB Ops Manager 指标转发器阶段。未启用指标转发器时为空。值可以是
Pending、Running或Failed。status.clusters[].metricsForwarderMessage类型:字符串
当
metricsForwarder不是Running时,可读消息包含原因。