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.2.0 o superior servidor. Este procedimiento demuestra cómo implementar y configurar el proceso mongot en tu clúster de Kubernetes para utilizar una nueva implementación de set de réplicas externo o una ya existente. Este tutorial demuestra cómo configurar una implementación segura con TLS habilitado. Debe proporcionar los certificados TLS:
El certificado del servidor y la clave para el servicio MongoDBSearch.
El certificado CA público para la base de datos externa de MongoDB.
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.2 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.
Base de datos externa TLS
Tu implementación externa de MongoDB Enterprise debe estar configurada para usar y requerir conexiones TLS.
Archivo de CA de BD externa
Debe tener el archivo del certificado de la Autoridad de Certificación (CA) pública (por ejemplo,
external-ca.crt) que se utilizó para firmar los certificados del servidor de su implementación externa de MongoDB. Necesitará este archivo localmente.Archivos de certificados del servicio de búsqueda
Debe tener un certificado de servidor TLS válido y una llave privada (por ejemplo,
search-service.crt,search-service.key) para el servicio MongoDBSearch. Este certificado debe ser válido para el nombre de host que utilizará para acceder al servicio (por ejemplo,mdbs-search.example.com).
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.useGrpcForSearchtrue
Configura un usuario de Cloud Manager u Ops Manager para MongoDB Search y búsqueda vectorial
Debes crear un usuario con el rol. En searchCoordinator las 8 versiones,2 y posteriores de MongoDB, el rol es un rol integrado. Debes crear un usuario y asignarle el searchCoordinator rol.
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:
mongoshEn, ejecute los siguientes comandos:
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 establecer 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 ejecute los comandos en su terminal:
1 export K8S_CTX="<your kubernetes context here>" 2 3 export MDB_NS="mongodb" 4 5 export MDB_VERSION="8.2.0" 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_TLS_CA_SECRET_NAME="ca" 12 export MDB_SEARCH_TLS_SECRET_NAME="mdbs-search-tls" 13 14 export MDB_SEARCH_SERVICE_NAME="mdbs-search" 15 export MDB_SEARCH_HOSTNAME="mdbs-search.example.com" 16 17 # External MongoDB replica set members - REPLACE THESE VALUES with your actual external MongoDB hosts 18 # In production, replace with your actual external MongoDB replica set members 19 export MDB_EXTERNAL_HOST_0="mdbc-rs-0.mdbc-rs-svc.${MDB_NS}.svc.cluster.local:27017" 20 export MDB_EXTERNAL_HOST_1="mdbc-rs-1.mdbc-rs-svc.${MDB_NS}.svc.cluster.local:27017" 21 export MDB_EXTERNAL_HOST_2="mdbc-rs-2.mdbc-rs-svc.${MDB_NS}.svc.cluster.local:27017" 22 23 # REPLACE with your actual external MongoDB replica set name 24 export MDB_EXTERNAL_REPLICA_SET_NAME="mdbc-rs" 25 26 export OPERATOR_HELM_CHART="mongodb/mongodb-kubernetes" 27 export OPERATOR_ADDITIONAL_HELM_VALUES="" 28 29 export MDB_CONNECTION_STRING="mongodb://mdb-user:${MDB_USER_PASSWORD}@${MDB_EXTERNAL_HOST_0}/?replicaSet=${MDB_EXTERNAL_REPLICA_SET_NAME}&tls=true&tlsCAFile=/tls/ca.crt"
Tenga en cuenta que estas variables de entorno solo están disponibles en la sesión de terminal actual y deberán configurarse nuevamente en cualquier nueva sesión de terminal.
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 los recursos personalizados MongoDB, MongoDBOpsManager y MongoDBSearch, y gestiona el ciclo de vida de sus implementaciones de MongoDB. Si ya has instalado los Controladores de MongoDB para el operador de Kubernetes, omita este paso. De lo contrario, instale los controladores de MongoDB para Kubernetes Operator desde el Helm repositorio que agregó 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 de MongoDBSearch y gestiona el ciclo de vida de sus 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 Create admin user secret 2 kubectl create secret generic mdb-admin-user-password \ 3 --from-literal=password="${MDB_ADMIN_USER_PASSWORD}" \ 4 --dry-run=client -o yaml | kubectl apply --context "${K8S_CTX}" --namespace "${MDB_NS}" -f - 5 6 Create search sync source user secret 7 kubectl create secret generic "${MDB_RESOURCE_NAME}-search-sync-source-password" \ 8 --from-literal=password="${MDB_SEARCH_SYNC_USER_PASSWORD}" \ 9 --dry-run=client -o yaml | kubectl apply --context "${K8S_CTX}" --namespace "${MDB_NS}" -f - 10 11 Create regular user secret 12 kubectl create secret generic mdb-user-password \ 13 --from-literal=password="${MDB_USER_PASSWORD}" \ 14 --dry-run=client -o yaml | kubectl apply --context "${K8S_CTX}" --namespace "${MDB_NS}" -f - 15 16 echo "User secrets created."
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:
Crea un recurso personalizado MongoDBSearch llamado
mdbs.Este recurso contiene lo siguiente:
spec.source.external.hostAndPortsLista de miembros externos del set de réplicas de MongoDB.
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.source.external.tls.ca.nameConfigura los pods de MongoDBSearch para confiar en la base de datos externa. Señala el secreto de Kubernetes que contiene el certificado de CA público para tu MongoDB externo.
spec.security.tls.certificateKeySecretRef.nameAsegura el servicio MongoDBSearch. Apunta al secreto de Kubernetes que contiene el certificado de servidor TLS y la llave privada que los pods de MongoDBSearch presentarán a los clientes entrantes.
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: ${MDB_SEARCH_RESOURCE_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 tls: 14 ca: 15 name: ${MDB_TLS_CA_SECRET_NAME} 16 username: search-sync-source 17 passwordSecretRef: 18 name: ${MDB_RESOURCE_NAME}-search-sync-source-password 19 key: password 20 security: 21 tls: 22 certificateKeySecretRef: 23 name: ${MDB_SEARCH_TLS_SECRET_NAME} 24 resourceRequirements: 25 limits: 26 cpu: "3" 27 memory: 5Gi 28 requests: 29 cpu: "2" 30 memory: 3Gi 31 EOF Espere a que se complete la implementación del recurso MongoDBSearch.
Cuando aplica 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 recurso
mdbsseaRunning, lo que indica que el StatefulSet de MongoDB Search está operativo.1 echo "Waiting for MongoDBSearch resource to reach Running phase..." 2 3 kubectl --context "${K8S_CTX}" -n "${MDB_NS}" wait --for=jsonpath='{.status.phase}'=Running mdbs/"${MDB_SEARCH_RESOURCE_NAME:-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.
Este servicio expone el servicio MongoDBSearch en el puerto 27028 con una dirección IP externa o un nombre de host accesible 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_SERVICE_NAME} 6 spec: 7 type: LoadBalancer 8 selector: 9 app: ${MDB_SEARCH_RESOURCE_NAME:-mdbs}-search-svc 10 ports: 11 - name: mongot 12 port: 27028 13 targetPort: 27028 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
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.