Você pode usar o Kubernetes Operator para implantar o MongoDB Search e o Vector Search em um cluster do Kubernetes para ser executado com um servidor MongoDB Enterprise Edition v8.0.10 externo ou superior. Este procedimento demonstra como implantar e configurar o processo mongot em seu cluster Kubernetes para usar um sistema externo novo ou existente de conjunto de réplicas.
Pré-requisitos
Para implantar o MongoDB Search e o Vector Search, você deve ter o seguinte:
Um cluster Kubernetes em execução com
kubeconfigdisponível localmente.A ferramenta de linha de comando do Kubernetes,
kubectl, configurada para se comunicar com seu cluster.Helm, o gerenciador de pacote do Kubernetes, para instalar o Operador Kubernetes.
Bash v5.1 ou superior para executar os comandos neste tutorial.
Um conjunto de réplicas do MongoDB Enterprise Edition executando a versão 8.0.10 ou superior para armazenar dados.
Para saber mais sobre a implantação do MongoDB Enterprise, consulte Implantar e configurar recursos do banco de dados MongoDB.
Um MongoDB Cloud Manager ou Ops Manager em execução para gerenciar tarefas do MongoDB .
Antes de começar
Antes de instalar o MongoDB Search e o Vector Search usando o Kubernetes Operator, você deve fazer o seguinte:
Configurar parâmetros do Cloud Manager ou do Ops Manager para MongoDB Search e Vector Search
Faça login na interface do usuário do Cloud Manager ou do Ops Manager e execute as etapas a seguir para configurar o Cloud Manager ou o Ops Manager para o MongoDB Search e o Vector Search.
Modifique sua configuração de implantação do Cloud Manager ou Ops Manager.
Clique no botão Modify para abrir o editor de configuração de implantação.
Clique em Advanced Configuration Options na seção Process Configuration.
Clique no botão Add Option e selecione setParameter Startup Option no menu suspenso.
Adicione os seguintes parâmetros nos campos, um a um, clicando em Add após adicionar o nome e o valor:
ParâmetroValormongotHostSeu nome de host e porta de pesquisa. Por exemplo:
search-node1.example.com:27017.searchIndexManagementHostAndPortSeu nome de host e porta de pesquisa. Por exemplo:
search-node1.example.com:27017.skipAuthenticationToSearchIndexManagementServerfalsesearchTLSModeSeu modo TLS configurado. Por exemplo,
preferTLS, se o processomongotestiver configurado para aceitar conexões TLS.
Configurar um usuário do Cloud Manager ou do Ops Manager para MongoDB Search e Vector Search
Você deve criar um usuário com a função searchCoordinator. Nas versões 8.2 e posterior do MongoDB , o searchCoordinator é um role embutido. Você deve criar um usuário e atribuir o role ao usuário. Para versões do MongoDB anteriores a 8.2 e 8.0.10 ou posteriores, você deve criar manualmente a função e atribuir os privilégios antes de criar o usuário. Selecione a guia que corresponde à versão MongoDB que você está executando para criar um usuário com a função searchCoordinator.
Para criar o usuário e atribuir ao usuário a searchCoordinator função integrada, conclua as etapas a seguir usando a interface do usuário do Cloud Manager , do Ops Manager ou mongosh o:
Para criar a função searchCoordinator com os privilégios e, em seguida, adicionar um usuário com a função searchCoordinator, conclua as seguintes etapas na IU do Cloud Manager ou do Ops Manager:
Adicione os privilégios do banco de dados para atribuir ao role.
Na seção Privileges, clique em Add Privilege.
Para Resource, insira
__mdb_internal_searchpara o banco de dados.Não insira nada no campo collection .
Em Actions, adicione as seguintes ações.
changeStreamcleanupStructuredEncryptionData,compactStructuredEncryptionDatacollStatsconvertToCappedcreateCollection,dropCollection,listCollections,renameCollectionSameDBcreateIndex,dropIndex,listIndexescreateSearchIndexes,dropSearchIndex,listSearchIndexes,updateSearchIndexdbHash,dbStatsfind,insert,remove,updatekillCursorsplanCacheRead
mongoshEm, execute os seguintes comandos:
Crie o função personalizada.
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" } ] });
Configure seu ambiente
Prepare seu ambiente para executar o código de amostra deste tutorial em um terminal.
Obrigatório. Defina as variáveis de ambiente.
Para definir as variáveis de ambiente para uso nas etapas subsequentes deste procedimento, copie o seguinte, defina os valores para as variáveis de ambiente e carregue as variáveis de ambiente:
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. Adicione o repositório do MongoDB Helm.
O Helm automatiza a implantação e o gerenciamento de instâncias do MongoDB no Kubernetes. Se você já adicionou o repositório Helm que contém o gráfico Helm para instalar o operador Kubernetes Operator, pule esta etapa. Caso contrário, adicione o repositório Helm.
Para adicionar, copie, cole e execute o seguinte 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 os drivers do MongoDB para o Kubernetes Operator.
O Operador Kubernetes observa MongoDB, MongoDBOpsManager e MongoDBSearch recursos personalizados e gerencia o ciclo de vida de suas implantações do MongoDB . Se você já instalou os Controladores MongoDB para Kubernetes Operator, pule esta etapa. Caso contrário, instale os Controladores MongoDB para Kubernetes Operator a partir do repositório Helm que você adicionou na etapa anterior.
Para instalar os Controladores MongoDB para o Operador Kubernetes no namespace do mongodb, copie, cole e execute o seguinte:
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}"
O comando anterior instala o Kubernetes Operator no namespace mongodb , que é criado se ainda não existir. Após a instalação, o Kubernetes Operator observa os recursos personalizados MongoDBSearch e gerencia o ciclo de vida de seus sistemas do MongoDB Search e Vector Search .
Instale o MongoDB Search e o Vector Search
Obrigatório. Crie e carregue os segredos de usuário MongoDB .
O processo do mongot exige credenciais de autenticação para conectar ao seu sistema MongoDB externo para criar índices de pesquisa e executar consultas de pesquisa. Esta etapa cria os seguintes segredos do Kubernetes:
mdb-admin-user-password- credenciais do administrador do MongoDB .mdb-user-password- credenciais do usuário autorizado a realizar queries de pesquisa.mdbc-rs-search-sync-source-password- credenciais de um usuário de pesquisa dedicado usado internamente pelo processomongotpara sincronizar dados e gerenciar índices.
O Kubernetes Operator monta esses segredos nos pods do MongoDB .
Para criar os segredos, copie, cole e execute o seguinte no namespace onde você planeja implantar a Pesquisa MongoDB e a Vector Search:
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}"
Obrigatório. Implemente o segredo do arquivo de chave para usar para se conectar ao mongod.
Para autenticar conexões do MongoDB externo, o processo mongot usa o mesmo arquivo de chave que os membros externos do conjunto de réplicas do MongoDB usam para autenticação interna entre os membros do conjunto de réplicas.
Para criar um segredo do Kubernetes contendo o conteúdo do arquivo-chave a partir do seu MongoDB externo, copie, cole e execute o seguinte 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}"
Obrigatório. Crie e implemente o recurso para MongoDB Search e Vector Search.
Você pode implementar uma instância do nó de pesquisa sem nenhum balanceamento de carga. Para implantar, conclua as seguintes etapas:
Crie um recurso personalizado do
MongoDBSearchdenominadomdbs.Este recurso contém o seguinte:
spec.source.external.hostAndPortsLista de nós externos do conjunto de réplicas do MongoDB .
spec.source.external.keyfileSecretRefSegredo do arquivo-chave usado pelos membros do conjunto de réplicas externas.
spec.source.usernameNome de usuário do usuário de sincronização de pesquisa.
spec.source.passwordSecretRefPesquise a senha do usuário de sincronização.
spec.resourceRequirementsRequisitos de recursos de CPU e memória para o container de pesquisa.
Para saber mais sobre as configurações neste recurso personalizado, consulte Configurações de pesquisa do MongoDB e Vector Search.
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 Aguarde a conclusão do sistema de recursos
MongoDBSearch.Quando você aplica o recurso personalizado do
MongoDBSearch, o operador do Kubernetes começa a distribuir os nós de pesquisa (Pods). Esta etapa pausa a execução até que a fase de status do recursomdbssejaRunning, o que indica que o MongoDB Search StatefulSet está operacional.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
Obrigatório. Configure o acesso externo para MongoDB Search e Vector Search.
Para permitir que suas instâncias externas do MongoDB se conectem ao serviço de pesquisa, você deve configurar o acesso externo para MongoDB Search e Vector Search. Você pode criar um serviço LoadBalancer que exponha os pods de pesquisa fora do cluster do Kubernetes.
O serviço a seguir expõe o serviço MongoDBSearch na porta 27027 a um endereço IP externo ou nome de host que pode ser acessado de fora do cluster 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. Visualize todos os pods em execução em seu namespace.
Visualize todos os pods em execução nos pods do seu namespace para os nós do conjunto de réplicas do MongoDB , o operador do MongoDB Controladores for Kubernetes e os nós de pesquisa.
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 passos
Agora que você implementou com sucesso o MongoDB Search e o Vector Search para uso com o MongoDB Enterprise Edition externo, você pode adicionar dados ao cluster MongoDB , criar índices do MongoDB Search e Vector Search e executar queries em seus dados. Para saber mais, consulte Configurações do MongoDB Search e Vector Search.