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

扩展 MongoDB Search 索引存储

mongot 进程将 MongoDB Search 和 Vector Search 搜索索引存储在专用的 Persistent Volume 上。Kubernetes 操作符 不会自动扩展该存储。在 Kubernetes 操作符 1.9 或更高版本中,您可以扩展 mongot Persistent Volume Claims,然后更新 MongoDBSearch 资源以反映扩展后的卷大小。要增加其他资源的存储空间,请参阅 增加持久卷的存储空间。

在此过程中,您需要针对 MongoDBSearch 资源、mongot statefulSets 及其 Persistent Volume Claims 以及 Kubernetes 操作符部署运行命令。在多集群部署中,这些目标可以位于不同的集群中。使用下表确定每个命令的上下文以及要停止和恢复的操作符:

部署
MongoDBSearch 资源上下文
用于停止和恢复的操作符

单集群

工作负载集群

同一集群

本地操作符

中央多集群 Kubernetes 操作符

中央集群

每个受影响的节点集群

中央操作符

每个成员集群的 Kubernetes 操作符

每个节点集群的本地 Search 资源

同一节点集群

每个受影响节点的 Search 操作符

以下过程将副本集 Search 存储从 1Gi 扩展到 2Gi。将每个 StatefulSet 匹配到其集群条目的 name 和显式 index,而不是条目在 clusters 数组中的位置。

匹配的 shardOverrides[].persistence 设置会替换集群的 persistence 设置。如果设置了该项,请在此处更改大小。如果要在 spec.clusters[].statefulSet 中覆盖 volumeClaimTemplates,请在此处更改大小。该覆盖优先于 persistence。

警告

仅增加存储,同时保留现有的 MongoDBSearch 资源及其 Persistent Volume Claims,并且不要扩展 mongot。仅删除 StatefulSet 定义,并确保使用 --cascade=orphan 选项,以便在 Kubernetes 操作符停止时,mongot Pods 及其声明保持不变。

1

列出 MongoDBSearch 资源的 mongot statefulSets:

kubectl --context <member-context> -n <namespace> \
get sts -l mongodb.com/search-name=<search-name>

使用默认的 data 声明模板,每个副本使用名为 data-<statefulset-name>-<ordinal> 的声明。对于分片集群源,每个集群的每个分片都有一个 StatefulSet。如果您自定义了声明模板或卷挂载,请检查每个 Pod 挂载的声明。

2

针对您在上一步中确定的每个声明运行以下命令:

kubectl --context <member-context> -n <namespace> \
patch pvc <pvc-name> --type=merge \
-p '{"spec":{"resources":{"requests":{"storage":"2Gi"}}}}'

等待每个声明报告至少达到请求的大小(在此示例中为 2Gi),位于 status.capacity.storage 或 FileSystemResizePending 条件中:

kubectl --context <member-context> -n <namespace> \
get pvc <pvc-name> -o yaml

如果扩展所需的时间超过了存储后端文档中记录的超时时间,请在继续之前调查 CSI 事件:

kubectl --context <member-context> -n <namespace> \
describe pvc <pvc-name>
3

记录每个操作符的原始副本计数:

kubectl --context <operator-context> -n <operator-namespace> \
get deployment <operator-name> \
-o jsonpath='{.spec.replicas}{"\n"}'

将操作符扩展为零,并等待其 Pods 被删除:

kubectl --context <operator-context> -n <operator-namespace> \
scale deployment <operator-name> --replicas=0
kubectl --context <operator-context> -n <operator-namespace> \
wait --for=delete pod --timeout=300s \
-l app.kubernetes.io/name=<operator-name>

扩展操作符,而不是 mongot。Helm 图表将操作符部署命名为 mongodb-kubernetes-operator,并在其 Pods 上设置 app.kubernetes.io/name: mongodb-kubernetes-operator。如果您的安装是自定义的,请使用部署的实际 pod 选择器,而不是此示例中显示的图表标签。在继续之前,请停止所有负责的操作符 Pods,包括终止 Pods。停止单独的源数据库操作符不会暂停节点搜索操作符。

4

针对您在步骤 1 中确定的每个 StatefulSet,运行以下命令:

kubectl --context <member-context> -n <namespace> \
delete sts <statefulset-name> --cascade=orphan \
--timeout=300s

确认每个 StatefulSet 均不存在,同时其现有的 mongot Pods 和 Persistent Volume Claims 保持完整且没有删除时间戳。不要删除 MongoDBSearch 资源或扩展 mongot。

5
kubectl --context <search-resource-context> -n <namespace> \
edit mongodbsearch <search-name>

更改受影响集群条目的 persistence.single.storage 值:

persistence:
single:
storage: 2Gi

在每个节点集群部署的 Kubernetes Operator 中,更新每个本地 Search 资源中的相应设置。

保留现有的存储类、集群条目、索引、副本和其他设置。删除集群条目可能会删除该集群的 Search 资源和声明。

读取 Search 资源以确认新的有效大小已持久保存。在恢复 操作符 之前,目标 statefulSets 必须保持不存在状态。

6

恢复每个操作符自身记录的副本计数:

kubectl --context <operator-context> -n <operator-namespace> \
scale deployment <operator-name> \
--replicas=<original-replicas>
kubectl --context <operator-context> -n <operator-namespace> \
rollout status deployment/<operator-name> --timeout=600s

等待每个 StatefulSet 使用扩展的 data 声明模板重新出现。新的 StatefulSet 将采用现有的 Pods 和声明。

7

如果FileSystemResizePending 条件仍然存在,请mongot 一次一个地 删除受影响的 Pods :

kubectl --context <member-context> -n <namespace> \
delete pod <mongot-pod-name> --timeout=300s
kubectl --context <member-context> -n <namespace> \
wait --for=condition=Ready pod/<mongot-pod-name> \
--timeout=600s

在运行就绪命令之前,请等待替换 Pod 存在。仅在替换准备就绪且条件清除后,才重新启动下一个 Pod。如果扩展在线完成,请跳过此步骤。

注意

直接删除 Pod 会绕过 PodDisruptionBudgets。单个 mongot 副本在重启时无法提供服务。此程序不能保证零停机时间。

8

确认每个 Persistent Volume Claim 报告的容量至少达到所请求的容量,所有预期的 mongot Pods 均已就绪,并且每个 Search 资源在协调后都达到 Running 阶段。

如果操作符停止时某个步骤失败,请保留 Search 资源、其 Pods 和声明。更正有效的存储设置,然后将每个暂停的操作符恢复到其原始副本计数。如果您在更正配置之前恢复,请稍后完成该过程,而不是缩小或删除声明。

如果 Pod 或声明开始删除,请停止进一步删除并联系您的 Kubernetes 或存储管理员。不要删除终结器或编辑 PV.spec.capacity 作为解决方法。