MongoDB.local SF, Jan 15: See the speaker lineup & ship your AI vision faster. Use WEB50 to save 50%
Find out more >
Docs Menu
Docs Home
/ /

외부 MongoDB 엔터프라이즈 에서 MongoDB Search 및 Vector Search 설치 및 사용

Kubernetes Operator를 사용하여 외부 MongoDB 엔터프라이즈 Edition v8.2.0 이상 서버 에서 실행 Kubernetes 클러스터 에 MongoDB Search 및 Vector Search를 배포 할 수 있습니다. 이 절차에서는 mongot 새 또는 기존 외부 복제본 세트 배포서버 사용하도록 Kubernetes 클러스터 에서 프로세스 배포 하고 구성하는 방법을 보여 줍니다. 이 튜토리얼에서는 TLS를 활성화하여 보안 배포서버 구성하는 방법을 보여줍니다.TLS 인증서를 제공해야 합니다.

  • MongoDBSearch 서비스를 위한 서버 인증서 및 키입니다.

  • 외부 MongoDB database 에 대한 공용 CA 인증서입니다.

MongoDB Search 및 Vector Search를 배포 하려면 다음이 필요합니다.

  • 로컬에서 사용할 수 있는 kubeconfig 가 포함 실행 Kubernetes 클러스터 입니다.

  • Kubernetes 명령줄 도구인 kubectl이(가) 클러스터 와 통신하도록 구성되었습니다.

  • Kubernetes 용 패키지 관리자인Helm을 사용하여 Kubernetes Operator를 설치합니다.

  • 이 튜토리얼의 명령을 실행 하려면 Bash v5.1 이상을 사용해야 합니다.

  • 데이터 저장을 위해 버전 8.2 이상을 실행 MongoDB 엔터프라이즈 Edition 복제본 세트 .

    MongoDB 엔터프라이즈 배포에 대해 자세히 학습 MongoDB 데이터베이스 리소스 배포 및 구성을 참조하세요.

  • MongoDB 작업 관리를 위해 실행 MongoDB Cloud Manager 또는 MongoDB Ops Manager .

  • 외부 DB TLS

    외부 MongoDB 엔터프라이즈 배포서버 TLS 연결을 사용하고 요구하도록 구성되어야 합니다.

  • 외부 DB CA 파일

    외부 MongoDB deployment의 서버 인증서에 서명하는 데 사용한 공개 CA(인증 기관) 인증서 파일 ( 예시 : external-ca.crt)이 있어야 합니다. 이 파일 로컬에 필요합니다.

  • 서비스 인증서 파일 검색

    MongoDBSearch 서비스에 대해 유효한 TLS 서버 인증서와 비공개 키( search-service.crt 예시:,)가search-service.key 있어야 합니다. 이 인증서는 서비스에 액세스 데 사용할 호스트 이름에 대해 유효해야 합니다( mdbs-search.example.com 예시:).

Kubernetes Operator를 사용하여 MongoDB Search 및 Vector Search를 설치하기 전에 다음을 수행해야 합니다.

Cloud Manager 또는 MongoDB Ops Manager UI 에 로그인하고 다음 단계를 수행하여 MongoDB Search 및 Vector Search에 대해 Cloud Manager 또는 MongoDB Ops Manager 구성합니다.

1
  1. MongoDB Cloud Manager 또는 MongoDB Ops Manager 에 로그인합니다.

  2. Deployment 탭을 클릭합니다.

  3. 수정하려는 클러스터 선택합니다.

2
  1. Modify 버튼을 클릭하여 배포서버 구성 편집기를 엽니다.

  2. Process Configuration 섹션에서 Advanced Configuration Options을 클릭합니다.

  3. Add Option 버튼을 클릭하고 드롭다운에서 setParameter Startup Option 를 선택합니다.

  4. 이름과 값을 추가한 후 Add 를 클릭하여 필드에 다음 매개변수를 하나씩 추가합니다.

    Parameter

    mongotHost

    검색 호스트 이름 및 포트입니다. 예시: search-node1.example.com:27017.

    searchIndexManagementHostAndPort

    검색 호스트 이름 및 포트입니다. 예시: search-node1.example.com:27017.

    skipAuthenticationToSearchIndexManagementServer

    false

    searchTLSMode

    구성된 TLS 모드 입니다. 예시 를 들어 mongot 프로세스 TLS 연결을 허용하도록 구성된 경우 preferTLS입니다.

    useGrpcForSearch

    true

