Puedes usar el Operador de Kubernetes y implementar los recursos del proceso mongot para ejecutarlos con la MongoDB Community Edition v8.2.0 o superior en un clúster de Kubernetes. El proceso mongot es compatible tanto con MongoDB Search como con la búsqueda vectorial. El siguiente procedimiento demuestra cómo implementar y configurar MongoDB Search y búsqueda vectorial para funcionar con un set de réplicas nuevo o existente en tu clúster de Kubernetes.
Requisitos previos
Para implementar MongoDB Search y búsqueda vectorial, se debe contar con lo siguiente:
Un clúster de Kubernetes en ejecución.
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.
Procedimiento
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 # 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"
Condicional. Agrega el repositorio Helm de MongoDB.
Helm automatiza la implementación y la gestión de instancias de MongoDB en Kubernetes. Si ya tiene el repositorio de Helm que contiene la gráfica de Helm para instalar el operador de Kubernetes o omitir este paso. De lo contrario, añade el repositorio de Helm.
Para agregar el repositorio de Helm, copia, pega y ejecuta lo siguiente:
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 Kubernetes operador observa MongoDBCommunity y MongoDBSearch recursos personalizados y gestiona el ciclo de vida de tus implementaciones de MongoDB. Si ya instalaste los controladores de MongoDB para Kubernetes operador, omite este paso. De lo contrario, instala los controladores de MongoDB para Kubernetes operador desde el repositorio de Helm que agregaste en el paso anterior.
Para instalar los controladores de MongoDB para Kubernetes operador en el namespace mongodb, copie, pegue y ejecute los siguientes comandos:
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}"
Obligatorio. Crear y cargar los secretos de usuario de MongoDB.
MongoDB requiere autenticación para un acceso seguro. En este paso, se crean tres 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 usado internamente por el procesomongotpara sincronizar datos y administrar índices.
Kubernetes operador utiliza contraseñas de esos secretos para crear automáticamente a los usuarios en la base de datos de MongoDB.
Para crear los secretos, copia, pega y ejecuta el siguiente comando:
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}"
Condicional. Crea e implementa el recurso MongoDB Community.
Si ya implementaste MongoDB Community Edition, omite este paso. De lo contrario, implementa la versión Community Edition de MongoDB.
Para implementar la Community Edition de MongoDB, complete los siguientes pasos:
Crear un recurso personalizado
MongoDBCommunitydenominadomdb-rs.El recurso define los recursos de CPU y memoria para los contenedores
mongodymongodb-agent, y configura los siguientes tres usuarios:mdb-userUsuario que puede restaurar bases de datos y ejecutar consultas de búsqueda. Este usuario utiliza el secreto
mdb-user-passwordpara realizar estas operaciones.search-sync-sourceUsuario que MongoDB Search utiliza para conectarse a la base de datos de MongoDB con el fin de gestionar y construir índices. Este usuario utiliza el rol
searchCoordinatorque crea el operador de Kubernetes. Esto utiliza el secretomdbc-rs-search-sync-source-passwordpara conectarmongotamongod.admin-userUsuario administrador de base de datos.
El Operador de Kubernetes utiliza este recurso para configurar un set de réplicas de MongoDB con 3 nodos.
Para crear los secretos, copia, pega y ejecuta los siguientes comandos:
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 Espera a que se complete la implementación del recurso
MongoDBCommunity.Cuando se aplica el recurso personalizado
MongoDBCommunity, el operador de Kubernetes comienza a implementar los nodos de MongoDB (pods). Este paso pausa la ejecución hasta que la fase de estado del recursomdbc-rsseaRunning, lo que indica que el conjunto de réplicas MongoDB Community está operativo.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
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
MongoDBSearchdenominadomdbc-rs.Este recurso especifica los requisitos de recursos de CPU y memoria para los nodos de búsqueda. Para obtener más información sobre la configuración de este recurso personalizado, consulte Configuración de 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: mdbc-rs 6 spec: 7 resourceRequirements: 8 limits: 9 cpu: "3" 10 memory: 5Gi 11 requests: 12 cpu: "2" 13 memory: 3Gi 14 EOF Espera a que se complete la implementación del recurso
MongoDBSearch.Cuando se 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 recursomdbc-rsMongoDBSearchseaRunning, lo que indica que la Búsqueda de MongoDB está operativa.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
opcional. Verifica el estado del recurso de la Community MongoDB.
Asegúrese de que la implementación de recursos de MongoDBCommunity con MongoDBSearch sea exitosa.
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
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 "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
Próximos pasos
Ahora que ha implementado correctamente MongoDB Search y búsqueda vectorial para usarlos con MongoDB Community Edition, proceda a agregar datos a su clúster de MongoDB, cree índices de MongoDB Search y búsqueda vectorial y ejecute queries sobre sus datos. Para obtener más información, consulta Usa MongoDB Search y Búsqueda Vectorial.