您可以使用Kubernetes Operator 的MongoDB控制器将MongoDB Search 和 向量搜索 与MongoDB 8.2 或更高版本一起部署。
资源规范示例
以下示例显示了MongoDB Search 和 Vector Search部署的 spec对象内的设置。要学习;了解有关这些设置的更多信息,请参阅必需设置和可选设置。
注意
此示例不是可用配置。它包含所有可用字段,并填充了示例值以供参考。某些字段互相排斥,某些字段优先于其他字段(例如,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
所需设置
本部分介绍部署MongoDB Search 和 Vector Search资源所需的设置。如果您在自定义资源定义 (CRD) 中仅定义必需设置,则 Kubernetes 操作符的 MongoDB 控制器将使用所有可选设置的默认值来配置 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类型:对象数组
每个 Kubernetes 集群的 MongoDBSearch 部署配置。此字段为必填字段,必须包含至少一个条目和最多 50 个条目:单集群部署的一个条目,或多集群部署中运行
mongot个 Pod 的每个 Kubernetes 集群的一个条目。有关完整字段参考(包括name和index),请参阅 spec.集群。
可选设置
本节介绍MongoDB搜索和向量搜索资源的可选设置。如果省略可选设置并在 CRD 中仅定义必需设置,Kubernetes 操作符的 MongoDB 控制器将使用所有可选设置的默认值来配置 MongoDBSearch。
用于配置数据源的设置
spec.source类型:对象
描述
mongot的MongoDB源的设置。源可以是副本集或分片集群。在以下情况下需要此设置:MongoDB是外部的MongoDB与 MongoDBSearch 具有不同的名称
MongoDBSearch资源必须始终连接到MongoDB 部署。如果使用带有
MongoDB或MongoDBCommunityCRD 的Kubernetes 操作符 进行部署,并且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搜索和向量搜索资源关联的
MongoDB或MongoDBCommunity资源的名称。Kubernetes 操作符 同时支持副本集和分片的集群。不能有多个 MongoDBSearch资源引用同一MongoDB或MongoDBCommunity资源。如果指定其他名称,则必须明确点要启用MongoDB Search 和 向量搜索 的MongoDB或MongoDBCommunity。如果您引用分片集群
MongoDB资源, Kubernetes Operator 会自动发现分片拓扑结构(分片名称、副本集成员、mongos路由器)并自动创建每个分片的mongotStatefulSet。您无需执行任何其他外部配置。仅当您的
MongoDB或MongoDBCommunity资源部署在同一Kubernetes集群中并且与 MongoDBSearch资源位于同一命名空间中时,才使用此字段。如果设立此字段, Kubernetes 操作符 会自动:设置正确的数据库连接字符串。
通过设置必要的参数来重新配置MongoDB 数据库部署,以启用搜索功能,并配置搜索Pod 的地址。
如果数据库部署在 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。
用于配置 mongot 用户的设置
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 操作符将拒绝配置。
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键下包含密码。如果私钥未加密,请忽略此字段。
带有 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类型:对象
包含 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 的设置
只有在配置与外部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托管,才使用此选项。对于使用
MongoDBCRD 部署的操作符托管的集群,请改用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 操作符 为每个分片创建一个
mongotStatefulSet,其中每个 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 个条目。所有尺寸和位置设置,例如
replicas、loadBalancer、resourceRequirements、persistence、jvmFlags和statefulSet,都存在于clusters条目中。这些设置没有顶级等效项。对于单集群部署,请指定一个条目。您可以省略
name和index。例子
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 集群的稳定整数标识符。该值必须在
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 操作符将 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 和内存量。如果您仅指定cpu或memory之一,Kubernetes 操作符 将应用另一个的默认值。如果省略,Kubernetes 操作符 将使用以下默认值:requests: cpu: 2 memory: 4Gi
spec.clusters[].persistence.single类型:对象
MongoDB Search 和 Vector Search 持久卷的存储配置,其中存储MongoDB Search 和 Vector Search 索引。每个搜索实例(pod) 都有自己独立的存储来维护索引,该存储不与MongoDB 数据库共享。只有索引元数据(定义)存储在数据库中。
标量数据类型说明labelSelector字符串
storage字符串
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[].replicas为1,则此字段为可选字段。您甚至可以为单个mongot实例配置负载负载均衡器,为以后扩展做好准备。必须设立
managed或unmanaged之一。spec.clusters中的所有条目必须在负载均衡器模式上达成一致:每个条目都设置loadBalancer.managed,每个条目都设置loadBalancer.unmanaged,或没有条目设置loadBalancer。Kubernetes 操作符拒绝混合模式。多集群部署仅支持托管模式。负载负载均衡器会影响
mongod客户端看到哪些 TLS 证书以及这些证书必须包含哪些主机名:如果没有负载负载均衡器,
mongod会直接连接到mongot。向mongod提供的 TLS 证书是mongot自己的证书。如果MongoDB 集群位于Kubernetes外部,则mongot服务将在外部域上公开。您必须在mongotTLS 证书的 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 包含在
mongotTLS 证书的 SAN 字段中。操作符管理的 Envoy 代理目前仅针对证书权限验证mongot证书,不匹配 SAN 主机名。外部mongod进程会看到 Envoy 代理的 TLS 证书,因此请将外部域名包含在 Envoy 证书的 SAN 中,而不是mongot证书中。
提示
即使您最初部署单个
mongotPod,也要启用托管负载负载均衡器。负载负载均衡器就位后,如果您稍后扩展spec.clusters[].replicas,TLS 证书中的域将保持稳定,因为负载负载均衡器已经存在于mongod和mongot之间。
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 部署元数据中的labels和annotations字段。spec— apps/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 操作符会将此值作为mongotHost和searchIndexManagementHostAndPort写入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,并且每个分片在每个集群条目中最多可以被覆盖一次。如果在覆盖中设置
replicas、resourceRequirements、persistence或jvmFlags,它们将替换指定分片的集群值。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[].jvmFlags。spec.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 - {}
JVM Flags
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
StatefulSet 覆盖
spec.clusters[].statefulSet类型:对象
Kubernetes 操作符为部署
mongot节点而创建的 StatefulSet 的覆盖。Kubernetes 操作符始终最后应用覆盖,因此它们会覆盖 Kubernetes 操作符计算的设置。该对象包含两个字段:
metadata— 包含 Kubernetes 操作符合并到 StatefulSet 元数据中的labels和annotations字段。spec— apps/v1/StatefulSetSpec对象。Kubernetes 操作符将这些覆盖合并到 StatefulSet 规范中。
注意
请勿使用
spec.clusters[].statefulSet来设立资源要求或持久性设置。请分别使用spec.clusters[].resourceRequirements和spec.clusters[].persistence字段。
高级 mongot 设置
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,因为单个密钥引用无法涵盖每个分片的证书。如果同时指定
certificateKeySecretRef和certsSecretPrefix,则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 必须包括
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。注意
对于分片集群部署,Kubernetes 操作符拒绝
certificateKeySecretRef,因为单个秘钥引用无法涵盖每分片证书。使用certsSecretPrefix,或不设置任何字段并创建遵循默认每分片模式和默认命名的负载均衡器证书秘钥的秘钥。例子
spec: security: tls: certsSecretPrefix: my-prefix
spec.security.tls.keyFilePasswordSecretRef类型:对象
在 TLS 证书秘密中包含解密密码加密服务器私钥的密码的秘密。Secret 必须包含
keyFilePassword密钥下的密码。如果服务器私钥未加密,请忽略此字段。
日志记录设置
spec.logLevel类型:字符串
mongot日志的详细程度。值可以是以下之一:TRACEDEBUGINFOWARNERROR
如果省略,则默认值为
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 指标终结点。值可以是以下值之一:enableddisabled
如果省略,则默认值为
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 Operator 将使用以下默认值:
requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi
spec.observability.metricsForwarder.deployment类型:对象
Kubernetes 操作符(Operator)合并到操作符所创建的指标(metrics)转发器部署(Deployment)中的覆盖配置。遵循与
spec.clusters[].loadBalancer.managed.deployment相同的约定:一个包含labels和annotations的metadata字段,以及一个包含 apps/v1/DeploymentSpec 对象的spec字段。
spec.observability.metricsForwarder.opsManager类型:对象
指标转发器发送指标至的 MongoDB Ops Manager 项目和凭证。如果省略,Kubernetes 操作符将从源 MongoDB 资源的连接配置中获取项目和凭证。请为外部 MongoDB 源设置此字段,在不存在源 MongoDB 资源的情况下使用。
如果设置此字段,则必须同时设置
agentCredentials和projectConfigMapRef。
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对象或单个标志,则应用该标志的模式默认值(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。此字段在
PHASE列下的kubectl get输出中可见。
status.message类型:字符串
可读性消息,其中包含当前状态的详细信息,例如资源处于
Pending或Failed阶段的原因。
status.lastTransition类型:字符串
status.phase最后过渡的时间戳。
status.observedGeneration类型:整型
Kubernetes 操作符最后处理的 MongoDBSearch 资源的生成。
status.warnings类型:字符串数组
Kubernetes 操作符报告的资源警告。
status.version类型:字符串
Kubernetes 操作符 协调的 MongoDB Search 版本 (
mongot)。此字段在
VERSION列下的kubectl get输出中可见。
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。Kubernetes 操作符 独立于主status.phase报告此阶段,因此您可以单独监控Envoy部署。此字段也显示在
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 Operator 在
spec.clusters[]中为每个集群报告一个条目,因此单集群部署只有一个条目。每个条目独立报告该集群的搜索、负载负载均衡器和指标转发器阶段,因此您可以将问题定位到特定的集群和组件。
status.clusters[].name类型:字符串
成员集群的名称。在单集群部署中为空。
status.clusters[].index类型:整型
此集群的
spec.clusters[]固定索引。将每个状态条目映射回其规范条目,与列表顺序无关。
status.clusters[].search类型:字符串
此集群的
mongotStatefulSet 中的最差阶段。对于副本集集源,集群运行一个mongotStatefulSet;对于分片的源,集群为每个分片运行一个 StatefulSet。值可以是Pending、Running或Failed。
status.clusters[].searchMessage类型:字符串
当
status.clusters[].search不是Running时,带有原因的人类可读消息。
status.clusters[].loadBalancer类型:字符串
此集群的托管负载负载均衡器(Envoy) 阶段。如果未配置托管负载负载均衡器,则为空。值可以是
Pending、Running或Failed。
status.clusters[].loadBalancerMessage类型:字符串
当
status.clusters[].loadBalancer不是Running时,带有原因的人类可读消息。
status.clusters[].metricsForwarder类型:字符串
此集群的Ops Manager指标转发器阶段。未启用指标转发器时为空。值可以是
Pending、Running或Failed。
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