Puedes utilizar el Operador de Kubernetes para implementar recursos de MongoDB Search y búsqueda vectorial que funcionen con MongoDB enterprise v8.0.10 o una versión superior en un clúster de Kubernetes. Este procedimiento demuestra cómo implementar y configurar el proceso mongot para que se ejecute con un set de réplicas nuevo o existente en su 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 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.
Ops Manager o un proyecto de MongoDB Cloud Manager y credenciales API.
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:
# set it to the context name of the k8s clusterexport K8S_CTX="<local cluster context>"
# the following namespace will be created if not existsexport MDB_NS="mongodb"
# name of the MongoDB Custom Resource.export MDB_RESOURCE_NAME="mdb-rs"
# OM/CM's project name to be used to manage mongodb replica setexport OPS_MANAGER_PROJECT_NAME="<arbitrary project name>"
# URL to Cloud Manager or Ops Manager instanceexport OPS_MANAGER_API_URL="https://cloud-qa.mongodb.com"
# The API key can be an Org Owner - the operator can create the project automatically then.# The API key can also be created in a particular project that was created manually with the Project Owner scope .export OPS_MANAGER_API_USER="abcdefg"export OPS_MANAGER_API_KEY="00000-abcd-efgh-1111-12345678"export OPS_MANAGER_ORG_ID="62a73abcdefgh12345678"
# minimum required MongoDB version for running MongoDB Search is 8.0.10export MDB_VERSION="8.0.10"
# root admin user for convenience, not used here at all in this guideexport MDB_ADMIN_USER_PASSWORD="admin-user-password-CHANGE-ME"# regular user performing restore and search queries on sample mflix databaseexport MDB_USER_PASSWORD="mdb-user-password-CHANGE-ME"# user for MongoDB Search to connect to the replica set to synchronise data fromexport MDB_SEARCH_SYNC_USER_PASSWORD="search-sync-user-password-CHANGE-ME"
export OPERATOR_HELM_CHART="mongodb/mongodb-kubernetes"# comma-separated key=value pairs for additional parameters passed to the helm-chart installing the operatorexport OPERATOR_ADDITIONAL_HELM_VALUES=""
export MDB_CONNECTION_STRING="mongodb://mdb-user:${MDB_USER_PASSWORD}@${MDB_RESOURCE_NAME}-svc.${MDB_NS}.svc.cluster.local:27017/?replicaSet=${MDB_RESOURCE_NAME}"Condicional. Agrega el repositorio Helm de MongoDB.
Helm automatiza la implementación y gestión de instancias de MongoDB en Kubernetes. Si ya agregaste el repositorio de Helm que contiene la gráfica de Helm para instalar el operador Kubernetes Operator, omite este paso. De lo contrario, añade el repositorio Helm.
Para añadir, copiar, pegar y ejecutar el siguiente comando:
helm repo add mongodb https://mongodb.github.io/helm-chartshelm repo update mongodbhelm search repo mongodb/mongodb-kubernetesCondicional. Instale los controladores de MongoDB para el Operador de Kubernetes.
El Operador de Kubernetes observa MongoDB, MongoDBOpsManager 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 lo siguiente:
helm upgrade --install --debug --kube-context "${K8S_CTX}" \ --create-namespace \ --namespace="${MDB_NS}" \ mongodb-kubernetes \ ${OPERATOR_ADDITIONAL_HELM_VALUES:+--set ${OPERATOR_ADDITIONAL_HELM_VALUES}} \ "${OPERATOR_HELM_CHART}"Condicional. Crear e implementar el recurso MongoDB Enterprise.
Si ya ha implementado MongoDB Enterprise, pase al siguiente paso. De lo contrario, implemente el recurso MongoDB Enterprise.
Para implementar MongoDB Enterprise, complete los siguientes pasos:
Crear un recurso personalizado
MongoDBdenominadomdb-rs.El recurso define los recursos de CPU y memoria para los contenedores
mongodymongodb-agente instruye al Operador de Kubernetes para configurar un set de réplicas de MongoDB con 3 miembros:Para implementar MongoDB Enterprise, copia, pega y ejecuta lo siguiente en el namespace:
kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - <<EOFapiVersion: mongodb.com/v1kind: MongoDBmetadata: name: ${MDB_RESOURCE_NAME}spec: members: 3 version: ${MDB_VERSION}-ent type: ReplicaSet opsManager: configMapRef: name: om-project credentials: om-credentials security: authentication: enabled: true ignoreUnknownUsers: true modes: - SCRAM agent: logLevel: DEBUG statefulSet: spec: template: spec: containers: - name: mongodb-enterprise-database resources: limits: cpu: "2" memory: 2Gi requests: cpu: "1" memory: 1GiEOFEspera a que se complete la implementación del recurso
MongoDB.Cuando se aplica el recurso personalizado
MongoDB, 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.echo "Waiting for MongoDB resource to reach Running phase..."kubectl --context "${K8S_CTX}" -n "${MDB_NS}" wait --for=jsonpath='{.status.phase}'=Running "mdb/${MDB_RESOURCE_NAME}" --timeout=400secho; echo "MongoDB resource"kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get "mdb/${MDB_RESOURCE_NAME}"echo; echo "Pods running in cluster ${K8S_CTX}"kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get pods
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.
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 implementaste MongoDB Server y planeas implementar MongoDB Search y búsqueda vectorial:
# admin user with root rolekubectl --context "${K8S_CTX}" --namespace "${MDB_NS}" \ create secret generic mdb-admin-user-password \ --from-literal=password="${MDB_ADMIN_USER_PASSWORD}"
kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - <<EOFapiVersion: mongodb.com/v1kind: MongoDBUsermetadata: name: mdb-adminspec: username: mdb-admin db: admin mongodbResourceRef: name: ${MDB_RESOURCE_NAME} passwordSecretKeyRef: name: mdb-admin-user-password key: password roles: - name: root db: adminEOF
# user used by MongoDB Search to connect to MongoDB database to synchronize data from# For MongoDB <8.2, the operator will be creating the searchCoordinator custom role automatically# From MongoDB 8.2, searchCoordinator role will be a built-in role.kubectl --context "${K8S_CTX}" --namespace "${MDB_NS}" \ create secret generic mdb-rs-search-sync-source-password \ --from-literal=password="${MDB_SEARCH_SYNC_USER_PASSWORD}"kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - <<EOFapiVersion: mongodb.com/v1kind: MongoDBUsermetadata: name: search-sync-source-userspec: username: search-sync-source db: admin mongodbResourceRef: name: ${MDB_RESOURCE_NAME} passwordSecretKeyRef: name: mdb-rs-search-sync-source-password key: password roles: - name: searchCoordinator db: adminEOF
# user performing search querieskubectl --context "${K8S_CTX}" --namespace "${MDB_NS}" \ create secret generic mdb-user-password \ --from-literal=password="${MDB_USER_PASSWORD}"kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - <<EOFapiVersion: mongodb.com/v1kind: MongoDBUsermetadata: name: mdb-userspec: username: mdb-user db: admin mongodbResourceRef: name: ${MDB_RESOURCE_NAME} passwordSecretKeyRef: name: mdb-user-password key: password roles: - name: readWrite db: sample_mflixEOFRequerido. 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.
kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - <<EOFapiVersion: mongodb.com/v1kind: MongoDBSearchmetadata: name: ${MDB_RESOURCE_NAME}spec: # no need to specify source.mongodbResourceRef if MongoDBSearch CR has the same name as MongoDB CR # the operator infer it automatically resourceRequirements: limits: cpu: "3" memory: 5Gi requests: cpu: "2" memory: 3GiEOFEspera a que se complete la implementación del recurso
MongoDBSearch.Cuando se aplica el recurso personalizado
MongoDBSearch, el operador de Kubernetes empieza a implementar los nodos de búsqueda (pods). Este paso pausa la ejecución hasta que la fase de estado del recursomdbc-rsseaRunning, lo que indica que el set de réplicas de MongoDB Community está operativo.echo "Waiting for MongoDBSearch resource to reach Running phase..."kubectl --context "${K8S_CTX}" -n "${MDB_NS}" wait --for=jsonpath='{.status.phase}'=Running mdbs/mdb-rs --timeout=300s
opcional. Verifica el estado del recurso MongoDB Enterprise.
Asegúrese de que la implementación de recursos de MongoDB con MongoDBSearch sea exitosa.
echo "Waiting for MongoDB resource to reach Running phase..."kubectl --context "${K8S_CTX}" -n "${MDB_NS}" wait --for=jsonpath='{.status.phase}'=Running "mdb/${MDB_RESOURCE_NAME}" --timeout=400sopcional. 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.
echo; echo "MongoDB resource"kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get "mdb/${MDB_RESOURCE_NAME}"echo; echo "MongoDBSearch resource"kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get mdbs/mdb-rsecho; echo "Pods running in cluster ${K8S_CTX}"kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get podsPróximos pasos
Ahora que has implementado con éxito MongoDB Search y búsqueda vectorial para su uso con MongoDB Enterprise Edition, puedes agregar datos en tu clúster de MongoDB, crear índices de MongoDB Search y búsqueda vectorial, y ejecutar queries en tus datos. Para obtener más información, consulta Configuración de MongoDB Search y búsqueda vectorial.