MongoDBSearch 自定义资源允许您在Kubernetes中部署和配置MongoDB Search 和 Vector Search 节点以及MongoDB 数据库部署。 MongoDBSearch资源部署 mongot 进程,这些进程通过同步MongoDB 部署中的数据来提供全文搜索和语义搜索功能。
要学习;了解有关部署MongoDB Search 和 Vector Search 的更多信息,请参阅部署MongoDB Search 和 Vector 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 Operator 从中派生出其创建的Kubernetes资源的名称,示例{name}-search-{clusterIndex}-{shardName}。 Kubernetes Operator 验证每个生成的名称是否符合Kubernetes DNS 限制:标签为 63 个字符,子域名为 253 个字符。spec.clusters类型:对象数组
资源的按 Kubernetes
MongoDBSearch集群部署配置。此字段为必填字段,必须包含至少一个条目,最多50 个条目:一个条目用于单集群部署,或者一个条目用于多集群部署中运行mongot个 Pod 的每个Kubernetes集群。有关完整字段参考,包括name和index,请参阅集群部署设置。
可选的 MongoDBSearch 资源设置
MongoDBSearch自定义资源可以使用以下设置:
数据源设置
spec.source类型:对象
描述
mongot的MongoDB源的设置。源可以是副本集或分片集群。在以下情况下需要此设置:MongoDB是外部的MongoDB的名称不同于MongoDBSearch
MongoDBSearch资源必须始终连接到MongoDB 部署。如果使用带有MongoDB或MongoDBCommunityCRD 的Kubernetes Operator 进行部署,并且spec.source为空,则Kubernetes Operator 使用基于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搜索和向量搜索资源关联的
MongoDB或MongoDBCommunity资源的名称。 Kubernetes Operator 同时支持副本集和分片的集群。不能有多个MongoDBSearch资源引用同一MongoDB或MongoDBCommunity资源。仅当您的
MongoDB或MongoDBCommunity资源部署在同一Kubernetes集群中并且与MongoDBSearch资源位于同一命名空间中时,才使用此字段。如果您的数据库部署在Kubernetes外部或位于不同的命名空间中,请使用spec.source.external配置与数据库的连接。如果同时设立这两个字段,则spec.source.external优先。如果省略, Kubernetes Operator 会查找与此
MongoDBSearch资源同名的MongoDB或MongoDBCommunity资源。spec.source.mongodbResourceRef.namespace类型:字符串
spec.source.mongodbResourceRef.name引用的MongoDB或MongoDBCommunity资源的命名空间。 Kubernetes Operator 目前会忽略此字段,并始终使用MongoDBSearch资源的命名空间。不支持跨命名空间引用。如果您的数据库位于不同的命名空间中,请使用spec.source.external。spec.source.username类型:字符串
用于通过
mongod对mongot进行身份验证的用户名。指定的用户必须具有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。
x509 身份验证设置
spec.source.x509类型:对象
为
mongot同步源连接配置 x509客户端证书身份验证。如果设立此字段,则mongot使用 x509 而不是用户名和密码对MongoDB进行身份验证。该字段与
spec.source.passwordSecretRef、spec.source.username和spec.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密钥下的密码。如果私钥未加密,则省略此字段。
SCRAM TLS 客户端证书设置
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密钥下的密码。如果私钥未加密,则省略此字段。
外部MongoDB设置
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 为每个分片创建一个
mongotStatefulSet。指定至少一个分片条目。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 个条目。所有大小和位置设置,例如replicas、loadBalancer、resourceRequirements、persistence、jvmFlags和statefulSet都位于clusters条目中。这些设置没有对应的顶级设置。对于单集群部署,请指定一个条目。您可以省略
name和index。对于多集群部署,请为每个运行
mongotPod 的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集群的稳定整数标识符。该值必须介于
0和999之间,并且在各条目中必须是唯一的。如果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集群中部署的
mongotPod 数量。对于副本集源,这是mongotPod 的总数。对于分片集群源,这是每个分片的mongotPod 数量。如果
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 和内存量。如果您仅指定cpu或memory之一, Kubernetes Operator 将应用另一个的默认值。spec.clusters[].persistence.single类型:对象
存储索引的MongoDB Search 和 Vector Search 持久卷的存储配置。每个搜索实例(pod) 都有自己独立的存储。
标量数据类型说明labelSelector字符串
storage字符串
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,则此字段为必填项。必须设立
managed或unmanaged之一。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 部署中的操作。此对象包含一个具有
metadatalabels和 的 字段,以及一个具有annotationsspecapps/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 会将此值作为mongotHost和searchIndexManagementHostAndPort写入mongod配置。对于外分片集群源,该值必须包含Kubernetes Operator 按分片展开的
{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 Operator 将statefulSet深度合并到集群值上。您未设立的字段会继承集群值。
同步源选择
spec.clusters[].syncSourceSelector.matchTagSets类型:对象数组
副本集标签集的有序列表,按副本集标签选择同步源
mongod节点。 Kubernetes Operator 将该列表传递给mongot配置。mongot从第一个匹配标签集选择的节点进行同步,并且优先选择从节点(secondary node from replica set)节点。每个条目都是标签名称到标签值的映射。空文档(
{}) 匹配任何节点,因此如果没有早期标签集匹配,您可以附加尾随{}条目作为匹配任意后备。您最多可以指定 50 个条目。
JVM Flags
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 计算的标志之后。
StatefulSet 覆盖
spec.clusters[].statefulSet类型:对象
覆盖Kubernetes Operator 为部署
mongotPod 创建的 StatefulSet。此对象包含一个具有metadatalabels和 的 字段,以及一个具有annotationsspecapps/v1 /StatefulSetSpec对象的 字段。 Kubernetes Operator 始终最后应用覆盖项,因此它们会覆盖Kubernetes Operator 计算的设置。注意
请勿使用
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 将流量路由到正确的分片,这取决于 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-certKubernetes Operator 对所有拓扑的每个集群使用一个托管负载负载均衡器服务器证书。对于分片的集群,此证书的 SAN 必须包含
externalHostname和routerHostname中的所有扩展分片主机名。Kubernetes Operator 按以下顺序解析
mongot服务器证书密钥名称:如果设立
spec.security.tls.certificateKeySecretRef.name, Kubernetes Operator 将使用该名称。如果设立
certsSecretPrefix, Kubernetes Operator 将使用上表中的命名模式。如果您未设立这两个字段,则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密钥下的密码。如果服务器私钥未加密,请忽略此字段。
LoggingSettings
spec.logLevel类型:字符串
mongot日志的详细程度。值可以是以下之一:TRACEDEBUGINFOWARNERROR
如果省略,则默认值为
INFO。
指标设置
spec.observability.prometheus类型:对象
mongot中 Prometheus指标端点的配置。如果省略此字段, Kubernetes Operator 将在默认端口9946上启用指标端点。spec.observability.prometheus.mode类型:字符串
在
mongot中启用或禁用 Prometheus指标端点。值可以是enabled或disabled。如果省略,则默认为enabled。spec.observability.prometheus.port类型:整型
启用Prometheus指标终结点的端口。默认情况下,在端口
9946上启用 Prometheus 指标终结点。spec.observability.metricsForwarder类型:对象
指标转发器的配置,这是Kubernetes Operator 创建的用于抓取
mongotPrometheus指标并将其转发到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。enabled和auto模式需要启用 Prometheus 端点 (spec.observability.prometheus)。如果禁用端点, Kubernetes Operator 会报告Invalid指标转发器状态。spec.observability.metricsForwarder.resourceRequirements类型:core/v1/ResourceRequirements
指标转发器容器可以请求和限制的 CPU 和内存。如果省略, Kubernetes Operator 将使用
cpu: 100m和memory: 128Mi的请求以及cpu: 250m和memory: 256Mi的限制。spec.observability.metricsForwarder.deployment类型:对象
覆盖Kubernetes Operator 合并到 Operator 创建的指标转发器部署中的操作。此对象包含一个具有
metadatalabels和 的 字段,以及一个具有annotationsspecapps/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会通过 gRPCRESOURCE_EXHAUSTED响应向上游代理(例如 Operator 托管的 Envoy 负载负载均衡器)发出负载卸载信号。然后,代理会在另一个mongot实例上重试该请求。如果省略,则默认值为
true。
其他设置
spec.version类型:字符串
mongodb-searchDocker映像的版本。如果省略, Kubernetes Operator 将使用与之捆绑的默认MongoDB Search 版本。您可以在升级Kubernetes Operator 时明确设立版本以防止自动升级。
状态字段
Kubernetes Operator 在 MongoDBSearch资源的 status字段下报告状态信息。
status.phase类型:字符串
MongoDBSearch资源的当前阶段。可能的值包括Pending、Running、Failed、Disabled、Updated和Unsupported。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依赖资源。每个条目报告资源的
kind和name,以及可选的message和errors列表。status.pvc类型:对象数组
mongotStatefulSet 的持久卷声明的状态。每个条目都报告声明所属的phase和statefulsetName。status.loadBalancer类型:对象
Operator 管理的负载负载均衡器(Envoy) 的状态。仅当设立
spec.clusters[].loadBalancer.managed时,此字段才会出现。对于多集群部署, Kubernetes Operator 会报告所有集群的 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类型:字符串
人类可读的消息,其中包含指标转发器状态的详细信息。