Instalar y usar MongoDB Search y búsqueda vectorial con una instancia externa de MongoDB Enterprise Edition
Puedes utilizar el operador Kubernetes para implementar la búsqueda de MongoDB y la búsqueda vectorial en un clúster de Kubernetes para ejecutarlo con un MongoDB Enterprise Edition v8.0.10 o superior servidor. Este procedimiento demuestra cómo implementar y configurar el mongot proceso en su clúster de Kubernetes para usar una nueva o existente implementación de set de réplicas externas.
Requisitos previos
Para implementar MongoDB Search y búsqueda vectorial, se debe contar con lo siguiente:
Un clúster de Kubernetes en ejecución con
kubeconfigdisponible localmente.Herramienta de línea de comandos de Kubernetes,
kubectl, configurada para comunicarse con su clúster.Helm, el gestor de paquetes para Kubernetes, para instalar el Operador de Kubernetes.
Bash v5.1 o superior para ejecutar los comandos en este tutorial.
Un conjunto de réplicas de MongoDB Enterprise Edition que ejecuta la versión 8.0.10 o superior para almacenar datos.
Para obtener más información sobre la implementación de MongoDB Enterprise, consulte Implementación y configuración de recursos de bases de datos MongoDB.
Un MongoDB Cloud Manager o Ops Manager en ejecución para gestionar tareas de MongoDB.
Antes de comenzar
Antes de instalar MongoDB Search y búsqueda vectorial usando el Operador de Kubernetes, debes hacer lo siguiente:
Configuración de los parámetros de Cloud Manager u Ops Manager para MongoDB Search y búsqueda vectorial
Iniciar sesión en el Cloud Manager o en la interfaz de usuario del Ops Manager y realiza los siguientes pasos para configurar el Cloud Manager o el Ops Manager para la búsqueda de MongoDB y la búsqueda vectorial.
Modifica tu configuración de gestión de implementación de Cloud Manager u Ops Manager.
Haz clic en el botón Modify para abrir el editor de configuración de implementación.
Haz clic en Advanced Configuration Options en la sección Process Configuration.
Haz clic en el botón Add Option y selecciona setParameter Startup Option del menú desplegable.
Agrega los siguientes parámetros en los campos, uno por uno, haciendo clic en Add después de agregar el nombre y el valor:
ParameterValormongotHostEl hostname y puerto de búsqueda. Por ejemplo:
search-node1.example.com:27017.searchIndexManagementHostAndPortEl hostname y puerto de búsqueda. Por ejemplo:
search-node1.example.com:27017.skipAuthenticationToSearchIndexManagementServerfalsesearchTLSModeTu modo de TLS configurado. Por ejemplo,
preferTLS, si el procesomongotestá configurado para aceptar conexiones TLS.
Configura un usuario de Cloud Manager u Ops Manager para MongoDB Search y búsqueda vectorial
Debe crear un usuario con el rol searchCoordinator. En las versiones de MongoDB 8.2 y posteriores, el searchCoordinator es una funcionalidad incorporada. Debe crear un usuario y asignarle el rol correspondiente. Para las versiones anteriores a 8.2 y 8.0.10 de MongoDB, o posteriores, debe crear manualmente el rol y asignar los privilegios antes de crear el usuario. Seleccione la pestaña que corresponda a la versión de MongoDB que está ejecutando para crear un usuario con el rol searchCoordinator.
Para crear el usuario y asignarle el searchCoordinator rol integrado, complete los siguientes pasos utilizando la interfaz de usuario de Cloud Manager o Ops Manager o mongosh el:
Para crear el rol de searchCoordinator con los privilegios y luego agregar un usuario con el rol de searchCoordinator, complete los siguientes pasos en la interfaz de usuario de Cloud Manager o MongoDB Ops Manager:
Agrega los privilegios de base de datos que se asignarán al rol.
En la sección Privileges, haga clic en Add Privilege.
Para Resource, ingresa
__mdb_internal_searchpara la base de datos.No introduzcas nada en el campo de colección.
Bajo Actions, agregue las siguientes acciones.
changeStreamcleanupStructuredEncryptionData,compactStructuredEncryptionDatacollStatsconvertToCappedcreateCollection,dropCollection,listCollections,renameCollectionSameDBcreateIndex,dropIndex,listIndexescreateSearchIndexes,dropSearchIndex,listSearchIndexes,updateSearchIndexdbHash,dbStatsfind,insert,remove,updatekillCursorsplanCacheRead
In mongosh, run the following commands:
Crear el rol personalizado.
db.createRole({ role: "searchCoordinator", privileges: [ { resource: { db: "__mdb_internal_search", collection: "" }, actions: [ "changeStream", "cleanupStructuredEncryptionData", "collStats", "compactStructuredEncryptionData", "convertToCapped", "createCollection", "createIndex", "createSearchIndexes", "dbHash", "dbStats", "dropCollection", "dropIndex", "dropSearchIndex", "find", "insert", "killCursors", "listCollections", "listIndexes", "listSearchIndexes", "planCacheRead", "remove", "renameCollectionSameDB", "update", "updateSearchIndex" ] }, { resource: { cluster: true }, actions: [ "bypassDefaultMaxTimeMS" ] } ], roles: [ { role: "clusterMonitor", db: "admin" }, { role: "directShardOperations", db: "admin" }, { role: "readAnyDatabase", db: "admin" } ] });
Configura tu entorno
Prepara tu entorno para ejecutar el código de muestra de este tutorial en una terminal.
Obligatorio. Configurar las variables de entorno.
Para configurar las variables de entorno para su uso en los pasos posteriores de este procedimiento, copie lo siguiente, establezca los valores de las variables de entorno y luego cargue las variables de entorno:
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_HOSTNAME="mdbs-search" 12 13 # External MongoDB replica set members - REPLACE THESE VALUES with your actual external MongoDB hosts 14 # In production, replace with your actual external MongoDB replica set members 15 export MDB_EXTERNAL_HOST_0="mdbc-rs-0.mdbc-rs-svc.${MDB_NS}.svc.cluster.local:27017" 16 export MDB_EXTERNAL_HOST_1="mdbc-rs-1.mdbc-rs-svc.${MDB_NS}.svc.cluster.local:27017" 17 export MDB_EXTERNAL_HOST_2="mdbc-rs-2.mdbc-rs-svc.${MDB_NS}.svc.cluster.local:27017" 18 19 # REPLACE with your external MongoDB keyfile secret name 20 export MDB_EXTERNAL_KEYFILE_SECRET_NAME="mdbc-rs-keyfile" 21 22 # REPLACE with the actual keyfile content from your external MongoDB replica set 23 # For testing, this will be automatically generated by the MongoDB Community resource 24 export MDB_EXTERNAL_KEYFILE_CONTENT="your-mongodb-keyfile-content-CHANGE-ME" 25 26 # REPLACE with your actual external MongoDB replica set name 27 export MDB_EXTERNAL_REPLICA_SET_NAME="mdbc-rs" 28 29 export OPERATOR_HELM_CHART="mongodb/mongodb-kubernetes" 30 export OPERATOR_ADDITIONAL_HELM_VALUES="" 31 32 export MDB_CONNECTION_STRING="mongodb://mdb-user:${MDB_USER_PASSWORD}@${MDB_EXTERNAL_HOST_0}/?replicaSet=${MDB_EXTERNAL_REPLICA_SET_NAME}"
Condicional. Añade el repositorio Helm de MongoDB.
Helm automatiza la implementación y la gestión de instancias de MongoDB en Kubernetes. Si ya has agregado el Helm repositorio que contiene la Helm gráfica para instalar el operador de Kubernetes, omite este paso. De lo contrario, añade el repositorio Helm.
Para añadir, copiar, pegar y ejecutar el siguiente comando:
1 helm repo add mongodb https://mongodb.github.io/helm-charts 2 helm repo update mongodb 3 helm search repo mongodb/mongodb-kubernetes
Condicional. Instale los controladores de MongoDB para el Operador de Kubernetes.
El Operador de Kubernetes supervisa MongoDB, MongoDBOpsManager y MongoDBSearch recursos personalizados y gestiona el ciclo de vida de las implementaciones de MongoDB. Si ya has instalado los Controladores de MongoDB para el operador de Kubernetes, omita este paso. De lo contrario, instala los Controladores de MongoDB para el Operador de Kubernetes desde el Helm repositorio que agregaste en el paso anterior.
Para instalar los controladores de MongoDB para Kubernetes operador en el namespace mongodb, copie, pegue y ejecute lo siguiente:
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}"
El comando precedente instala el Kubernetes operador en el namespace mongodb, el cual se crea si aún no existe. Después de la instalación, el operador de Kubernetes supervisa los recursos personalizados MongoDBSearch y gestiona el ciclo de vida de tus implementaciones de MongoDB Search y búsqueda vectorial.
Instala MongoDB Search y búsqueda vectorial
Obligatorio. Crear y cargar los secretos de usuario de MongoDB.
El proceso mongot requiere credenciales de autenticación para conectarse a tu implementación externa de MongoDB para crear índices de búsqueda y ejecutar consultas de búsqueda. Este paso crea los siguientes secretos de Kubernetes:
mdb-admin-user-password- credenciales para el administrador de MongoDB.mdb-user-password- credenciales para el usuario autorizado a realizar consultas de búsqueda.mdbc-rs-search-sync-source-password- credenciales para un usuario de búsqueda dedicado utilizado internamente por el procesomongotpara sincronizar los datos y gestionar los índices.
El operador de Kubernetes monta estos secretos en los pods de MongoDB.
Para crear los secretos, copia, pega y ejecuta lo siguiente en el namespace donde planeas implementar MongoDB Search y búsqueda vectorial:
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}"
Requerido. Implemente el secreto del archivo de claves que se utilizará para conectarse a la mongod.
Para autenticar las conexiones desde su MongoDB externo, el proceso mongot utiliza el mismo archivo de claves que utilizan los miembros de su conjunto de réplicas de MongoDB externo para la autenticación interna entre los miembros del conjunto de réplicas.
Para crear un secreto de Kubernetes que contenga el contenido del archivo de clave de tu MongoDB externo, copia, pega y ejecuta el siguiente comando:
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}"
Requerido. Crea y implementa el recurso para MongoDB Search y la búsqueda vectorial.
Puedes implementar una instancia del nodo de búsqueda sin balanceo de carga. Para implementar, completa los siguientes pasos:
Crear un recurso personalizado
MongoDBSearchdenominadomdbs.Este recurso contiene lo siguiente:
spec.source.external.hostAndPortsLista de miembros externos del set de réplicas de MongoDB.
spec.source.external.keyfileSecretRefSecreto de Keyfile utilizado por los miembros externos del conjunto de réplicas.
spec.source.usernameUsuario de sincronización de búsqueda nombre de usuario.
spec.source.passwordSecretRefContraseña de usuario de sincronización de búsqueda.
spec.resourceRequirementsRequisitos de recursos de CPU y memoria para el contenedor de búsqueda.
Para aprender más sobre la configuración de este recurso personalizado, consulta MongoDB Search y búsqueda vectorial.
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: mdbc-rs-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 Espera a que se complete la implementación del recurso
MongoDBSearch.Cuando aplicas el recurso personalizado
MongoDBSearch, el operador de Kubernetes comienza a implementar los nodos de búsqueda (pods). Este paso pausa la ejecución hasta que la fase de estado del recursomdbsseaRunning, lo que indica que el StatefulSet de MongoDB Search está operativo.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
Obligatorio. Configura el acceso externo para MongoDB Search y búsqueda vectorial.
Para permitir que tus instancias externas de MongoDB se conecten al servicio de búsqueda, debes configurar el acceso externo tanto para MongoDB Search como para búsqueda vectorial. Puedes crear un Servicio LoadBalancer que exponga los pods de búsqueda fuera del clúster de Kubernetes.
El siguiente servicio expone el servicio MongoDBSearch en el puerto 27027 con una dirección IP externa o un hostname que se puede acceder desde fuera del clúster de Kubernetes.
1 kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - <<YAML 2 apiVersion: v1 3 kind: Service 4 metadata: 5 name: ${MDB_SEARCH_HOSTNAME} 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_HOSTNAME}..." 17 TIMEOUT=120 # 2 minutes timeout 18 ELAPSED=0 19 while [ ${ELAPSED} -lt ${TIMEOUT} ]; do 20 EXTERNAL_IP=$(kubectl get service "${MDB_SEARCH_HOSTNAME}" --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
opcional. Consulta todos los pods en ejecución en tu namespace.
Visualiza todos los pods en ejecución en los pods de tu namespace para los miembros del set de réplicas MongoDB, los Controladores MongoDB para Kubernetes operador y los nodos de búsqueda.
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
Próximos pasos
Ahora que has implementado satisfactoriamente MongoDB Search y búsqueda vectorial para usar con MongoDB Enterprise Edition externa, puedes añadir datos en tu clúster de MongoDB, crear índices de búsqueda y búsqueda vectorial, y ejecutar queries sobre tus datos. Para obtener más información, consulta la Configuración de MongoDB Search y búsqueda vectorial.