您可以使用Kubernetes 操作符 并部署mongot进程资源,以在Kubernetes集群上与MongoDB Community Edition v8.2.0 或更高版本一起运行。mongot进程支持MongoDB Search搜索向量搜索。以下过程演示了如何部署和配置MongoDB Search 和 向量搜索,以便使用Kubernetes集群中的新副本集或现有副本集来运行。
先决条件
要部署MongoDB Search 和 Vector Search,您必须具备以下条件:
正在运行的 Kubernetes 集群。
Kubernetes命令行工具
kubectl,配置为与集群通信。Helm( Kubernetes的包管理器),用于安装Kubernetes Operator。
Bash v5.1 或更高版本,用于运行本教程中的命令。
步骤
必填。设置环境变量。
要设立用于此过程后续步骤的环境变量,请复制以下内容,设立环境变量的值,然后加载环境变量:
1 # set it to the context name of the k8s cluster 2 export K8S_CTX="<local cluster context>" 3 4 # the following namespace will be created if not exists 5 export MDB_NS="mongodb" 6 7 # minimum required MongoDB version for running MongoDB Search is 8.2.0 8 export MDB_VERSION="8.2.0" 9 10 # root admin user for convenience, not used here at all in this guide 11 export MDB_ADMIN_USER_PASSWORD="admin-user-password-CHANGE-ME" 12 # regular user performing restore and search queries on sample mflix database 13 export MDB_USER_PASSWORD="mdb-user-password-CHANGE-ME" 14 # user for MongoDB Search to connect to the replica set to synchronise data from 15 export MDB_SEARCH_SYNC_USER_PASSWORD="search-sync-user-password-CHANGE-ME" 16 17 export OPERATOR_HELM_CHART="mongodb/mongodb-kubernetes" 18 # comma-separated key=value pairs for additional parameters passed to the helm-chart installing the operator 19 export OPERATOR_ADDITIONAL_HELM_VALUES="" 20 21 export MDB_CONNECTION_STRING="mongodb://mdb-user:${MDB_USER_PASSWORD}@mdbc-rs-0.mdbc-rs-svc.${MDB_NS}.svc.cluster.local:27017/?replicaSet=mdbc-rs"
有条件。添加MongoDB Helm存储库。
Helm 自动部署和管理 Kubernetes 上的 MongoDB 实例。如果您已经拥有包含用于安装 Kubernetes 操作符的 Helm 图表的 Helm 存储库,请跳过此步骤。否则,请添加 Helm存储库。
要添加 Helm存储库,请复制、粘贴并运行以下命令:
1 helm repo add mongodb https://mongodb.github.io/helm-charts 2 helm repo update mongodb 3 helm search repo mongodb/mongodb-kubernetes
有条件。为Kubernetes Operator 安装MongoDB控制器。
Kubernetes 操作符监视 MongoDBCommunity 和 MongoDBSearch 自定义资源,并管理 MongoDB 部署的生命周期。如果您已经安装了MongoDB Controllers for Kubernetes 操作符,请跳过此步骤。否则,请从您在上一步中添加的 Helm存储库安装MongoDB Controllers for Kubernetes 操作符。
要在 mongodb 命名空间中安装 MongoDB Controllers for Kubernetes 操作符,请复制、粘贴并运行以下命令:
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用户密钥。
MongoDB需要身份验证才能安全访问权限。在此步骤中,您将创建三个Kubernetes密钥:
mdb-admin-user-password: MongoDB管理员的档案。mdb-user-password:授权执行搜索查询的用户的档案。mdbc-rs-search-sync-source-password:专用搜索用户的档案,由mongot进程在内部用于同步数据和管理索引。
Kubernetes 操作符使用这些密钥中的密码在 MongoDB 数据库中自动创建用户。
要创建密钥,请复制、粘贴并运行以下命令:
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}"
有条件。创建和部署MongoDB Community资源。
如果您已经部署了MongoDB Community Edition,请跳过此步骤。否则,部署MongoDB Community Edition。
要部署MongoDB Community Edition,请完成以下步骤:
创建名为
mdb-rs的MongoDBCommunity自定义资源。该资源定义了
mongod和mongodb-agent容器的 CPU 和内存资源,并设置了以下三个用户:mdb-user可以恢复数据库和运行搜索查询的用户。该用户使用
mdb-user-password密钥来执行这些操作。search-sync-sourceMongoDB 搜索用于连接到 MongoDB 数据库以管理和构建索引的用户。此用户使用Kubernetes 操作符创建的
searchCoordinator角色。这会使用mdbc-rs-search-sync-source-password密钥将mongot连接到mongod。admin-user数据库管理员用户。
Kubernetes 操作符使用此资源配置具有 3 个成员的 MongoDB 副本集。
要创建密钥,请复制、粘贴并运行以下命令:
1 kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - <<EOF 2 apiVersion: mongodbcommunity.mongodb.com/v1 3 kind: MongoDBCommunity 4 metadata: 5 name: mdbc-rs 6 spec: 7 version: ${MDB_VERSION} 8 type: ReplicaSet 9 members: 3 10 security: 11 authentication: 12 ignoreUnknownUsers: true 13 modes: 14 - SCRAM 15 agent: 16 logLevel: DEBUG 17 statefulSet: 18 spec: 19 template: 20 spec: 21 containers: 22 - name: mongod 23 resources: 24 limits: 25 cpu: "2" 26 memory: 2Gi 27 requests: 28 cpu: "1" 29 memory: 1Gi 30 - name: mongodb-agent 31 resources: 32 limits: 33 cpu: "1" 34 memory: 2Gi 35 requests: 36 cpu: "0.5" 37 memory: 1Gi 38 users: 39 # admin user with root role 40 - name: mdb-admin 41 db: admin 42 # a reference to the secret containing user password 43 passwordSecretRef: 44 name: mdb-admin-user-password 45 scramCredentialsSecretName: mdb-admin-user 46 roles: 47 - name: root 48 db: admin 49 # user performing search queries 50 - name: mdb-user 51 db: admin 52 # a reference to the secret containing user password 53 passwordSecretRef: 54 name: mdb-user-password 55 scramCredentialsSecretName: mdb-user-scram 56 roles: 57 - name: restore 58 db: sample_mflix 59 - name: readWrite 60 db: sample_mflix 61 # user used by MongoDB Search to connect to MongoDB database to 62 # synchronize data from. 63 # For MongoDB <8.2, the operator will be creating the 64 # searchCoordinator custom role automatically. 65 # From MongoDB 8.2, searchCoordinator role will be a 66 # built-in role. 67 - name: search-sync-source 68 db: admin 69 # a reference to the secret that will be used to generate the user's password 70 passwordSecretRef: 71 name: mdbc-rs-search-sync-source-password 72 scramCredentialsSecretName: mdbc-rs-search-sync-source 73 roles: 74 - name: searchCoordinator 75 db: admin 76 EOF 等待
MongoDBCommunity资源部署完成。当您应用
MongoDBCommunity自定义资源时, Kubernetes 操作符开始部署MongoDB节点 (Pod)。此步骤会暂停执行,直到mdbc-rs资源的状态阶段为Running,这表示MongoDB Community副本集可操作。1 echo "Waiting for MongoDBCommunity resource to reach Running phase..." 2 kubectl --context "${K8S_CTX}" -n "${MDB_NS}" wait \ 3 --for=jsonpath='{.status.phase}'=Running mdbc/mdbc-rs --timeout=400s 4 echo; echo "MongoDBCommunity resource" 5 kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get mdbc/mdbc-rs 6 echo; echo "Pods running in cluster ${K8S_CTX}" 7 kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get pods
必需。为MongoDB Search 和 Vector Search 创建并部署资源。
您可以部署一个搜索节点实例,而无需任何负载均衡。要部署,请完成以下步骤:
创建名为
mdbc-rs的MongoDBSearch自定义资源。此资源指定搜索节点的 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: mdbc-rs 6 spec: 7 resourceRequirements: 8 limits: 9 cpu: "3" 10 memory: 5Gi 11 requests: 12 cpu: "2" 13 memory: 3Gi 14 EOF 等待
MongoDBSearch资源部署完成。当您应用
MongoDBSearch自定义资源时, Kubernetes 操作符开始部署搜索节点 (pod)。此步骤会暂停执行,直到mdbc-rsMongoDBSearch资源的状态阶段为Running,这表示MongoDB搜索可运行。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/mdbc-rs --timeout=300s
可选。查看命名空间中所有运行的Pod。
查看MongoDB副本集成员、 Kubernetes Operator 的MongoDB控制器以及搜索节点的命名空间Pod 中运行的所有 Pod。
1 echo; echo "MongoDBCommunity resource" 2 kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get mdbc/mdbc-rs 3 echo; echo "MongoDBSearch resource" 4 kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get mdbs/mdbc-rs 5 echo; echo "Pods running in cluster ${K8S_CTX}" 6 kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get pods
后续步骤
现在您已成功部署MongoDB 搜索和向量搜索以便与MongoDB Community Edition一起使用,接下来将数据添加到您的MongoDB 集群,创建MongoDB 搜索和向量搜索搜索索引,并根据您的数据运行查询。要学习;了解更多信息,请参阅使用MongoDB Search 和 Vector Search。