3
  1. Review & Deploy 버튼을 클릭합니다.

  2. 검토하고 확인하여 변경 사항을 적용 .

    Cloud Manager 또는 MongoDB Ops Manager 복제본 세트 를 롤링 재시작 하여 새 구성을 적용 .

역할 가진 사용자를 만들어야 searchCoordinator 합니다. MongoDB 버전 이상에서는 8.2 이(가) searchCoordinator 내장 역할 입니다. 사용자를 생성하고 사용자에게 역할 할당해야 합니다.

사용자를 만들고 사용자에게 내장 searchCoordinator 역할 할당하려면 Cloud Manager , MongoDB Ops Manager UI 또는 를 사용하여 다음 단계를 완료합니다.mongosh

1
  1. Cloud Manager 또는 MongoDB Ops Manager UI 에 로그인합니다.

  2. Security 탭 으로 고 (Go) Users을(를) 클릭합니다.

2
3

Username

search-sync-source을(를) 입력합니다.

Password

강력하고 안전한 비밀번호를 설정하세요.

Authentication Database

admin 데이터베이스 선택합니다.

4

Assign Roles 섹션의 admin 데이터베이스 드롭다운에서 내장 searchCoordinator 역할 선택합니다.

5

mongosh에서 다음 명령을 실행 .

1
use admin;
2
db.createUser({
user: "search-sync-source",
pwd: "<PASSWORD>", // Replace with your actual password
roles: [
{ role: "searchCoordinator", db: "admin" }
]
});

터미널에서 이 튜토리얼의 샘플 코드를 실행 수 있는 환경을 준비합니다.

1

이 절차의 후속 단계에서 사용할 환경 변수를 설정하다 하려면 다음을 복사하고 환경 변수 값을 설정하다 다음 터미널에서 명령을 실행 .

1export K8S_CTX="<your kubernetes context here>"
2
3export MDB_NS="mongodb"
4
5export MDB_VERSION="8.2.0"
6
7export MDB_ADMIN_USER_PASSWORD="admin-user-password-CHANGE-ME"
8export MDB_USER_PASSWORD="mdb-user-password-CHANGE-ME"
9export MDB_SEARCH_SYNC_USER_PASSWORD="search-sync-user-password-CHANGE-ME"
10
11export MDB_TLS_CA_SECRET_NAME="ca"
12export MDB_SEARCH_TLS_SECRET_NAME="mdbs-search-tls"
13
14export MDB_SEARCH_SERVICE_NAME="mdbs-search"
15export 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
19export MDB_EXTERNAL_HOST_0="mdbc-rs-0.mdbc-rs-svc.${MDB_NS}.svc.cluster.local:27017"
20export MDB_EXTERNAL_HOST_1="mdbc-rs-1.mdbc-rs-svc.${MDB_NS}.svc.cluster.local:27017"
21export 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
24export MDB_EXTERNAL_REPLICA_SET_NAME="mdbc-rs"
25
26export OPERATOR_HELM_CHART="mongodb/mongodb-kubernetes"
27export OPERATOR_ADDITIONAL_HELM_VALUES=""
28
29export 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"

이러한 환경 변수는 현재 터미널 세션에서만 사용할 수 있으며 새 터미널 세션에서 다시 설정하다 해야 합니다.

2

Helm 은 Kubernetes 에서 MongoDB 인스턴스의 배포서버 및 관리 자동화합니다. Kubernetes Operator 연산자 설치를 위한 Helm 차트 포함된 Helm 리포지토리 이미 추가한 경우 이 단계를 건너뜁니다. 그렇지 않으면 Helm 리포지토리 추가합니다.

다음 명령을 추가, 복사, 붙여넣기 및 실행 하려면 다음을 수행하세요.

1helm repo add mongodb https://mongodb.github.io/helm-charts
2helm repo update mongodb
3helm search repo mongodb/mongodb-kubernetes
1"mongodb" has been added to your repositories
2Hang tight while we grab the latest from your chart repositories...
3...Successfully got an update from the "mongodb" chart repository
4Update Complete. ⎈Happy Helming!⎈
5NAME CHART VERSION APP VERSION DESCRIPTION
6mongodb/mongodb-kubernetes 1.6.1 MongoDB Controllers for Kubernetes translate th...
3

