Você pode usar o operador Kubernetes e implantar os recursos de processo mongot para executar com o MongoDB Community Edition v8.2.0 ou posterior em um cluster Kubernetes. O processo mongot suporta o MongoDB Search e a pesquisa vetorial. Opcionalmente, você pode habilitar e configurar a pesquisa vetorial para gerar automaticamente embedding vetorial para dados de texto em suas coleções e queries usando um modelo de embedding Voyage AI suportado.
Importante
A incorporação automática está em visualização. O recurso e a documentação correspondente podem mudar a qualquer momento durante o período de pré-visualização. Para **aprender** mais, consulte Visualizar recursos.
O procedimento a seguir demonstra como implantar e configurar o MongoDB Search e a pesquisa vetorial para serem executados com um conjunto de réplicas novo ou existente no cluster do Kubernetes. A implantação utiliza certificados TLS para garantir uma comunicação segura entre os nós do MongoDB e o processo de pesquisa mongot.
Pré-requisitos
Para implantar o MongoDB Search e o Vector Search, você deve ter o seguinte:
Um cluster Kubernetes em execução.
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.
cert-manager ou uma solução alternativa de gerenciamento de certificados para o provisionamento de certificados TLS.
Bash v5.1 ou posterior para executar os comandos neste tutorial.
Opcionalmente, para configurar a pesquisa vetorial para gerar automaticamente incorporações vetoriais para dados de texto em suas coleções e queries, você deve criar chaves de API para o serviço de incorporação. Recomendamos criar duas chaves, uma para gerar incorporações em tempo de índice para dados de texto em sua coleção e outra para gerar incorporações em tempo de query para seu texto de query. Se você não tiver as chaves, poderá criar as chaves a partir da IU do Atlas.
Procedimento
Obrigatório. Defina as variáveis de ambiente.
Defina as variáveis de ambiente para uso nas etapas subsequentes deste procedimento. Copie os seguintes comandos, atualize os valores do seu ambiente e execute-os para carregar as variáveis:
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 # MongoDBCommunity resource name referenced throughout the guide 8 export MDB_RESOURCE_NAME="mdbc-rs" 9 # Number of replica set members deployed in the sample MongoDBCommunity 10 export MDB_MEMBERS=3 11 12 # TLS-related secret names used for MongoDBCommunity and MongoDBSearch 13 export MDB_TLS_CA_SECRET_NAME="${MDB_RESOURCE_NAME}-ca" 14 export MDB_TLS_SERVER_CERT_SECRET_NAME="${MDB_RESOURCE_NAME}-tls" 15 export MDB_SEARCH_TLS_SECRET_NAME="${MDB_RESOURCE_NAME}-search-tls" 16 17 export MDB_TLS_CA_CONFIGMAP="${MDB_RESOURCE_NAME}-ca-configmap" 18 export MDB_TLS_SELF_SIGNED_ISSUER="${MDB_RESOURCE_NAME}-selfsigned-cluster-issuer" 19 export MDB_TLS_CA_CERT_NAME="${MDB_RESOURCE_NAME}-selfsigned-ca" 20 export MDB_TLS_CA_ISSUER="${MDB_RESOURCE_NAME}-cluster-issuer" 21 22 export MDB_VERSION="8.3.4" 23 24 # root admin user for convenience, not used here at all in this guide 25 export MDB_ADMIN_USER_PASSWORD="admin-user-password-CHANGE-ME" 26 # regular user performing restore and search queries on sample mflix database 27 export MDB_USER_PASSWORD="mdb-user-password-CHANGE-ME" 28 # user for MongoDB Search to connect to the replica set to synchronise data from 29 export MDB_SEARCH_SYNC_USER_PASSWORD="search-sync-user-password-CHANGE-ME" 30 31 export OPERATOR_HELM_CHART="mongodb/mongodb-kubernetes" 32 # comma-separated key=value pairs for additional parameters passed to the helm-chart installing the operator 33 export OPERATOR_ADDITIONAL_HELM_VALUES="" 34 35 # TLS is mandatory; connection string must include tls=true 36 export MDB_CONNECTION_STRING="mongodb://mdb-user:${MDB_USER_PASSWORD}@${MDB_RESOURCE_NAME}-0.${MDB_RESOURCE_NAME}-svc.${MDB_NS}.svc.cluster.local:27017/?replicaSet=${MDB_RESOURCE_NAME}&tls=true&tlsCAFile=/tls/ca.crt" 37 38 export CERT_MANAGER_NAMESPACE="cert-manager" 39 40 # Vector Search auto embedding related configurations 41 export AUTO_EMBEDDING_API_KEY_SECRET_NAME="voyage-api-keys" 42 export AUTO_EMBEDDING_API_QUERY_KEY="<embedding-model-query-key>" 43 export AUTO_EMBEDDING_API_INDEXING_KEY="<embedding-model-indexing-key>" 44 export PROVIDER_ENDPOINT="https://ai.mongodb.com/v1/embeddings" 45 export EMBEDDING_MODEL="voyage-4"
Observação
Se você tiver as chaves de API para permitir que a pesquisa vetorial gere automaticamente incorporações, substitua os seguintes valores de espaço reservado nas variáveis de ambiente:
| Chave API para gerar incorporações para o texto da query. |
| Chave de API para gerar incorporações para dados de texto em sua coleção no momento do índice. |
| Incorporando ponto de extremidade do provedor do modelo. O valor padrão é |
Para verificar se todas as variáveis de ambiente necessárias estão definidas, execute o seguinte código no seu terminal:
1 required=( 2 K8S_CTX 3 MDB_NS 4 MDB_RESOURCE_NAME 5 MDB_VERSION 6 MDB_MEMBERS 7 CERT_MANAGER_NAMESPACE 8 MDB_TLS_CA_SECRET_NAME 9 MDB_TLS_SERVER_CERT_SECRET_NAME 10 MDB_SEARCH_TLS_SECRET_NAME 11 MDB_ADMIN_USER_PASSWORD 12 MDB_SEARCH_SYNC_USER_PASSWORD 13 MDB_USER_PASSWORD 14 OPERATOR_HELM_CHART 15 ) 16 17 missing_req=() 18 for v in "${required[@]}"; do [[ -n "${!v:-}" ]] || missing_req+=("${v}"); done 19 20 if (( ${#missing_req[@]} )); then 21 echo "ERROR: Missing required environment variables:" >&2 22 for m in "${missing_req[@]}"; do echo " - ${m}" >&2; done 23 else 24 echo "All required environment variables present." 25 fi
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á tiver o repositório Helm que contém o gráfico Helm para instalar o operador Kubernetes, ou pule esta etapa. Caso contrário, adicione o repositório Helm.
Para adicionar o repositório Helm, copie, cole e execute o seguinte:
1 helm repo add mongodb https://mongodb.github.io/helm-charts 2 helm repo update mongodb 3 helm search repo mongodb/mongodb-kubernetes
1 "mongodb" has been added to your repositories 2 Hang tight while we grab the latest from your chart repositories... 3 ...Successfully got an update from the "mongodb" chart repository 4 Update Complete. ⎈Happy Helming!⎈ 5 NAME CHART VERSION APP VERSION DESCRIPTION 6 mongodb/mongodb-kubernetes 1.10.0 MongoDB Controllers for Kubernetes translate th...
Condicional. Instale os drivers do MongoDB para o Kubernetes Operator.
O Operador Kubernetes observa MongoDBCommunity e os recursos personalizados do MongoDBSearch e gerencia o ciclo de vida de suas implantações do MongoDB. Se você já instalou os Controladores MongoDB para Kubernetes operador, pule esta etapa. Caso contrário, instale os Controladores MongoDB para Kubernetes operador a partir do repositório Helm que você adicionou na etapa anterior.
Para instalar os Controladores MongoDB para o operador Kubernetes no namespace mongodb, copie, cole e execute os seguintes 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}"
1 Release "mongodb-kubernetes" does not exist. Installing it now. 2 NAME: mongodb-kubernetes 3 LAST DEPLOYED: Fri Jul 31 08:16:12 2026 4 NAMESPACE: mongodb 5 STATUS: deployed 6 REVISION: 1 7 TEST SUITE: None 8 USER-SUPPLIED VALUES: 9 {} 10 11 COMPUTED VALUES: 12 agent: 13 name: mongodb-agent 14 version: 108.0.12.8846-1 15 community: 16 agent: 17 name: mongodb-agent 18 version: 108.0.25.9029-1 19 mongodb: 20 imageType: ubi8 21 name: mongodb-community-server 22 repo: quay.io/mongodb 23 registry: 24 agent: quay.io/mongodb 25 resource: 26 members: 3 27 name: mongodb-replica-set 28 tls: 29 caCertificateSecretRef: tls-ca-key-pair 30 certManager: 31 certDuration: 8760h 32 renewCertBefore: 720h 33 certificateKeySecretRef: tls-certificate 34 enabled: false 35 sampleX509User: false 36 useCertManager: true 37 useX509: false 38 version: 4.4.0 39 database: 40 name: mongodb-kubernetes-database 41 version: 1.10.0 42 initDatabase: 43 name: mongodb-kubernetes-init-database 44 version: 1.10.0 45 initOpsManager: 46 name: mongodb-kubernetes-init-ops-manager 47 version: 1.10.0 48 managedSecurityContext: false 49 mongodb: 50 appdbAssumeOldFormat: false 51 name: mongodb-enterprise-server 52 repo: quay.io/mongodb 53 multiCluster: 54 clusterClientTimeout: 10 55 clusters: [] 56 kubeConfigSecretName: mongodb-enterprise-operator-multi-cluster-kubeconfig 57 memberClusterRequiredHealthyStreak: 5 58 performFailOver: true 59 operator: 60 additionalArguments: [] 61 affinity: {} 62 clusterIdentity: 63 clusterName: "" 64 createOperatorServiceAccount: true 65 createResourcesServiceAccountsAndRoles: true 66 enableClusterMongoDBRoles: true 67 enablePVCResize: true 68 env: prod 69 maxConcurrentReconciles: 1 70 mdbDefaultArchitecture: non-static 71 name: mongodb-kubernetes-operator 72 nodeSelector: {} 73 operator_image_name: mongodb-kubernetes 74 podSecurityContext: 75 runAsNonRoot: true 76 runAsUser: 2000 77 seccompProfile: 78 type: RuntimeDefault 79 replicas: 1 80 resources: 81 limits: 82 cpu: 1100m 83 memory: 1Gi 84 requests: 85 cpu: 500m 86 memory: 200Mi 87 securityContext: 88 allowPrivilegeEscalation: false 89 capabilities: 90 drop: 91 - ALL 92 telemetry: 93 collection: 94 clusters: {} 95 deployments: {} 96 frequency: 1h 97 operators: {} 98 send: 99 frequency: 168h 100 tolerations: [] 101 vaultSecretBackend: 102 enabled: false 103 tlsSecretRef: "" 104 version: 1.10.0 105 watchedResources: 106 - mongodb 107 - opsmanagers 108 - mongodbusers 109 - mongodbcommunity 110 - mongodbsearch 111 - voyageais 112 webhook: 113 installClusterRole: true 114 name: "" 115 registerConfiguration: true 116 opsManager: 117 name: mongodb-enterprise-ops-manager-ubi 118 readinessProbe: 119 name: mongodb-kubernetes-readinessprobe 120 version: 1.0.24 121 registry: 122 agent: quay.io/mongodb 123 database: quay.io/mongodb 124 imagePullSecrets: null 125 initDatabase: quay.io/mongodb 126 initOpsManager: quay.io/mongodb 127 operator: quay.io/mongodb 128 opsManager: quay.io/mongodb 129 pullPolicy: Always 130 readinessProbe: quay.io/mongodb 131 versionUpgradeHook: quay.io/mongodb 132 search: 133 envoyImage: envoyproxy/envoy:v1.37-latest 134 metricsForwarderImage: otel/opentelemetry-collector-contrib:0.152.0 135 name: mongodb-search 136 repo: quay.io/mongodb 137 version: 1.70.1 138 versionUpgradeHook: 139 name: mongodb-kubernetes-operator-version-upgrade-post-start-hook 140 version: 1.0.10 141 voyageai: 142 repo: quay.io/mongodb/voyageai 143 144 HOOKS: 145 MANIFEST: 146 --- 147 Source: mongodb-kubernetes/templates/database-roles.yaml 148 apiVersion: v1 149 kind: ServiceAccount 150 metadata: 151 name: mongodb-kubernetes-appdb 152 namespace: mongodb 153 --- 154 Source: mongodb-kubernetes/templates/database-roles.yaml 155 apiVersion: v1 156 kind: ServiceAccount 157 metadata: 158 name: mongodb-kubernetes-database-pods 159 namespace: mongodb 160 --- 161 Source: mongodb-kubernetes/templates/database-roles.yaml 162 apiVersion: v1 163 kind: ServiceAccount 164 metadata: 165 name: mongodb-kubernetes-ops-manager 166 namespace: mongodb 167 --- 168 Source: mongodb-kubernetes/templates/operator-sa.yaml 169 apiVersion: v1 170 kind: ServiceAccount 171 metadata: 172 name: mongodb-kubernetes-operator 173 namespace: mongodb 174 --- 175 Source: mongodb-kubernetes/templates/operator-roles-clustermongodbroles.yaml 176 kind: ClusterRole 177 apiVersion: rbac.authorization.k8s.io/v1 178 metadata: 179 name: mongodb-kubernetes-operator-mongodb-cluster-mongodb-role 180 rules: 181 - apiGroups: 182 - mongodb.com 183 verbs: 184 - '*' 185 resources: 186 - clustermongodbroles 187 --- 188 Source: mongodb-kubernetes/templates/operator-roles-telemetry.yaml 189 Additional ClusterRole for clusterVersionDetection 190 kind: ClusterRole 191 apiVersion: rbac.authorization.k8s.io/v1 192 metadata: 193 name: mongodb-kubernetes-operator-cluster-telemetry 194 rules: 195 Non-resource URL permissions 196 - nonResourceURLs: 197 - "/version" 198 verbs: 199 - get 200 Cluster-scoped resource permissions 201 - apiGroups: 202 - '' 203 resources: 204 - namespaces 205 resourceNames: 206 - kube-system 207 verbs: 208 - get 209 - apiGroups: 210 - '' 211 resources: 212 - nodes 213 verbs: 214 - list 215 --- 216 Source: mongodb-kubernetes/templates/operator-roles-webhook.yaml 217 kind: ClusterRole 218 apiVersion: rbac.authorization.k8s.io/v1 219 metadata: 220 name: mongodb-kubernetes-operator-mongodb-webhook-cr 221 rules: 222 - apiGroups: 223 - "admissionregistration.k8s.io" 224 resources: 225 - validatingwebhookconfigurations 226 verbs: 227 - get 228 - create 229 - update 230 - delete 231 - apiGroups: 232 - "" 233 resources: 234 - services 235 verbs: 236 - get 237 - list 238 - watch 239 - create 240 - update 241 - delete 242 --- 243 Source: mongodb-kubernetes/templates/operator-roles-clustermongodbroles.yaml 244 kind: ClusterRoleBinding 245 apiVersion: rbac.authorization.k8s.io/v1 246 metadata: 247 name: mongodb-kubernetes-operator-mongodb-cluster-mongodb-role-binding 248 roleRef: 249 apiGroup: rbac.authorization.k8s.io 250 kind: ClusterRole 251 name: mongodb-kubernetes-operator-mongodb-cluster-mongodb-role 252 subjects: 253 - kind: ServiceAccount 254 name: mongodb-kubernetes-operator 255 namespace: mongodb 256 --- 257 Source: mongodb-kubernetes/templates/operator-roles-telemetry.yaml 258 ClusterRoleBinding for clusterVersionDetection 259 kind: ClusterRoleBinding 260 apiVersion: rbac.authorization.k8s.io/v1 261 metadata: 262 name: mongodb-kubernetes-operator-mongodb-cluster-telemetry-binding 263 roleRef: 264 apiGroup: rbac.authorization.k8s.io 265 kind: ClusterRole 266 name: mongodb-kubernetes-operator-cluster-telemetry 267 subjects: 268 - kind: ServiceAccount 269 name: mongodb-kubernetes-operator 270 namespace: mongodb 271 --- 272 Source: mongodb-kubernetes/templates/operator-roles-webhook.yaml 273 kind: ClusterRoleBinding 274 apiVersion: rbac.authorization.k8s.io/v1 275 metadata: 276 name: mongodb-kubernetes-operator-mongodb-webhook-crb 277 roleRef: 278 apiGroup: rbac.authorization.k8s.io 279 kind: ClusterRole 280 name: mongodb-kubernetes-operator-mongodb-webhook-cr 281 subjects: 282 - kind: ServiceAccount 283 name: mongodb-kubernetes-operator 284 namespace: mongodb 285 --- 286 Source: mongodb-kubernetes/templates/database-roles.yaml 287 kind: Role 288 apiVersion: rbac.authorization.k8s.io/v1 289 metadata: 290 name: mongodb-kubernetes-appdb 291 namespace: mongodb 292 rules: 293 - apiGroups: 294 - '' 295 resources: 296 - secrets 297 verbs: 298 - get 299 - apiGroups: 300 - '' 301 resources: 302 - pods 303 verbs: 304 - patch 305 - delete 306 - get 307 --- 308 Source: mongodb-kubernetes/templates/operator-roles-base.yaml 309 kind: Role 310 apiVersion: rbac.authorization.k8s.io/v1 311 metadata: 312 name: mongodb-kubernetes-operator 313 namespace: mongodb 314 rules: 315 - apiGroups: 316 - '' 317 resources: 318 - services 319 verbs: 320 - get 321 - list 322 - watch 323 - create 324 - update 325 - delete 326 - apiGroups: 327 - '' 328 resources: 329 - secrets 330 - configmaps 331 verbs: 332 - get 333 - list 334 - create 335 - update 336 - delete 337 - watch 338 - apiGroups: 339 - apps 340 resources: 341 - statefulsets 342 - deployments 343 verbs: 344 - create 345 - get 346 - list 347 - watch 348 - delete 349 - update 350 - apiGroups: 351 - '' 352 resources: 353 - pods 354 verbs: 355 - get 356 - list 357 - watch 358 - delete 359 - deletecollection 360 - apiGroups: 361 - mongodbcommunity.mongodb.com 362 resources: 363 - mongodbcommunity 364 - mongodbcommunity/status 365 - mongodbcommunity/spec 366 - mongodbcommunity/finalizers 367 verbs: 368 - '*' 369 - apiGroups: 370 - mongodb.com 371 verbs: 372 - '*' 373 resources: 374 - mongodb 375 - mongodb/finalizers 376 - mongodbusers 377 - mongodbusers/finalizers 378 - opsmanagers 379 - opsmanagers/finalizers 380 - mongodbmulticluster 381 - mongodbmulticluster/finalizers 382 - mongodbsearch 383 - mongodbsearch/finalizers 384 - mongodb/status 385 - mongodbusers/status 386 - opsmanagers/status 387 - mongodbmulticluster/status 388 - mongodbsearch/status 389 - apiGroups: 390 - ai.mongodb.com 391 verbs: 392 - '*' 393 resources: 394 - voyageais 395 - voyageais/finalizers 396 - voyageais/status 397 --- 398 Source: mongodb-kubernetes/templates/operator-roles-pvc-resize.yaml 399 kind: Role 400 apiVersion: rbac.authorization.k8s.io/v1 401 metadata: 402 name: mongodb-kubernetes-operator-pvc-resize 403 namespace: mongodb 404 rules: 405 - apiGroups: 406 - '' 407 resources: 408 - persistentvolumeclaims 409 verbs: 410 - get 411 - delete 412 - list 413 - watch 414 - patch 415 - update 416 --- 417 Source: mongodb-kubernetes/templates/database-roles.yaml 418 kind: RoleBinding 419 apiVersion: rbac.authorization.k8s.io/v1 420 metadata: 421 name: mongodb-kubernetes-appdb 422 namespace: mongodb 423 roleRef: 424 apiGroup: rbac.authorization.k8s.io 425 kind: Role 426 name: mongodb-kubernetes-appdb 427 subjects: 428 - kind: ServiceAccount 429 name: mongodb-kubernetes-appdb 430 namespace: mongodb 431 --- 432 Source: mongodb-kubernetes/templates/operator-roles-base.yaml 433 kind: RoleBinding 434 apiVersion: rbac.authorization.k8s.io/v1 435 metadata: 436 name: mongodb-kubernetes-operator 437 namespace: mongodb 438 roleRef: 439 apiGroup: rbac.authorization.k8s.io 440 kind: Role 441 name: mongodb-kubernetes-operator 442 subjects: 443 - kind: ServiceAccount 444 name: mongodb-kubernetes-operator 445 namespace: mongodb 446 --- 447 Source: mongodb-kubernetes/templates/operator-roles-pvc-resize.yaml 448 kind: RoleBinding 449 apiVersion: rbac.authorization.k8s.io/v1 450 metadata: 451 name: mongodb-kubernetes-operator-pvc-resize-binding 452 namespace: mongodb 453 roleRef: 454 apiGroup: rbac.authorization.k8s.io 455 kind: Role 456 name: mongodb-kubernetes-operator-pvc-resize 457 subjects: 458 - kind: ServiceAccount 459 name: mongodb-kubernetes-operator 460 namespace: mongodb 461 --- 462 Source: mongodb-kubernetes/templates/operator.yaml 463 apiVersion: apps/v1 464 kind: Deployment 465 metadata: 466 name: mongodb-kubernetes-operator 467 namespace: mongodb 468 spec: 469 replicas: 1 470 selector: 471 matchLabels: 472 app.kubernetes.io/component: controller 473 app.kubernetes.io/name: mongodb-kubernetes-operator 474 app.kubernetes.io/instance: mongodb-kubernetes-operator 475 template: 476 metadata: 477 labels: 478 app.kubernetes.io/component: controller 479 app.kubernetes.io/name: mongodb-kubernetes-operator 480 app.kubernetes.io/instance: mongodb-kubernetes-operator 481 annotations: 482 mongodb.com/installation-method: "helm" 483 spec: 484 serviceAccountName: mongodb-kubernetes-operator 485 securityContext: 486 runAsNonRoot: true 487 runAsUser: 2000 488 seccompProfile: 489 type: RuntimeDefault 490 containers: 491 - name: mongodb-kubernetes-operator 492 image: "quay.io/mongodb/mongodb-kubernetes:1.10.0" 493 imagePullPolicy: Always 494 args: 495 - -watch-resource=mongodb 496 - -watch-resource=opsmanagers 497 - -watch-resource=mongodbusers 498 - -watch-resource=mongodbcommunity 499 - -watch-resource=mongodbsearch 500 - -watch-resource=voyageais 501 - -watch-resource=clustermongodbroles 502 command: 503 - /usr/local/bin/mongodb-kubernetes-operator 504 volumeMounts: 505 - mountPath: /tmp/k8s-webhook-server/serving-certs 506 name: webhook-server-dir 507 resources: 508 limits: 509 cpu: 1100m 510 memory: 1Gi 511 requests: 512 cpu: 500m 513 memory: 200Mi 514 securityContext: 515 allowPrivilegeEscalation: false 516 capabilities: 517 drop: 518 - ALL 519 env: 520 - name: OPERATOR_ENV 521 value: prod 522 - name: MDB_DEFAULT_ARCHITECTURE 523 value: non-static 524 - name: NAMESPACE 525 valueFrom: 526 fieldRef: 527 fieldPath: metadata.namespace 528 - name: WATCH_NAMESPACE 529 valueFrom: 530 fieldRef: 531 fieldPath: metadata.namespace 532 - name: MDB_OPERATOR_TELEMETRY_COLLECTION_FREQUENCY 533 value: "1h" 534 - name: MDB_OPERATOR_TELEMETRY_SEND_FREQUENCY 535 value: "168h" 536 - name: CLUSTER_CLIENT_TIMEOUT 537 value: "10" 538 - name: MDB_MEMBER_CLUSTER_REQUIRED_HEALTHY_STREAK 539 value: "5" 540 - name: IMAGE_PULL_POLICY 541 value: Always 542 # Database 543 - name: MONGODB_ENTERPRISE_DATABASE_IMAGE 544 value: quay.io/mongodb/mongodb-kubernetes-database 545 - name: INIT_DATABASE_IMAGE_REPOSITORY 546 value: quay.io/mongodb/mongodb-kubernetes-init-database 547 - name: INIT_DATABASE_VERSION 548 value: "1.10.0" 549 - name: DATABASE_VERSION 550 value: "1.10.0" 551 # Ops Manager 552 - name: OPS_MANAGER_IMAGE_REPOSITORY 553 value: quay.io/mongodb/mongodb-enterprise-ops-manager-ubi 554 - name: INIT_OPS_MANAGER_IMAGE_REPOSITORY 555 value: quay.io/mongodb/mongodb-kubernetes-init-ops-manager 556 - name: INIT_OPS_MANAGER_VERSION 557 value: "1.10.0" 558 - name: OPS_MANAGER_IMAGE_PULL_POLICY 559 value: Always 560 - name: AGENT_IMAGE 561 value: "quay.io/mongodb/mongodb-agent:108.0.12.8846-1" 562 - name: MDB_AGENT_IMAGE_REPOSITORY 563 value: "quay.io/mongodb/mongodb-agent" 564 - name: MONGODB_IMAGE 565 value: mongodb-enterprise-server 566 - name: MONGODB_REPO_URL 567 value: quay.io/mongodb 568 - name: PERFORM_FAILOVER 569 value: 'true' 570 - name: MDB_MAX_CONCURRENT_RECONCILES 571 value: "1" 572 - name: POD_NAME 573 valueFrom: 574 fieldRef: 575 fieldPath: metadata.name 576 - name: MCK_INSTALLER 577 valueFrom: 578 fieldRef: 579 fieldPath: metadata.annotations['mongodb.com/installation-method'] 580 - name: OPERATOR_NAME 581 value: mongodb-kubernetes-operator 582 # Community Env Vars Start 583 - name: MDB_COMMUNITY_AGENT_IMAGE 584 value: "quay.io/mongodb/mongodb-agent:108.0.25.9029-1" 585 - name: VERSION_UPGRADE_HOOK_IMAGE 586 value: "quay.io/mongodb/mongodb-kubernetes-operator-version-upgrade-post-start-hook:1.0.10" 587 - name: READINESS_PROBE_IMAGE 588 value: "quay.io/mongodb/mongodb-kubernetes-readinessprobe:1.0.24" 589 - name: MDB_COMMUNITY_IMAGE 590 value: "mongodb-community-server" 591 - name: MDB_COMMUNITY_REPO_URL 592 value: "quay.io/mongodb" 593 - name: MDB_COMMUNITY_IMAGE_TYPE 594 value: "ubi8" 595 # Community Env Vars End 596 - name: MDB_SEARCH_REPO_URL 597 value: "quay.io/mongodb" 598 - name: MDB_SEARCH_NAME 599 value: "mongodb-search" 600 - name: MDB_SEARCH_VERSION 601 value: "1.70.1" 602 - name: MDB_ENVOY_IMAGE 603 value: "envoyproxy/envoy:v1.37-latest" 604 - name: MDB_SEARCH_METRICS_FORWARDER_IMAGE 605 value: "otel/opentelemetry-collector-contrib:0.152.0" 606 - name: MDB_VOYAGEAI_REPO_URL 607 value: "quay.io/mongodb/voyageai" 608 volumes: 609 - name: webhook-server-dir 610 emptyDir: {}
Opcional. Aguarde a implantação do operador.
Certifique-se de que o operador Kubernetes esteja totalmente operacional antes de prosseguir com a implantação do MongoDB pesquisa e pesquisa vetorial. Execute o comando a seguir para verificar se todos os componentes do operador estão em execução e disponíveis.
1 kubectl --context "${K8S_CTX}" -n "${MDB_NS}" rollout status --timeout=2m deployment/mongodb-kubernetes-operator 2 echo "Operator deployment in ${MDB_NS} namespace" 3 kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get deployments 4 echo; echo "Operator pod in ${MDB_NS} namespace" 5 kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get pods
1 Waiting for deployment "mongodb-kubernetes-operator" rollout to finish: 0 of 1 updated replicas are available... 2 deployment "mongodb-kubernetes-operator" successfully rolled out 3 Operator deployment in mongodb namespace 4 NAME READY UP-TO-DATE AVAILABLE AGE 5 mongodb-kubernetes-operator 1/1 1 1 2s 6 7 Operator pod in mongodb namespace 8 NAME READY STATUS RESTARTS AGE 9 mongodb-kubernetes-operator-5594c7cd4c-dn82g 1/1 Running 0 2s
Obrigatório. Crie e carregue os segredos de usuário MongoDB .
O MongoDB requer autenticação para acesso seguro. Nesta etapa, você cria três 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 para um usuário de pesquisa dedicado utilizado internamente pelo processo domongotpara sincronizar dados e gerenciar índices.
O Kubernetes operador usa senhas desses segredos para criar automaticamente os usuários no banco de dados MongoDB.
Para criar os segredos, copie, cole e execute o seguinte comando:
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."
1 secret/mdb-admin-user-password created 2 secret/mdbc-rs-search-sync-source-password created 3 secret/mdb-user-password created
Condicional. Instale o cert-manager.
O cert-manager é necessário para gerenciar certificados TLS. Se você já tiver o cert-manager instalado em seu cluster, pule esta etapa. Caso contrário, instale cert-manager usando o Helm.
Para instalar o cert-manager no namespace cert-manager, execute o seguinte comando em seu terminal:
1 helm upgrade --install \ 2 cert-manager \ 3 oci://quay.io/jetstack/charts/cert-manager \ 4 --kube-context "${K8S_CTX}" \ 5 --namespace "${CERT_MANAGER_NAMESPACE}" \ 6 --create-namespace \ 7 --set crds.enabled=true 8 9 for deployment in cert-manager cert-manager-cainjector cert-manager-webhook; do 10 kubectl --context "${K8S_CTX}" \ 11 -n "${CERT_MANAGER_NAMESPACE}" \ 12 wait --for=condition=Available "deployment/${deployment}" --timeout=300s 13 done 14 15 echo "cert-manager is ready in namespace ${CERT_MANAGER_NAMESPACE}."
Obrigatório. Prepare o emissor do certificado e a infraestrutura da CA.
Crie a infraestrutura da autoridade de certificação que emitirá certificados TLS para recursos MongoDB e MongoDBSearch. Os comandos executam as seguintes ações:
Crie um
ClusterIssuerautoassinado.Gere um certificado CA.
Publique um emissor de CA em todo o cluster que todos os namespaces possam usar.
Exponha o pacote CA por meio de um
ConfigMappara que os recursos do MongoDB possam usá-lo.
1 Bootstrap a self-signed ClusterIssuer that will mint the CA material consumed by 2 the MongoDBCommunity deployment. 3 kubectl apply --context "${K8S_CTX}" -f - <<EOF_MANIFEST 4 apiVersion: cert-manager.io/v1 5 kind: ClusterIssuer 6 metadata: 7 name: ${MDB_TLS_SELF_SIGNED_ISSUER} 8 spec: 9 selfSigned: {} 10 EOF_MANIFEST 11 12 kubectl --context "${K8S_CTX}" wait --for=condition=Ready clusterissuer "${MDB_TLS_SELF_SIGNED_ISSUER}" 13 14 Create the CA certificate and secret in the cert-manager namespace. 15 kubectl apply --context "${K8S_CTX}" -f - <<EOF_MANIFEST 16 apiVersion: cert-manager.io/v1 17 kind: Certificate 18 metadata: 19 name: ${MDB_TLS_CA_CERT_NAME} 20 namespace: ${CERT_MANAGER_NAMESPACE} 21 spec: 22 isCA: true 23 commonName: ${MDB_TLS_CA_CERT_NAME} 24 secretName: ${MDB_TLS_CA_SECRET_NAME} 25 privateKey: 26 algorithm: ECDSA 27 size: 256 28 issuerRef: 29 name: ${MDB_TLS_SELF_SIGNED_ISSUER} 30 kind: ClusterIssuer 31 EOF_MANIFEST 32 33 kubectl --context "${K8S_CTX}" wait --for=condition=Ready -n "${CERT_MANAGER_NAMESPACE}" certificate "${MDB_TLS_CA_CERT_NAME}" 34 35 Publish a cluster-scoped issuer that fronts the generated CA secret so all namespaces can reuse it. 36 kubectl apply --context "${K8S_CTX}" -f - <<EOF_MANIFEST 37 apiVersion: cert-manager.io/v1 38 kind: ClusterIssuer 39 metadata: 40 name: ${MDB_TLS_CA_ISSUER} 41 spec: 42 ca: 43 secretName: ${MDB_TLS_CA_SECRET_NAME} 44 EOF_MANIFEST 45 46 kubectl --context "${K8S_CTX}" wait --for=condition=Ready clusterissuer "${MDB_TLS_CA_ISSUER}" 47 48 TMP_CA_CERT="$(mktemp)" 49 50 kubectl --context "${K8S_CTX}" \ 51 get secret "${MDB_TLS_CA_SECRET_NAME}" -n "${CERT_MANAGER_NAMESPACE}" \ 52 -o jsonpath="{.data['ca\\.crt']}" | base64 --decode > "${TMP_CA_CERT}" 53 54 Expose the CA bundle through a ConfigMap for workloads and the MongoDBCommunity resource. 55 kubectl --context "${K8S_CTX}" create configmap "${MDB_TLS_CA_CONFIGMAP}" -n "${MDB_NS}" \ 56 --from-file=ca-pem="${TMP_CA_CERT}" --from-file=mms-ca.crt="${TMP_CA_CERT}" \ 57 --from-file=ca.crt="${TMP_CA_CERT}" \ 58 --dry-run=client -o yaml | kubectl --context "${K8S_CTX}" apply -f - 59 60 echo "Cluster-wide CA issuer ${MDB_TLS_CA_ISSUER} is ready."
Obrigatório. Emita certificados TLS.
Emita certificados TLS para o servidor MongoDB e o serviço MongoDBSearch. O certificado de servidor MongoDB inclui todos os nomes de DNS necessários para o pod e a comunicação de serviço. Ambos os certificados suportam autenticação de servidor e cliente.
1 server_certificate="${MDB_RESOURCE_NAME}-server-tls" 2 search_certificate="${MDB_RESOURCE_NAME}-search-tls" 3 4 mongo_dns_names=() 5 for ((member = 0; member < MDB_MEMBERS; member++)); do 6 mongo_dns_names+=("${MDB_RESOURCE_NAME}-${member}") 7 mongo_dns_names+=("${MDB_RESOURCE_NAME}-${member}.${MDB_RESOURCE_NAME}-svc.${MDB_NS}.svc.cluster.local") 8 done 9 mongo_dns_names+=( 10 "${MDB_RESOURCE_NAME}-svc.${MDB_NS}.svc.cluster.local" 11 "*.${MDB_RESOURCE_NAME}-svc.${MDB_NS}.svc.cluster.local" 12 ) 13 14 search_dns_names=( 15 "*.${MDB_RESOURCE_NAME}-search-0-svc.${MDB_NS}.svc.cluster.local" 16 ) 17 18 render_dns_list() { 19 local dns_list=("$@") 20 for dns in "${dns_list[@]}"; do 21 printf " - \"%s\"\n" "${dns}" 22 done 23 } 24 25 kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - <<EOF_MANIFEST 26 apiVersion: cert-manager.io/v1 27 kind: Certificate 28 metadata: 29 name: ${server_certificate} 30 namespace: ${MDB_NS} 31 spec: 32 secretName: ${MDB_TLS_SERVER_CERT_SECRET_NAME} 33 issuerRef: 34 name: ${MDB_TLS_CA_ISSUER} 35 kind: ClusterIssuer 36 duration: 240h0m0s 37 renewBefore: 120h0m0s 38 usages: 39 - digital signature 40 - key encipherment 41 - server auth 42 - client auth 43 dnsNames: 44 (render_dns_list "${mongo_dns_names[@]}") 45 --- 46 apiVersion: cert-manager.io/v1 47 kind: Certificate 48 metadata: 49 name: ${search_certificate} 50 namespace: ${MDB_NS} 51 spec: 52 secretName: ${MDB_SEARCH_TLS_SECRET_NAME} 53 issuerRef: 54 name: ${MDB_TLS_CA_ISSUER} 55 kind: ClusterIssuer 56 duration: 240h0m0s 57 renewBefore: 120h0m0s 58 usages: 59 - digital signature 60 - key encipherment 61 - server auth 62 - client auth 63 dnsNames: 64 (render_dns_list "${search_dns_names[@]}") 65 EOF_MANIFEST 66 67 kubectl --context "${K8S_CTX}" -n "${MDB_NS}" wait --for=condition=Ready certificate "${server_certificate}" --timeout=300s 68 kubectl --context "${K8S_CTX}" -n "${MDB_NS}" wait --for=condition=Ready certificate "${search_certificate}" --timeout=300s 69 70 echo "MongoDB TLS certificates have been issued."
Condicional. Crie e implante o recurso MongoDB Community.
Se você já tiver implantado a MongoDB Community Edition, pule esta etapa. Caso contrário, implante o MongoDB Community Edition.
Para implantar a MongoDB Community Edition, complete as seguintes etapas:
Crie um recurso personalizado do
MongoDBCommunitydenominadomdb-rs.O recurso define os recursos de memória e CPU para os contêineres
mongodemongodb-agente configura os três usuários a seguir:mdb-userUsuário que pode restaurar banco de dados e executar query de pesquisa. Este usuário utiliza o segredo
mdb-user-passwordpara executar estas operações.search-sync-sourceUsuário que o MongoDB Pesquisa usa para se conectar ao banco de dados MongoDB para gerenciar e construir índices. Este usuário usa a função
searchCoordinatorque o operador Kubernetes cria. Isso usa o segredomdbc-rs-search-sync-source-passwordpara conectarmongotamongod.admin-userUsuário administrador do banco de dados.
O operador Kubernetes utiliza este recurso para configurar um conjunto de réplicas MongoDB com 3 membros.
Para criar os segredos, copie, cole e execute os seguintes 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: ${MDB_RESOURCE_NAME} 6 spec: 7 version: ${MDB_VERSION} 8 type: ReplicaSet 9 members: ${MDB_MEMBERS} 10 security: 11 tls: 12 enabled: true 13 certificateKeySecretRef: 14 name: ${MDB_TLS_SERVER_CERT_SECRET_NAME} 15 caConfigMapRef: 16 name: ${MDB_TLS_CA_CONFIGMAP} 17 authentication: 18 ignoreUnknownUsers: true 19 modes: 20 - SCRAM 21 agent: 22 logLevel: DEBUG 23 statefulSet: 24 spec: 25 template: 26 spec: 27 containers: 28 - name: mongod 29 resources: 30 limits: 31 cpu: "2" 32 memory: 2Gi 33 requests: 34 cpu: "1" 35 memory: 1Gi 36 - name: mongodb-agent 37 resources: 38 limits: 39 cpu: "1" 40 memory: 2Gi 41 requests: 42 cpu: "0.5" 43 memory: 1Gi 44 users: 45 # admin user with root role 46 - name: mdb-admin 47 db: admin 48 # a reference to the secret containing user password 49 passwordSecretRef: 50 name: mdb-admin-user-password 51 scramCredentialsSecretName: mdb-admin-user 52 roles: 53 - name: root 54 db: admin 55 # user performing search queries 56 - name: mdb-user 57 db: admin 58 # a reference to the secret containing user password 59 passwordSecretRef: 60 name: mdb-user-password 61 scramCredentialsSecretName: mdb-user-scram 62 roles: 63 - name: restore 64 db: sample_mflix 65 - name: readWrite 66 db: sample_mflix 67 # user used by MongoDB Search to connect to MongoDB database to 68 # synchronize data from. 69 # For MongoDB <8.2, the operator will be creating the 70 # searchCoordinator custom role automatically. 71 # From MongoDB 8.2, searchCoordinator role will be a 72 # built-in role. 73 - name: search-sync-source 74 db: admin 75 # a reference to the secret that will be used to generate the user's password 76 passwordSecretRef: 77 name: ${MDB_RESOURCE_NAME}-search-sync-source-password 78 scramCredentialsSecretName: ${MDB_RESOURCE_NAME}-search-sync-source 79 roles: 80 - name: searchCoordinator 81 db: admin 82 EOF Aguarde a conclusão do sistema de recursos
MongoDBCommunity.Quando você aplica o recurso personalizado do
MongoDBCommunity, o operador Kubernetes começa a distribuir os nós MongoDB (Pods). Essa etapa pausa a execução até que a fase de status do recursomdbc-rssejaRunning, o que indica que o conjunto de réplicas da MongoDB Community está operacional.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 1 Waiting for MongoDBCommunity resource to reach Running phase... 2 mongodbcommunity.mongodbcommunity.mongodb.com/mdbc-rs condition met 3 4 MongoDBCommunity resource 5 NAME PHASE VERSION 6 mdbc-rs Running 8.2 7 8 Pods running in cluster minikube 9 NAME READY STATUS RESTARTS AGE 10 mdbc-rs-0 2/2 Running 0 2m30s 11 mdbc-rs-1 2/2 Running 0 82s 12 mdbc-rs-2 2/2 Running 0 38s 13 mongodb-kubernetes-operator-5776c8b4df-cppnf 1/1 Running 0 7m37s
Obrigatório. Crie e implemente o recurso para MongoDB Search e Vector Search.
Você pode implantar 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
mdbc-rs.Este recurso especifica os requisitos de recursos de CPU e memória para os nós de pesquisa. Para saber mais sobre as configurações neste recurso personalizado, consulte Configurações de pesquisa do MongoDB e Vector Search.
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). Essa etapa pausa a execução até que a fase de status do recurso
mdbc-rsMongoDBSearch sejaRunning, o que indica que a pesquisa do MongoDB 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/"${MDB_RESOURCE_NAME}" --timeout=300s
Opcional. Verifique o status do recurso MongoDB Community .
Certifique-se de que a implantação do recurso MongoDBCommunity com o MongoDBSearch tenha sido bem-sucedida.
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
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 "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
1 MongoDBCommunity resource 2 NAME PHASE VERSION 3 mdbc-rs Running 8.3.4 4 5 MongoDBSearch resource 6 NAME PHASE VERSION LOADBALANCER METRICSFORWARDER AGE 7 mdbc-rs Running 1.70.1 Running 5m12s 8 9 Pods running in cluster kind-kind 10 NAME READY STATUS RESTARTS AGE 11 mdbc-rs-0 2/2 Running 1 (27s ago) 7m43s 12 mdbc-rs-1 2/2 Running 1 (3m1s ago) 6m42s 13 mdbc-rs-2 2/2 Running 1 (104s ago) 5m56s 14 mdbc-rs-search-0-0 1/1 Running 0 4m32s 15 mongodb-kubernetes-operator-5594c7cd4c-dn82g 1/1 Running 0 8m4s
Verificar a implantação
Após a conclusão do procedimento, confirme se a implantação está saudável antes de executar as queries.
checkpoint | Etapa de verificação |
|---|---|
MongoDB Community recurso em execução | Execute |
Recurso do MongoDB Search em execução | Execute |
Todos os pods estão saudáveis | Execute |
query de pesquisa bem-sucedida | Conecte-se ao conjunto de réplicas e execute uma query de pesquisa do MongoDB ou uma query de pesquisa vetorial para confirmar se o índice de pesquisa está acessível. |
Próximos passos
Depois de implantar o MongoDB Search e a pesquisa vetorial com o MongoDB Community Edition, você pode:
Adicionar dados e executar query: Carregue dados em seu cluster MongoDB, crie índices de pesquisa e pesquisa vetorial do MongoDB e execute query em seus dados. Para saber mais, consulte Usar pesquisa e pesquisa vetorial do MongoDB.
Configurar as configurações de pesquisa: ajuste as configurações de recursos para sua implantação de pesquisa. Para saber mais, consulte MongoDB Search e configurações de pesquisa vetorial.