Docs Menu
Docs Home
/ /

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

Kubernetes Operator를 사용하여 외부 MongoDB 엔터프라이즈 v8.0.10 이상 서버 에서 실행 Kubernetes 클러스터 에 MongoDB Search 및 Vector Search를 배포 할 수 있습니다. 이 절차에서는 새 또는 기존 외부 복제본 세트 배포서버 사용하도록 Kubernetes 클러스터 에서 mongot 프로세스 배포 하고 구성하는 방법을 보여 줍니다.

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

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

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

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

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

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

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

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

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입니다.

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

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

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

searchCoordinator 역할 가진 사용자를 만들어야 합니다. MongoDB 버전 8.2 이상에서는 searchCoordinator 이 내장 역할 입니다. 사용자를 생성하고 사용자에게 역할 할당해야 합니다. 8.2 이전 및 8.0.10 이상의 MongoDB 버전의 경우 사용자를 만들기 전에 수동으로 역할 만들고 권한을 할당해야 합니다. 실행 중인 MongoDB 버전에 해당하는 탭 선택하여 searchCoordinator 역할 가진 사용자를 만듭니다.

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

1

이 절차의 후속 단계에서 사용할 환경 변수를 설정하다 하려면 다음을 복사하고 환경 변수의 값을 설정하다 다음 환경 변수를 로드합니다.

1export K8S_CTX="<your kubernetes context here>"
2
3export MDB_NS="mongodb"
4
5export MDB_VERSION="8.0.10"
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_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
15export MDB_EXTERNAL_HOST_0="mdbc-rs-0.mdbc-rs-svc.${MDB_NS}.svc.cluster.local:27017"
16export MDB_EXTERNAL_HOST_1="mdbc-rs-1.mdbc-rs-svc.${MDB_NS}.svc.cluster.local:27017"
17export 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
20export 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
24export MDB_EXTERNAL_KEYFILE_CONTENT="your-mongodb-keyfile-content-CHANGE-ME"
25
26# REPLACE with your actual external MongoDB replica set name
27export MDB_EXTERNAL_REPLICA_SET_NAME="mdbc-rs"
28
29export OPERATOR_HELM_CHART="mongodb/mongodb-kubernetes"
30export OPERATOR_ADDITIONAL_HELM_VALUES=""
31
32export MDB_CONNECTION_STRING="mongodb://mdb-user:${MDB_USER_PASSWORD}@${MDB_EXTERNAL_HOST_0}/?replicaSet=${MDB_EXTERNAL_REPLICA_SET_NAME}"
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" already exists with the same configuration, skipping
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.3.0 MongoDB Controllers for Kubernetes translate th...
3

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

앞의 명령은 생성되는 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를 배포 하려는 네임스페이스 에서 다음을 복사하여 붙여넣은 후 실행 .

1kubectl --context "${K8S_CTX}" --namespace "${MDB_NS}" \
2 create secret generic mdb-admin-user-password \
3 --from-literal=password="${MDB_ADMIN_USER_PASSWORD}"
4
5kubectl --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
9kubectl --context "${K8S_CTX}" --namespace "${MDB_NS}" \
10 create secret generic mdb-user-password \
11 --from-literal=password="${MDB_USER_PASSWORD}"
1secret/mdb-admin-user-password created
2secret/mdbc-rs-search-sync-source-password created
3secret/mdb-user-password created
2

외부 MongoDB 에서 연결을 인증하기 위해 mongot 프로세스 외부 MongoDB 복제본 세트 멤버가 복제본 세트 멤버 간의 내부 인증 에 사용하는 것과 동일한 키 파일을 사용합니다.

외부 MongoDB 의 키 파일 콘텐츠가 포함된 Kubernetes 시크릿을 생성하려면 다음 명령을 복사하여 붙여넣고 실행 .

1kubectl --context "${K8S_CTX}" --namespace "${MDB_NS}" \
2 create secret generic "${MDB_EXTERNAL_KEYFILE_SECRET_NAME}" \
3 --from-literal=keyfile="${MDB_EXTERNAL_KEYFILE_CONTENT}"
3

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

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

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

    spec.source.external.hostAndPorts

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

    spec.source.external.keyfileSecretRef

    외부 복제본 세트 멤버가 사용하는 키 파일 시크릿입니다.

    spec.source.username

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

    spec.source.passwordSecretRef

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

    spec.resourceRequirements

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

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

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

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

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

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

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

1kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - <<YAML
2apiVersion: v1
3kind: Service
4metadata:
5 name: ${MDB_SEARCH_HOSTNAME}
6spec:
7 type: LoadBalancer
8 selector:
9 app: mdbs-search-svc
10 ports:
11 - name: mongot
12 port: 27027
13 targetPort: 27027
14YAML
15
16echo "Waiting for external IP to be assigned to service ${MDB_SEARCH_HOSTNAME}..."
17TIMEOUT=120 # 2 minutes timeout
18ELAPSED=0
19while [ ${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))
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
5

네임스페이스 파드에서 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 AGE
3mdbs Running 31s
4
5Search pods running in cluster kind-kind
6NAME READY STATUS RESTARTS AGE
7mdbs-search-0 1/1 Running 0 31s
8
9All pods in namespace mongodb
10NAME READY STATUS RESTARTS AGE
11mdbc-rs-0 2/2 Running 0 2m55s
12mdbc-rs-1 2/2 Running 0 115s
13mdbc-rs-2 2/2 Running 0 68s
14mdbs-search-0 1/1 Running 0 31s
15mongodb-kubernetes-operator-fc996f567-q8l6g 1/1 Running 0 2m58s

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

이 페이지의 내용