Kubernetes Operator는,MongoDB MongoDBOpsManager및 MongoDBSearch 사용자 지정 리소스를 감시하고 MongoDB deployment의 수명 주기를 관리합니다. Kubernetes Operator용 MongoDB 컨트롤러를 이미 설치한 경우 이 단계를 건너뛰세요. 그렇지 않으면 이전 단계에서 추가한 Helm 리포지토리 에서 Kubernetes Operator용 MongoDB 컨트롤러를 설치합니다.

mongodb 네임스페이스 에 Kubernetes Operator용 MongoDB 컨트롤러를 설치하려면 다음을 복사하여 붙여넣고 실행 .

1helm 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}"
1Release "mongodb-kubernetes" does not exist. Installing it now.
2NAME: mongodb-kubernetes
3LAST DEPLOYED: Wed Dec 17 11:23:39 2025
4NAMESPACE: mongodb
5STATUS: deployed
6REVISION: 1
7TEST SUITE: None
8USER-SUPPLIED VALUES:
9{}
10
11COMPUTED VALUES:
12agent:
13 name: mongodb-agent
14 version: 108.0.12.8846-1
15community:
16 agent:
17 name: mongodb-agent
18 version: 108.0.2.8729-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
39database:
40 name: mongodb-kubernetes-database
41 version: 1.6.1
42initAppDb:
43 name: mongodb-kubernetes-init-appdb
44 version: 1.6.1
45initDatabase:
46 name: mongodb-kubernetes-init-database
47 version: 1.6.1
48initOpsManager:
49 name: mongodb-kubernetes-init-ops-manager
50 version: 1.6.1
51managedSecurityContext: false
52mongodb:
53 appdbAssumeOldFormat: false
54 name: mongodb-enterprise-server
55 repo: quay.io/mongodb
56multiCluster:
57 clusterClientTimeout: 10
58 clusters: []
59 kubeConfigSecretName: mongodb-enterprise-operator-multi-cluster-kubeconfig
60 performFailOver: true
61operator:
62 additionalArguments: []
63 affinity: {}
64 baseName: mongodb-kubernetes
65 createOperatorServiceAccount: true
66 createResourcesServiceAccountsAndRoles: true
67 deployment_name: mongodb-kubernetes-operator
68 enableClusterMongoDBRoles: true
69 enablePVCResize: true
70 env: prod
71 maxConcurrentReconciles: 1
72 mdbDefaultArchitecture: non-static
73 name: mongodb-kubernetes-operator
74 nodeSelector: {}
75 operator_image_name: mongodb-kubernetes
76 podSecurityContext:
77 runAsNonRoot: true
78 runAsUser: 2000
79 replicas: 1
80 resources:
81 limits:
82 cpu: 1100m
83 memory: 1Gi
84 requests:
85 cpu: 500m
86 memory: 200Mi
87 securityContext: {}
88 telemetry:
89 collection:
90 clusters: {}
91 deployments: {}
92 frequency: 1h
93 operators: {}
94 send:
95 frequency: 168h
96 tolerations: []
97 vaultSecretBackend:
98 enabled: false
99 tlsSecretRef: ""
100 version: 1.6.1
101 watchedResources:
102 - mongodb
103 - opsmanagers
104 - mongodbusers
105 - mongodbcommunity
106 - mongodbsearch
107 webhook:
108 installClusterRole: true
109 registerConfiguration: true
110opsManager:
111 name: mongodb-enterprise-ops-manager-ubi
112readinessProbe:
113 name: mongodb-kubernetes-readinessprobe
114 version: 1.0.23
115registry:
116 agent: quay.io/mongodb
117 database: quay.io/mongodb
118 imagePullSecrets: null
119 initAppDb: quay.io/mongodb
120 initDatabase: quay.io/mongodb
121 initOpsManager: quay.io/mongodb
122 operator: quay.io/mongodb
123 opsManager: quay.io/mongodb
124 pullPolicy: Always
125 readinessProbe: quay.io/mongodb
126 versionUpgradeHook: quay.io/mongodb
127search:
128 name: mongodb-search
129 repo: quay.io/mongodb
130 version: 0.55.0
131versionUpgradeHook:
132 name: mongodb-kubernetes-operator-version-upgrade-post-start-hook
133 version: 1.0.10
134
135HOOKS:
136MANIFEST:
137---
138# Source: mongodb-kubernetes/templates/database-roles.yaml
139apiVersion: v1
140kind: ServiceAccount
141metadata:
142 name: mongodb-kubernetes-appdb
143 namespace: mongodb
144---
145# Source: mongodb-kubernetes/templates/database-roles.yaml
146apiVersion: v1
147kind: ServiceAccount
148metadata:
149 name: mongodb-kubernetes-database-pods
150 namespace: mongodb
151---
152# Source: mongodb-kubernetes/templates/database-roles.yaml
153apiVersion: v1
154kind: ServiceAccount
155metadata:
156 name: mongodb-kubernetes-ops-manager
157 namespace: mongodb
158---
159# Source: mongodb-kubernetes/templates/operator-sa.yaml
160apiVersion: v1
161kind: ServiceAccount
162metadata:
163 name: mongodb-kubernetes-operator
164 namespace: mongodb
165---
166# Source: mongodb-kubernetes/templates/operator-roles-clustermongodbroles.yaml
167kind: ClusterRole
168apiVersion: rbac.authorization.k8s.io/v1
169metadata:
170 name: mongodb-kubernetes-operator-mongodb-cluster-mongodb-role
171rules:
172 - apiGroups:
173 - mongodb.com
174 verbs:
175 - '*'
176 resources:
177 - clustermongodbroles
178---
179# Source: mongodb-kubernetes/templates/operator-roles-telemetry.yaml
180# Additional ClusterRole for clusterVersionDetection
181kind: ClusterRole
182apiVersion: rbac.authorization.k8s.io/v1
183metadata:
184 name: mongodb-kubernetes-operator-cluster-telemetry
185rules:
186 # Non-resource URL permissions
187 - nonResourceURLs:
188 - "/version"
189 verbs:
190 - get
191 # Cluster-scoped resource permissions
192 - apiGroups:
193 - ''
194 resources:
195 - namespaces
196 resourceNames:
197 - kube-system
198 verbs:
199 - get
200 - apiGroups:
201 - ''
202 resources:
203 - nodes
204 verbs:
205 - list
206---
207# Source: mongodb-kubernetes/templates/operator-roles-webhook.yaml
208kind: ClusterRole
209apiVersion: rbac.authorization.k8s.io/v1
210metadata:
211 name: mongodb-kubernetes-operator-mongodb-webhook-cr
212rules:
213 - apiGroups:
214 - "admissionregistration.k8s.io"
215 resources:
216 - validatingwebhookconfigurations
217 verbs:
218 - get
219 - create
220 - update
221 - delete
222 - apiGroups:
223 - ""
224 resources:
225 - services
226 verbs:
227 - get
228 - list
229 - watch
230 - create
231 - update
232 - delete
233---
234# Source: mongodb-kubernetes/templates/operator-roles-clustermongodbroles.yaml
235kind: ClusterRoleBinding
236apiVersion: rbac.authorization.k8s.io/v1
237metadata:
238 name: mongodb-kubernetes-operator-mongodb-cluster-mongodb-role-binding
239roleRef:
240 apiGroup: rbac.authorization.k8s.io
241 kind: ClusterRole
242 name: mongodb-kubernetes-operator-mongodb-cluster-mongodb-role
243subjects:
244 - kind: ServiceAccount
245 name: mongodb-kubernetes-operator
246 namespace: mongodb
247---
248# Source: mongodb-kubernetes/templates/operator-roles-telemetry.yaml
249# ClusterRoleBinding for clusterVersionDetection
250kind: ClusterRoleBinding
251apiVersion: rbac.authorization.k8s.io/v1
252metadata:
253 name: mongodb-kubernetes-operator-mongodb-cluster-telemetry-binding
254roleRef:
255 apiGroup: rbac.authorization.k8s.io
256 kind: ClusterRole
257 name: mongodb-kubernetes-operator-cluster-telemetry
258subjects:
259 - kind: ServiceAccount
260 name: mongodb-kubernetes-operator
261 namespace: mongodb
262---
263# Source: mongodb-kubernetes/templates/operator-roles-webhook.yaml
264kind: ClusterRoleBinding
265apiVersion: rbac.authorization.k8s.io/v1
266metadata:
267 name: mongodb-kubernetes-operator-mongodb-webhook-crb
268roleRef:
269 apiGroup: rbac.authorization.k8s.io
270 kind: ClusterRole
271 name: mongodb-kubernetes-operator-mongodb-webhook-cr
272subjects:
273 - kind: ServiceAccount
274 name: mongodb-kubernetes-operator
275 namespace: mongodb
276---
277# Source: mongodb-kubernetes/templates/database-roles.yaml
278kind: Role
279apiVersion: rbac.authorization.k8s.io/v1
280metadata:
281 name: mongodb-kubernetes-appdb
282 namespace: mongodb
283rules:
284 - apiGroups:
285 - ''
286 resources:
287 - secrets
288 verbs:
289 - get
290 - apiGroups:
291 - ''
292 resources:
293 - pods
294 verbs:
295 - patch
296 - delete
297 - get
298---
299# Source: mongodb-kubernetes/templates/operator-roles-base.yaml
300kind: Role
301apiVersion: rbac.authorization.k8s.io/v1
302metadata:
303 name: mongodb-kubernetes-operator
304 namespace: mongodb
305rules:
306 - apiGroups:
307 - ''
308 resources:
309 - services
310 verbs:
311 - get
312 - list
313 - watch
314 - create
315 - update
316 - delete
317 - apiGroups:
318 - ''
319 resources:
320 - secrets
321 - configmaps
322 verbs:
323 - get
324 - list
325 - create
326 - update
327 - delete
328 - watch
329 - apiGroups:
330 - apps
331 resources:
332 - statefulsets
333 verbs:
334 - create
335 - get
336 - list
337 - watch
338 - delete
339 - update
340 - apiGroups:
341 - ''
342 resources:
343 - pods
344 verbs:
345 - get
346 - list
347 - watch
348 - delete
349 - deletecollection
350 - apiGroups:
351 - mongodbcommunity.mongodb.com
352 resources:
353 - mongodbcommunity
354 - mongodbcommunity/status
355 - mongodbcommunity/spec
356 - mongodbcommunity/finalizers
357 verbs:
358 - '*'
359 - apiGroups:
360 - mongodb.com
361 verbs:
362 - '*'
363 resources:
364 - mongodb
365 - mongodb/finalizers
366 - mongodbusers
367 - mongodbusers/finalizers
368 - opsmanagers
369 - opsmanagers/finalizers
370 - mongodbmulticluster
371 - mongodbmulticluster/finalizers
372 - mongodbsearch
373 - mongodbsearch/finalizers
374 - mongodb/status
375 - mongodbusers/status
376 - opsmanagers/status
377 - mongodbmulticluster/status
378 - mongodbsearch/status
379---
380# Source: mongodb-kubernetes/templates/operator-roles-pvc-resize.yaml
381kind: Role
382apiVersion: rbac.authorization.k8s.io/v1
383metadata:
384 name: mongodb-kubernetes-operator-pvc-resize
385 namespace: mongodb
386rules:
387 - apiGroups:
388 - ''
389 resources:
390 - persistentvolumeclaims
391 verbs:
392 - get
393 - delete
394 - list
395 - watch
396 - patch
397 - update
398---
399# Source: mongodb-kubernetes/templates/database-roles.yaml
400kind: RoleBinding
401apiVersion: rbac.authorization.k8s.io/v1
402metadata:
403 name: mongodb-kubernetes-appdb
404 namespace: mongodb
405roleRef:
406 apiGroup: rbac.authorization.k8s.io
407 kind: Role
408 name: mongodb-kubernetes-appdb
409subjects:
410 - kind: ServiceAccount
411 name: mongodb-kubernetes-appdb
412 namespace: mongodb
413---
414# Source: mongodb-kubernetes/templates/operator-roles-base.yaml
415kind: RoleBinding
416apiVersion: rbac.authorization.k8s.io/v1
417metadata:
418 name: mongodb-kubernetes-operator
419 namespace: mongodb
420roleRef:
421 apiGroup: rbac.authorization.k8s.io
422 kind: Role
423 name: mongodb-kubernetes-operator
424subjects:
425 - kind: ServiceAccount
426 name: mongodb-kubernetes-operator
427 namespace: mongodb
428---
429# Source: mongodb-kubernetes/templates/operator-roles-pvc-resize.yaml
430kind: RoleBinding
431apiVersion: rbac.authorization.k8s.io/v1
432metadata:
433 name: mongodb-kubernetes-operator-pvc-resize-binding
434 namespace: mongodb
435roleRef:
436 apiGroup: rbac.authorization.k8s.io
437 kind: Role
438 name: mongodb-kubernetes-operator-pvc-resize
439subjects:
440 - kind: ServiceAccount
441 name: mongodb-kubernetes-operator
442 namespace: mongodb
443---
444# Source: mongodb-kubernetes/templates/operator.yaml
445apiVersion: apps/v1
446kind: Deployment
447metadata:
448 name: mongodb-kubernetes-operator
449 namespace: mongodb
450spec:
451 replicas: 1
452 selector:
453 matchLabels:
454 app.kubernetes.io/component: controller
455 app.kubernetes.io/name: mongodb-kubernetes-operator
456 app.kubernetes.io/instance: mongodb-kubernetes-operator
457 template:
458 metadata:
459 labels:
460 app.kubernetes.io/component: controller
461 app.kubernetes.io/name: mongodb-kubernetes-operator
462 app.kubernetes.io/instance: mongodb-kubernetes-operator
463 spec:
464 serviceAccountName: mongodb-kubernetes-operator
465 securityContext:
466 runAsNonRoot: true
467 runAsUser: 2000
468 containers:
469 - name: mongodb-kubernetes-operator
470 image: "quay.io/mongodb/mongodb-kubernetes:1.6.1"
471 imagePullPolicy: Always
472 args:
473 - -watch-resource=mongodb
474 - -watch-resource=opsmanagers
475 - -watch-resource=mongodbusers
476 - -watch-resource=mongodbcommunity
477 - -watch-resource=mongodbsearch
478 - -watch-resource=clustermongodbroles
479 command:
480 - /usr/local/bin/mongodb-kubernetes-operator
481 resources:
482 limits:
483 cpu: 1100m
484 memory: 1Gi
485 requests:
486 cpu: 500m
487 memory: 200Mi
488 env:
489 - name: OPERATOR_ENV
490 value: prod
491 - name: MDB_DEFAULT_ARCHITECTURE
492 value: non-static
493 - name: NAMESPACE
494 valueFrom:
495 fieldRef:
496 fieldPath: metadata.namespace
497 - name: WATCH_NAMESPACE
498 valueFrom:
499 fieldRef:
500 fieldPath: metadata.namespace
501 - name: MDB_OPERATOR_TELEMETRY_COLLECTION_FREQUENCY
502 value: "1h"
503 - name: MDB_OPERATOR_TELEMETRY_SEND_FREQUENCY
504 value: "168h"
505 - name: CLUSTER_CLIENT_TIMEOUT
506 value: "10"
507 - name: IMAGE_PULL_POLICY
508 value: Always
509 # Database
510 - name: MONGODB_ENTERPRISE_DATABASE_IMAGE
511 value: quay.io/mongodb/mongodb-kubernetes-database
512 - name: INIT_DATABASE_IMAGE_REPOSITORY
513 value: quay.io/mongodb/mongodb-kubernetes-init-database
514 - name: INIT_DATABASE_VERSION
515 value: "1.6.1"
516 - name: DATABASE_VERSION
517 value: "1.6.1"
518 # Ops Manager
519 - name: OPS_MANAGER_IMAGE_REPOSITORY
520 value: quay.io/mongodb/mongodb-enterprise-ops-manager-ubi
521 - name: INIT_OPS_MANAGER_IMAGE_REPOSITORY
522 value: quay.io/mongodb/mongodb-kubernetes-init-ops-manager
523 - name: INIT_OPS_MANAGER_VERSION
524 value: "1.6.1"
525 # AppDB
526 - name: INIT_APPDB_IMAGE_REPOSITORY
527 value: quay.io/mongodb/mongodb-kubernetes-init-appdb
528 - name: INIT_APPDB_VERSION
529 value: "1.6.1"
530 - name: OPS_MANAGER_IMAGE_PULL_POLICY
531 value: Always
532 - name: AGENT_IMAGE
533 value: "quay.io/mongodb/mongodb-agent:108.0.12.8846-1"
534 - name: MDB_AGENT_IMAGE_REPOSITORY
535 value: "quay.io/mongodb/mongodb-agent"
536 - name: MONGODB_IMAGE
537 value: mongodb-enterprise-server
538 - name: MONGODB_REPO_URL
539 value: quay.io/mongodb
540 - name: PERFORM_FAILOVER
541 value: 'true'
542 - name: MDB_MAX_CONCURRENT_RECONCILES
543 value: "1"
544 - name: POD_NAME
545 valueFrom:
546 fieldRef:
547 fieldPath: metadata.name
548 - name: OPERATOR_NAME
549 value: mongodb-kubernetes-operator
550 # Community Env Vars Start
551 - name: MDB_COMMUNITY_AGENT_IMAGE
552 value: "quay.io/mongodb/mongodb-agent:108.0.2.8729-1"
553 - name: VERSION_UPGRADE_HOOK_IMAGE
554 value: "quay.io/mongodb/mongodb-kubernetes-operator-version-upgrade-post-start-hook:1.0.10"
555 - name: READINESS_PROBE_IMAGE
556 value: "quay.io/mongodb/mongodb-kubernetes-readinessprobe:1.0.23"
557 - name: MDB_COMMUNITY_IMAGE
558 value: "mongodb-community-server"
559 - name: MDB_COMMUNITY_REPO_URL
560 value: "quay.io/mongodb"
561 - name: MDB_COMMUNITY_IMAGE_TYPE
562 value: "ubi8"
563 # Community Env Vars End
564 - name: MDB_SEARCH_REPO_URL
565 value: "quay.io/mongodb"
566 - name: MDB_SEARCH_NAME
567 value: "mongodb-search"
568 - name: MDB_SEARCH_VERSION
569 value: "0.55.0"

