Você pode usar o operador Kubernetes para implantar o MongoDB pesquisa e o pesquisa vetorial em um cluster do Kubernetes para ser executar com um servidor MongoDB Enterprise Edition v8.2.0 externo ou superior. Este procedimento demonstra como implantar e configurar o processo mongot em seu cluster Kubernetes para usar uma implantação externa nova ou existente de conjunto de réplicas. Este tutorial demonstra como configurar uma implantação segura com TLS habilitado. Você deve fornecer os certificados TLS:
O certificado do servidor e a chave para o serviço MongoDBSearch.
O certificado de CA pública para o banco de dados MongoDB externo.
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.2 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 .
TLSde banco de dados externo
Sua implantação externa do MongoDB Enterprise deve ser configurada para usar e exigir conexões TLS.
Arquivo CA do banco de dados externo
Você deve ter o arquivo de certificado da Autoridade de Certificação (CA) pública (por exemplo,
external-ca.crt) que foi usado para assinar os certificados de servidor da implantação MongoDB externa. Você precisará deste arquivo localmente.Arquivos de certificado do serviço de pesquisa
Você deve ter um certificado de servidor TLS válido e uma chave privada (por exemplo,
search-service.crt,search-service.key) para o serviço MongoDBSearch. Este certificado deve ser válido para o nome de host que você utilizará para acessar o serviço (por exemplo,mdbs-search.example.com).
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.useGrpcForSearchtrue
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 8 versões.2 do MongoDB e posteriores, o é um role embutido. Você deve criar um usuário e atribuir o role ao searchCoordinator usuário.
To create the user and assign the user the built-in searchCoordinator role, complete the following steps by using either the Cloud Manager or Ops Manager UI or the mongosh:
In mongosh, run the following commands:
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, em seguida, execute os comandos no seu 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"
Observe que essas variáveis de ambiente só estão disponíveis na sessão atual do terminal e precisarão ser definidas novamente em qualquer nova sessão de terminal.
Conditional. Add the MongoDB Helm repository.
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 operador Kubernetes, pule esta etapa. Caso contrário, instale os controladores MongoDB para operador Kubernetes 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 operador no namespace mongodb, que é criado se ainda não existir. Após a instalação, o operador Kubernetes procura recursos personalizados do MongoDBSearch e gerencia o ciclo de vida de suas implantações de pesquisa MongoDB e pesquisa vetorial.
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 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."
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 MongoDBSearch denominado
mdbs.Este recurso contém o seguinte:
spec.source.external.hostAndPortsLista de nós externos do conjunto de réplicas do MongoDB .
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.source.external.tls.ca.nameConfigura os pods MongoDBSearch para confiar no banco de dados externo. Ele aponta para o secret do Kubernetes que contém o certificado de CA público para seu MongoDB externo.
spec.security.tls.certificateKeySecretRef.nameProtege o serviço MongoDBSearch. Ele aponta para o secret do Kubernetes que contém o certificado do servidor TLS e a chave privada que os pods do MongoDBSearch apresentarão aos clientes que entram.
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: ${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 Aguarde a conclusão da implantação do recurso MongoDBSearch.
Quando você aplica o recurso personalizado MongoDBSearch, o operador Kubernetes começa a implantar os nós de pesquisa (Pods). Esta etapa pausa a execução até que a fase de status do recurso
mdbssejaRunning, o que indica que o MongoDB pesquisa StatefulSet está operacional.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
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.
Este seguinte serviço expõe o serviço MongoDBSearch na porta 27028 com 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_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. 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.