您可以使用Kubernetes Operator 在Kubernetes集群上部署MongoDB Search 和 Vector Search,与外部MongoDB Enterprise Edition v8.0.10 或更高版本的服务器一起运行。此过程演示如何在Kubernetes集群中部署和配置 mongot进程,以使用新的或现有的外部副本集部署。
重要
现已弃用对低于 8.2 的MongoDB版本的支持。升级到MongoDB v8.2 或更高版本。
先决条件
要部署MongoDB Search 和 Vector Search,您必须具备以下条件:
一个运行的Kubernetes集群,且本地可用
kubeconfig。Kubernetes命令行工具
kubectl,配置为与集群通信。Helm( Kubernetes的包管理器),用于安装Kubernetes Operator。
Bash v5.1 或更高版本,用于运行本教程中的命令。
运行8.0.10 或更高版本的MongoDB Enterprise Edition副本集,用于存储数据。
要学习;了解有关部署MongoDB Enterprise 的更多信息,请参阅部署和配置MongoDB数据库资源。
运行的MongoDB Cloud Manager或MongoDB Ops Manager ,用于管理MongoDB任务。
开始之前
在使用Kubernetes Operator 安装MongoDB Search 和 Vector Search 之前,您必须执行以下操作:
为MongoDB Search 和 Vector Search 配置Cloud Manager或MongoDB Ops Manager参数
登录到Cloud Manager或MongoDB Ops Manager用户界面并执行以下步骤,为MongoDB Search 和 Vector Search 配置Cloud Manager或MongoDB Ops Manager 。
修改Cloud Manager或MongoDB Ops Manager部署配置。
单击 Modify 按钮打开部署配置编辑器。
在 Process Configuration(添加特性和功能)部分下,单击 Advanced Configuration Options(权限)。
单击 Add Option 按钮,然后从下拉列表中选择 setParameter Startup Option。
添加名称和值后,单击 Add,在字段中逐个添加以下参数:
Parameter值mongotHost您的搜索主机名和端口。示例:
search-node1.example.com:27017。searchIndexManagementHostAndPort您的搜索主机名和端口。示例:
search-node1.example.com:27017。skipAuthenticationToSearchIndexManagementServerfalsesearchTLSMode您配置的 TLS模式。示例,如果
mongot进程配置为接受 TLS 连接,则为preferTLS。
为MongoDB Search 和 Vector Search 配置Cloud Manager或MongoDB Ops Manager用户
You must create a user with the searchCoordinator role. In MongoDB versions 8.2 and later, the searchCoordinator is a built-in role. You must create a user and assign the role to the user. For MongoDB versions earlier than 8.2 and 8.0.10 or later, you must manually create the role and assign the privileges before creating the user. Select the tab that corresponds to the MongoDB version you are running to create a user with the searchCoordinator role.
设置您的环境
准备环境,以便在终端中运行本教程中的示例代码。
必填。设置环境变量。
要设立用于此过程后续步骤的环境变量,请复制以下内容,设立环境变量的值,然后加载环境变量:
1 export K8S_CTX="<your kubernetes context here>" 2 3 export MDB_NS="mongodb" 4 5 export MDB_VERSION="8.0.10" 6 7 export MDB_ADMIN_USER_PASSWORD="admin-user-password-CHANGE-ME" 8 export MDB_USER_PASSWORD="mdb-user-password-CHANGE-ME" 9 export MDB_SEARCH_SYNC_USER_PASSWORD="search-sync-user-password-CHANGE-ME" 10 11 export MDB_SEARCH_SERVICE_NAME="mdbs-search" 12 export MDB_SEARCH_HOSTNAME="mdbs-search.example.com" 13 14 # External MongoDB replica set members - REPLACE THESE VALUES with your actual external MongoDB hosts 15 # In production, replace with your actual external MongoDB replica set members 16 export MDB_EXTERNAL_HOST_0="mdbc-rs-0.mdbc-rs-svc.${MDB_NS}.svc.cluster.local:27017" 17 export MDB_EXTERNAL_HOST_1="mdbc-rs-1.mdbc-rs-svc.${MDB_NS}.svc.cluster.local:27017" 18 export MDB_EXTERNAL_HOST_2="mdbc-rs-2.mdbc-rs-svc.${MDB_NS}.svc.cluster.local:27017" 19 20 # REPLACE with your external MongoDB keyfile secret name 21 export MDB_EXTERNAL_KEYFILE_SECRET_NAME="mdbc-rs-keyfile" 22 23 # REPLACE with the actual keyfile content from your external MongoDB replica set 24 # For testing, this will be automatically generated by the MongoDB Community resource 25 export MDB_EXTERNAL_KEYFILE_CONTENT="your-mongodb-keyfile-content-CHANGE-ME" 26 27 # REPLACE with your actual external MongoDB replica set name 28 export MDB_EXTERNAL_REPLICA_SET_NAME="mdbc-rs" 29 30 export OPERATOR_HELM_CHART="mongodb/mongodb-kubernetes" 31 export OPERATOR_ADDITIONAL_HELM_VALUES="" 32 33 export MDB_CONNECTION_STRING="mongodb://mdb-user:${MDB_USER_PASSWORD}@${MDB_EXTERNAL_HOST_0}/?replicaSet=${MDB_EXTERNAL_REPLICA_SET_NAME}"
有条件。为Kubernetes Operator 安装MongoDB控制器。
Kubernetes Operator 监视 MongoDB、MongoDBOpsManager 和 MongoDBSearch 自定义资源,并管理MongoDB部署的生命周期。如果您已经安装了MongoDB Controllers for Kubernetes Operator,请跳过此步骤。否则,请从您在上一步中添加的Helm存储库安装MongoDB Controllers for Kubernetes Operator。
要在 mongodb命名空间中安装MongoDB Controllers for Kubernetes Operator,请复制、粘贴并运行以下命令:
1 helm upgrade --install --debug --kube-context "${K8S_CTX}" \ 2 --create-namespace \ 3 --namespace="${MDB_NS}" \ 4 mongodb-kubernetes \ 5 {OPERATOR_ADDITIONAL_HELM_VALUES:+--set ${OPERATOR_ADDITIONAL_HELM_VALUES}} \ 6 "${OPERATOR_HELM_CHART}"
前面的命令会在 mongodb命名空间中安装Kubernetes Operator;如果该命名空间不存在,则会创建该命名空间。安装后, Kubernetes Operator 会监视 MongoDBSearch 自定义资源并管理MongoDB Search 和 Vector Search 部署的生命周期。
安装MongoDB Search 和 Vector Search
必需。创建并加载MongoDB用户密钥。
mongot进程需要身份验证凭证才能连接到外部MongoDB 部署,从而创建搜索索引和运行搜索查询。此步骤将创建以下Kubernetes密钥:
mdb-admin-user-password— MongoDB管理员的凭证。mdb-user-password— 经授权执行搜索查询的用户的凭证。mdbc-rs-search-sync-source-password— 专用搜索用户的凭证,由mongot进程在内部用于同步数据和管理索引。
Kubernetes Operator 将这些密钥挂载到MongoDB Pod 中。
要创建密钥,请在计划部署MongoDB Search 和 Vector Search 的命名空间中复制、粘贴并运行以下命令:
1 kubectl --context "${K8S_CTX}" --namespace "${MDB_NS}" \ 2 create secret generic mdb-admin-user-password \ 3 --from-literal=password="${MDB_ADMIN_USER_PASSWORD}" 4 5 kubectl --context "${K8S_CTX}" --namespace "${MDB_NS}" \ 6 create secret generic mdbc-rs-search-sync-source-password \ 7 --from-literal=password="${MDB_SEARCH_SYNC_USER_PASSWORD}" 8 9 kubectl --context "${K8S_CTX}" --namespace "${MDB_NS}" \ 10 create secret generic mdb-user-password \ 11 --from-literal=password="${MDB_USER_PASSWORD}"
必填。部署密钥文件密钥以用于连接到mongod 。
为了对来自外部MongoDB 的连接进行身份验证,mongot进程使用的密钥文件与外部MongoDB副本集用于副本集之间的内部身份验证的密钥文件相同。
要创建包含来自外部MongoDB 的密钥文件内容的Kubernetes密钥,请复制、粘贴并运行以下命令:
1 kubectl --context "${K8S_CTX}" --namespace "${MDB_NS}" \ 2 create secret generic "${MDB_EXTERNAL_KEYFILE_SECRET_NAME}" \ 3 --from-literal=keyfile="${MDB_EXTERNAL_KEYFILE_CONTENT}"
必需。为MongoDB Search 和 Vector Search 创建并部署资源。
您可以部署一个搜索节点实例,而无需任何负载均衡。要部署,请完成以下步骤:
创建名为
mdbs的MongoDBSearch自定义资源。此资源包含以下内容:
spec.source.external.hostAndPorts外部MongoDB副本集节点列表。
spec.source.external.keyfileSecretRef外部副本集成员使用的密钥文件密钥。
spec.source.username搜索同步用户用户名。
spec.source.passwordSecretRef搜索同步用户密码。
spec.resourceRequirements搜索容器的 CPU 和内存资源要求。
要学习;了解有关此自定义资源中设置的更多信息,请参阅MongoDB搜索和向量搜索设置。
1 kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - <<EOF 2 apiVersion: mongodb.com/v1 3 kind: MongoDBSearch 4 metadata: 5 name: mdbs 6 spec: 7 source: 8 external: 9 hostAndPorts: 10 - ${MDB_EXTERNAL_HOST_0} 11 - ${MDB_EXTERNAL_HOST_1} 12 - ${MDB_EXTERNAL_HOST_2} 13 keyfileSecretRef: 14 name: ${MDB_EXTERNAL_KEYFILE_SECRET_NAME} 15 key: keyfile 16 username: search-sync-source 17 passwordSecretRef: 18 name: ${MDB_RESOURCE_NAME}-search-sync-source-password 19 key: password 20 resourceRequirements: 21 limits: 22 cpu: "3" 23 memory: 5Gi 24 requests: 25 cpu: "2" 26 memory: 3Gi 27 EOF 等待
MongoDBSearch资源部署完成。当您应用
MongoDBSearch自定义资源时, Kubernetes 操作符开始部署搜索节点 (pod)。此步骤会暂停执行,直到mdbs资源的状态阶段为Running,这表示MongoDB Search StatefulSet 处于可操作状态。1 echo "Waiting for MongoDBSearch resource to reach Running phase..." 2 kubectl --context "${K8S_CTX}" -n "${MDB_NS}" wait \ 3 --for=jsonpath='{.status.phase}'=Running mdbs/mdbs --timeout=300s
必需。为MongoDB Search 和 Vector Search 配置外部访问权限。
启用外部MongoDB实例能够连接到搜索服务,您必须为MongoDB Search 和 Vector Search 配置外部访问权限。您可以创建一个 LoadBalancer 服务,在Kubernetes集群外部公开搜索Pod。
以下服务使用可从Kubernetes集群外部访问的外部IP解决或主机名公开端口 27027 上的 MongoDBSearch 服务。
1 kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - <<YAML 2 apiVersion: v1 3 kind: Service 4 metadata: 5 name: ${MDB_SEARCH_SERVICE_NAME} 6 spec: 7 type: LoadBalancer 8 selector: 9 app: mdbs-search-svc 10 ports: 11 - name: mongot 12 port: 27027 13 targetPort: 27027 14 YAML 15 16 echo "Waiting for external IP to be assigned to service ${MDB_SEARCH_SERVICE_NAME}..." 17 TIMEOUT=120 # 2 minutes timeout 18 ELAPSED=0 19 while [ ${ELAPSED} -lt ${TIMEOUT} ]; do 20 EXTERNAL_IP=$(kubectl get service "${MDB_SEARCH_SERVICE_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" -o jsonpath='{.status.loadBalancer.ingress[0].ip}' 2>/dev/null) 21 if [ -n "${EXTERNAL_IP}" ] && [ "${EXTERNAL_IP}" != "null" ]; then 22 echo "External IP assigned: ${EXTERNAL_IP}" 23 break 24 fi 25 echo "Still waiting for external IP assignment... (${ELAPSED}s/${TIMEOUT}s)" 26 sleep 5 27 ELAPSED=$((ELAPSED + 5)) 28 done 29 30 if [ ${ELAPSED} -ge ${TIMEOUT} ]; then 31 echo "ERROR: Timeout reached (${TIMEOUT}s) while waiting for external IP assignment" 32 echo "LoadBalancer service may take longer to provision or there may be an issue" 33 exit 1 34 fi
可选。查看命名空间中所有运行的Pod。
查看MongoDB副本集成员、 Kubernetes Operator 的MongoDB控制器以及搜索节点的命名空间Pod 中运行的所有 Pod。
1 echo; echo "MongoDBSearch resource" 2 kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get mdbs/mdbs 3 echo; echo "Search pods running in cluster ${K8S_CTX}" 4 kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get pods -l app=mdbs-search-svc 5 echo; echo "All pods in namespace ${MDB_NS}" 6 kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get pods
后续步骤
现在,您已成功部署MongoDB Search 和 Vector Search 以与外部MongoDB Enterprise Edition 一起使用,您可以将数据添加到MongoDB 集群,创建MongoDB Search 和 Vector Search 索引,并对数据运行查询。要学习;了解更多信息,请参阅MongoDB搜索和向量搜索设置。