앞의 명령은 생성되는 mongodb 네임스페이스 에 Kubernetes 연산자를 설치합니다(아직 없는 경우). 설치 후 Kubernetes Operator는 MongoDBSearch 사용자 지정 리소스를 감시하고 MongoDB Search 및 Vector Search 배포의 수명 주기를 관리 .

1

mongot 프로세스 검색 인덱스를 생성하고 검색 쿼리를 실행 위해 외부 MongoDB deployment 에 연결하려면 인증 자격 증명 필요합니다. 이 단계에서는 다음과 같은 Kubernetes 시크릿을 생성합니다.

  • mdb-admin-user-password - MongoDB 관리자의 자격 증명 .

  • mdb-user-password - 검색 쿼리를 수행할 수 있는 권한이 있는 사용자의 자격 자격 증명 .

  • mdbc-rs-search-sync-source-password - mongot 프로세스 에서 데이터를 동기화하고 인덱스를 관리 위해 내부적으로 사용하는 전용 검색 사용자의 자격 증명 .

Kubernetes Operator는 이러한 시크릿을 MongoDB pod에 마운트합니다.

시크릿을 생성하려면 MongoDB Search 및 Vector Search를 배포 하려는 네임스페이스 에서 다음을 복사하여 붙여넣은 후 실행 .

1# Create admin user secret
2kubectl 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
7kubectl 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
12kubectl 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
16echo "User secrets created."
1secret/mdb-admin-user-password created
2secret/mdbc-rs-search-sync-source-password created
3secret/mdb-user-password created
2

로드 밸런싱 없이 검색 노드 의 인스턴스 하나를 배포 할 수 있습니다. 배포 하려면 다음 단계를 완료하세요.

  1. mdbs이라는 이름의 MongoDBSearch 사용자 지정 리소스 만듭니다.

    이 리소스 에는 다음이 포함되어 있습니다.

    spec.source.external.hostAndPorts

    외부 MongoDB 복제본 세트 멤버 목록입니다.

    spec.source.username

    동기화 사용자 사용자 이름 검색합니다.

    spec.source.passwordSecretRef

    동기화 사용자 비밀번호를 검색합니다.

    spec.source.external.tls.ca.name

    외부 데이터베이스 신뢰하도록 MongoDBSearch 파드를 구성합니다. 외부 MongoDB 에 대한 공용 CA 인증서가 포함된 Kubernetes 시크릿을 가리킵니다.

    spec.security.tls.certificateKeySecretRef.name

    MongoDBSearch 서비스를 보호합니다. MongoDBSearch 파드가 수신 클라이언트에 제공할 TLS 서버 인증서와 비공개 키가 포함된 Kubernetes 시크릿을 가리킵니다.

    spec.resourceRequirements

    검색 컨테이너 에 대한 CPU 및 메모리 리소스 요구 사항입니다.

    이 사용자 지정 리소스 의 설정에 대해 자세히 학습하려면 MongoDB 검색 및 벡터 검색 설정을 참조하세요.

    1kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - <<EOF
    2apiVersion: mongodb.com/v1
    3kind: MongoDBSearch
    4metadata:
    5 name: ${MDB_SEARCH_RESOURCE_NAME:-mdbs}
    6spec:
    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
    31EOF
  2. MongoDBSearch 리소스 배포서버 완료될 때까지 기다립니다.

    MongoDBSearch 사용자 지정 리소스 적용 하면 Kubernetes 연산자 검색 노드(pod) 배포를 시작합니다. 이 단계는 mdbs 리소스의 상태 단계가 Running이 될 때까지 실행을 일시 중지하며, 이는 MongoDB Search StatefulSet가 작동 가능함을 나타냅니다.

    1echo "Waiting for MongoDBSearch resource to reach Running phase..."
    2
    3kubectl --context "${K8S_CTX}" -n "${MDB_NS}" wait --for=jsonpath='{.status.phase}'=Running mdbs/"${MDB_SEARCH_RESOURCE_NAME:-mdbs}" --timeout=300s
3

외부 MongoDB 인스턴스를 검색 서비스에 연결할 활성화 하려면 MongoDB Search 및 Vector Search에 대한 외부 액세스 구성해야 합니다. Kubernetes 클러스터 외부에 검색 파드를 노출하는 LoadBalancer 서비스를 생성할 수 있습니다.

다음 서비스는 Kubernetes 클러스터 외부에서 액세스할 수 있는 외부 IP 주소 또는 호스트 이름을 사용하여 포트 27028 에 MongoDBSearch 서비스를 노출합니다.

1kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - <<YAML
2apiVersion: v1
3kind: Service
4metadata:
5 name: ${MDB_SEARCH_SERVICE_NAME}
6spec:
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
14YAML
15
16echo "Waiting for external IP to be assigned to service ${MDB_SEARCH_SERVICE_NAME}..."
17TIMEOUT=120 # 2 minutes timeout
18ELAPSED=0
19while [ ${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))
28done
29
30if [ ${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
34fi
4

네임스페이스 파드에서 MongoDB 복제본 세트 멤버, Kubernetes Operator용 MongoDB 컨트롤러 및 검색 노드에 대해 실행 모든 파드를 확인합니다.

1echo; echo "MongoDBSearch resource"
2kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get mdbs/mdbs
3echo; echo "Search pods running in cluster ${K8S_CTX}"
4kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get pods -l app=mdbs-search-svc
5echo; echo "All pods in namespace ${MDB_NS}"
6kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get pods
1MongoDBSearch resource
2NAME PHASE VERSION AGE
3mdbs Running 0.55.0 33s
4
5Search pods running in cluster kind-kind
6NAME READY STATUS RESTARTS AGE
7mdbs-search-0 1/1 Running 0 33s
8
9All pods in namespace mongodb
10NAME READY STATUS RESTARTS AGE
11mdbc-rs-0 2/2 Running 0 3m3s
12mdbc-rs-1 2/2 Running 0 116s
13mdbc-rs-2 2/2 Running 0 68s
14mdbs-search-0 1/1 Running 0 33s
15mongodb-kubernetes-operator-7bd6cdd889-z9w4z 1/1 Running 0 3m23s

외부 MongoDB 엔터프라이즈 와 함께 사용할 MongoDB Search 및 Vector Search를 성공적으로 배포했으므로 이제 MongoDB cluster 에 데이터를 추가하고, MongoDB Search 및 Vector Search 인덱스를 생성하고, 데이터에 대해 쿼리를 실행 . 자세한 학습은 MongoDB 검색 및 벡터 검색 설정을 참조하세요.

이 페이지의 내용