Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

MongoDB Community Edition でのインストールと使用

Kubernetes演算子を使用し、mongot プロセス リソースを配置して、 Kubernetesクラスター上のMongoDB Community Edition v8.2.0 以降で実行できます。mongot プロセスはMongoDB Search とベクトル検索 の両方をサポートしています。任意で、サポートされている Voyage AI埋め込みモデルを使用して、コレクションとクエリ内のテキスト データのベクトル埋め込みを自動的に生成するようにベクトル検索 を有効にして構成することができます。

重要

自動埋め込みはプレビュー段階です。機能および関連するドキュメントは、プレビュー期間中にいつでも変更される可能性があります。「プレビュー機能」を参照してください。

次の手順は、 Kubernetesクラスターで新規または既存のレプリカセットを使用してMongoDB Search とベクトル検索 を実行するように配置して構成する方法を示します。この配置では、TLS 証明書を使用して、 MongoDBノードと mongot 検索プロセス間の安全な通信を確保します。

MongoDB Search とベクトル検索を配置するには、次のものが必要です。

  • 実行中の Kubernetes クラスター。

  • Kubernetesコマンドライン ツール(kubectl)は、クラスターと通信するように構成されています。

  • Helm、Kubernetesのパッケージマネージャーである Helm は、 Kubernetes演算子をインストールします。

  • TLS 証明書プロビジョニング用の cert-manager または代替の証明書マネジメントソリューションです。

  • このチュートリアルのコマンドを実行中には、Batch v5.1 以上が必要です。

オプションとして、コレクションとクエリ内のテキスト データのベクトル埋め込みを自動的に生成するようにベクトル検索 を構成するには、埋め込みサービスのAPIキーを作成する必要があります。コレクション内のテキストデータに対してインデックス時に埋め込みを生成するため、もう 1 つはクエリテキストのクエリ時に埋め込みを生成するための 2 つのキーを作成することをお勧めします。キーがない場合は、Atlas UIからキーを作成できます。

1

この手順の後続のステップで使用する環境変数を設定します。次のコマンドをコピーして、環境の値を更新し、それらを実行することで変数をロードします。

1# set it to the context name of the k8s cluster
2export K8S_CTX="<local cluster context>"
3
4# the following namespace will be created if not exists
5export MDB_NS="mongodb"
6
7# MongoDBCommunity resource name referenced throughout the guide
8export MDB_RESOURCE_NAME="mdbc-rs"
9# Number of replica set members deployed in the sample MongoDBCommunity
10export MDB_MEMBERS=3
11
12# TLS-related secret names used for MongoDBCommunity and MongoDBSearch
13export MDB_TLS_CA_SECRET_NAME="${MDB_RESOURCE_NAME}-ca"
14export MDB_TLS_SERVER_CERT_SECRET_NAME="${MDB_RESOURCE_NAME}-tls"
15export MDB_SEARCH_TLS_SECRET_NAME="${MDB_RESOURCE_NAME}-search-tls"
16
17export MDB_TLS_CA_CONFIGMAP="${MDB_RESOURCE_NAME}-ca-configmap"
18export MDB_TLS_SELF_SIGNED_ISSUER="${MDB_RESOURCE_NAME}-selfsigned-cluster-issuer"
19export MDB_TLS_CA_CERT_NAME="${MDB_RESOURCE_NAME}-selfsigned-ca"
20export MDB_TLS_CA_ISSUER="${MDB_RESOURCE_NAME}-cluster-issuer"
21
22export MDB_VERSION="8.2.6"
23
24# root admin user for convenience, not used here at all in this guide
25export MDB_ADMIN_USER_PASSWORD="admin-user-password-CHANGE-ME"
26# regular user performing restore and search queries on sample mflix database
27export MDB_USER_PASSWORD="mdb-user-password-CHANGE-ME"
28# user for MongoDB Search to connect to the replica set to synchronise data from
29export MDB_SEARCH_SYNC_USER_PASSWORD="search-sync-user-password-CHANGE-ME"
30
31export OPERATOR_HELM_CHART="mongodb/mongodb-kubernetes"
32# comma-separated key=value pairs for additional parameters passed to the helm-chart installing the operator
33export OPERATOR_ADDITIONAL_HELM_VALUES=""
34
35# TLS is mandatory; connection string must include tls=true
36export 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
38export CERT_MANAGER_NAMESPACE="cert-manager"
39
40# Vector Search auto embedding related configurations
41export AUTO_EMBEDDING_API_KEY_SECRET_NAME="voyage-api-keys"
42export AUTO_EMBEDDING_API_QUERY_KEY="<embedding-model-query-key>"
43export AUTO_EMBEDDING_API_INDEXING_KEY="<embedding-model-indexing-key>"
44export PROVIDER_ENDPOINT="https://ai.mongodb.com/v1/embeddings"
45export EMBEDDING_MODEL="voyage-4"

注意

ベクトル検索が埋め込みを自動的に生成できるようにするAPIキーがある場合は、環境変数内の次のプレースホルダー値を置き換えます。

AUTO_EMBEDDING_API_QUERY_KEY

APIキー。

AUTO_EMBEDDING_API_INDEXING_KEY

APIキーでインデックス時にコレクション内のテキスト データの埋め込みを生成します。

PROVIDER_ENDPOINT

埋め込みモデルプロバイダーの、エンドポイントとなる接続されたデバイス。Atlas UIから作成されたキーの場合、値のデフォルトは https://ai.mongodb.com/v1/embeddings です。Voyage AIから直接APIキーを作成した場合は、 を https://api.voyageai.com/v1/embeddings に置き換えます。

2

Helm は、Kubernetes上のMongoDBインスタンスの配置とマネジメントを自動化します。Kubernetes Operator 演算子をインストールするための Helmチャートを含む 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.7.0 MongoDB Controllers for Kubernetes translate th...
3

Kubernetes 演算子は、MongoDBCommunity と MongoDBSearch のカスタム リソースを監視し、 MongoDB配置のライフサイクルを管理します。MongoDB Controls for Kubernetes Operator をすでにインストールしている場合は、この手順をスキップします。それ以外の場合は、前の手順で追加した HelmリポジトリからMongoDB Controls for Kubernetes 演算子 をインストールします。

MongoDB Controllers for Kubernetes 演算子を 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 Apr 1 18:27:26 2026
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.8.0
42initDatabase:
43 name: mongodb-kubernetes-init-database
44 version: 1.8.0
45initOpsManager:
46 name: mongodb-kubernetes-init-ops-manager
47 version: 1.8.0
48managedSecurityContext: false
49mongodb:
50 appdbAssumeOldFormat: false
51 name: mongodb-enterprise-server
52 repo: quay.io/mongodb
53multiCluster:
54 clusterClientTimeout: 10
55 clusters: []
56 kubeConfigSecretName: mongodb-enterprise-operator-multi-cluster-kubeconfig
57 performFailOver: true
58operator:
59 additionalArguments: []
60 affinity: {}
61 createOperatorServiceAccount: true
62 createResourcesServiceAccountsAndRoles: true
63 enableClusterMongoDBRoles: true
64 enablePVCResize: true
65 env: prod
66 maxConcurrentReconciles: 1
67 mdbDefaultArchitecture: non-static
68 name: mongodb-kubernetes-operator
69 nodeSelector: {}
70 operator_image_name: mongodb-kubernetes
71 podSecurityContext:
72 runAsNonRoot: true
73 runAsUser: 2000
74 replicas: 1
75 resources:
76 limits:
77 cpu: 1100m
78 memory: 1Gi
79 requests:
80 cpu: 500m
81 memory: 200Mi
82 securityContext: {}
83 telemetry:
84 collection:
85 clusters: {}
86 deployments: {}
87 frequency: 1h
88 operators: {}
89 send:
90 frequency: 168h
91 tolerations: []
92 vaultSecretBackend:
93 enabled: false
94 tlsSecretRef: ""
95 version: 1.8.0
96 watchedResources:
97 - mongodb
98 - opsmanagers
99 - mongodbusers
100 - mongodbcommunity
101 - mongodbsearch
102 webhook:
103 installClusterRole: true
104 name: ""
105 registerConfiguration: true
106opsManager:
107 name: mongodb-enterprise-ops-manager-ubi
108readinessProbe:
109 name: mongodb-kubernetes-readinessprobe
110 version: 1.0.24
111registry:
112 agent: quay.io/mongodb
113 database: quay.io/mongodb
114 imagePullSecrets: null
115 initDatabase: quay.io/mongodb
116 initOpsManager: quay.io/mongodb
117 operator: quay.io/mongodb
118 opsManager: quay.io/mongodb
119 pullPolicy: Always
120 readinessProbe: quay.io/mongodb
121 versionUpgradeHook: quay.io/mongodb
122search:
123 envoyImage: envoyproxy/envoy:v1.37-latest
124 name: mongodb-search
125 repo: quay.io/mongodb
126 version: 0.64.0
127versionUpgradeHook:
128 name: mongodb-kubernetes-operator-version-upgrade-post-start-hook
129 version: 1.0.10
130
131HOOKS:
132MANIFEST:
133---
134# Source: mongodb-kubernetes/templates/database-roles.yaml
135apiVersion: v1
136kind: ServiceAccount
137metadata:
138 name: mongodb-kubernetes-appdb
139 namespace: mongodb
140---
141# Source: mongodb-kubernetes/templates/database-roles.yaml
142apiVersion: v1
143kind: ServiceAccount
144metadata:
145 name: mongodb-kubernetes-database-pods
146 namespace: mongodb
147---
148# Source: mongodb-kubernetes/templates/database-roles.yaml
149apiVersion: v1
150kind: ServiceAccount
151metadata:
152 name: mongodb-kubernetes-ops-manager
153 namespace: mongodb
154---
155# Source: mongodb-kubernetes/templates/operator-sa.yaml
156apiVersion: v1
157kind: ServiceAccount
158metadata:
159 name: mongodb-kubernetes-operator
160 namespace: mongodb
161---
162# Source: mongodb-kubernetes/templates/operator-roles-clustermongodbroles.yaml
163kind: ClusterRole
164apiVersion: rbac.authorization.k8s.io/v1
165metadata:
166 name: mongodb-kubernetes-operator-mongodb-cluster-mongodb-role
167rules:
168 - apiGroups:
169 - mongodb.com
170 verbs:
171 - '*'
172 resources:
173 - clustermongodbroles
174---
175# Source: mongodb-kubernetes/templates/operator-roles-telemetry.yaml
176# Additional ClusterRole for clusterVersionDetection
177kind: ClusterRole
178apiVersion: rbac.authorization.k8s.io/v1
179metadata:
180 name: mongodb-kubernetes-operator-cluster-telemetry
181rules:
182 # Non-resource URL permissions
183 - nonResourceURLs:
184 - "/version"
185 verbs:
186 - get
187 # Cluster-scoped resource permissions
188 - apiGroups:
189 - ''
190 resources:
191 - namespaces
192 resourceNames:
193 - kube-system
194 verbs:
195 - get
196 - apiGroups:
197 - ''
198 resources:
199 - nodes
200 verbs:
201 - list
202---
203# Source: mongodb-kubernetes/templates/operator-roles-webhook.yaml
204kind: ClusterRole
205apiVersion: rbac.authorization.k8s.io/v1
206metadata:
207 name: mongodb-kubernetes-operator-mongodb-webhook-cr
208rules:
209 - apiGroups:
210 - "admissionregistration.k8s.io"
211 resources:
212 - validatingwebhookconfigurations
213 verbs:
214 - get
215 - create
216 - update
217 - delete
218 - apiGroups:
219 - ""
220 resources:
221 - services
222 verbs:
223 - get
224 - list
225 - watch
226 - create
227 - update
228 - delete
229---
230# Source: mongodb-kubernetes/templates/operator-roles-clustermongodbroles.yaml
231kind: ClusterRoleBinding
232apiVersion: rbac.authorization.k8s.io/v1
233metadata:
234 name: mongodb-kubernetes-operator-mongodb-cluster-mongodb-role-binding
235roleRef:
236 apiGroup: rbac.authorization.k8s.io
237 kind: ClusterRole
238 name: mongodb-kubernetes-operator-mongodb-cluster-mongodb-role
239subjects:
240 - kind: ServiceAccount
241 name: mongodb-kubernetes-operator
242 namespace: mongodb
243---
244# Source: mongodb-kubernetes/templates/operator-roles-telemetry.yaml
245# ClusterRoleBinding for clusterVersionDetection
246kind: ClusterRoleBinding
247apiVersion: rbac.authorization.k8s.io/v1
248metadata:
249 name: mongodb-kubernetes-operator-mongodb-cluster-telemetry-binding
250roleRef:
251 apiGroup: rbac.authorization.k8s.io
252 kind: ClusterRole
253 name: mongodb-kubernetes-operator-cluster-telemetry
254subjects:
255 - kind: ServiceAccount
256 name: mongodb-kubernetes-operator
257 namespace: mongodb
258---
259# Source: mongodb-kubernetes/templates/operator-roles-webhook.yaml
260kind: ClusterRoleBinding
261apiVersion: rbac.authorization.k8s.io/v1
262metadata:
263 name: mongodb-kubernetes-operator-mongodb-webhook-crb
264roleRef:
265 apiGroup: rbac.authorization.k8s.io
266 kind: ClusterRole
267 name: mongodb-kubernetes-operator-mongodb-webhook-cr
268subjects:
269 - kind: ServiceAccount
270 name: mongodb-kubernetes-operator
271 namespace: mongodb
272---
273# Source: mongodb-kubernetes/templates/database-roles.yaml
274kind: Role
275apiVersion: rbac.authorization.k8s.io/v1
276metadata:
277 name: mongodb-kubernetes-appdb
278 namespace: mongodb
279rules:
280 - apiGroups:
281 - ''
282 resources:
283 - secrets
284 verbs:
285 - get
286 - apiGroups:
287 - ''
288 resources:
289 - pods
290 verbs:
291 - patch
292 - delete
293 - get
294---
295# Source: mongodb-kubernetes/templates/operator-roles-base.yaml
296kind: Role
297apiVersion: rbac.authorization.k8s.io/v1
298metadata:
299 name: mongodb-kubernetes-operator
300 namespace: mongodb
301rules:
302 - apiGroups:
303 - ''
304 resources:
305 - services
306 verbs:
307 - get
308 - list
309 - watch
310 - create
311 - update
312 - delete
313 - apiGroups:
314 - ''
315 resources:
316 - secrets
317 - configmaps
318 verbs:
319 - get
320 - list
321 - create
322 - update
323 - delete
324 - watch
325 - apiGroups:
326 - apps
327 resources:
328 - statefulsets
329 - deployments
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.8.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 volumeMounts:
479 - mountPath: /tmp/k8s-webhook-server/serving-certs
480 name: webhook-server-dir
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.8.0"
516 - name: DATABASE_VERSION
517 value: "1.8.0"
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.8.0"
525 - name: OPS_MANAGER_IMAGE_PULL_POLICY
526 value: Always
527 - name: AGENT_IMAGE
528 value: "quay.io/mongodb/mongodb-agent:108.0.12.8846-1"
529 - name: MDB_AGENT_IMAGE_REPOSITORY
530 value: "quay.io/mongodb/mongodb-agent"
531 - name: MONGODB_IMAGE
532 value: mongodb-enterprise-server
533 - name: MONGODB_REPO_URL
534 value: quay.io/mongodb
535 - name: PERFORM_FAILOVER
536 value: 'true'
537 - name: MDB_MAX_CONCURRENT_RECONCILES
538 value: "1"
539 - name: POD_NAME
540 valueFrom:
541 fieldRef:
542 fieldPath: metadata.name
543 - name: OPERATOR_NAME
544 value: mongodb-kubernetes-operator
545 # Community Env Vars Start
546 - name: MDB_COMMUNITY_AGENT_IMAGE
547 value: "quay.io/mongodb/mongodb-agent:108.0.2.8729-1"
548 - name: VERSION_UPGRADE_HOOK_IMAGE
549 value: "quay.io/mongodb/mongodb-kubernetes-operator-version-upgrade-post-start-hook:1.0.10"
550 - name: READINESS_PROBE_IMAGE
551 value: "quay.io/mongodb/mongodb-kubernetes-readinessprobe:1.0.24"
552 - name: MDB_COMMUNITY_IMAGE
553 value: "mongodb-community-server"
554 - name: MDB_COMMUNITY_REPO_URL
555 value: "quay.io/mongodb"
556 - name: MDB_COMMUNITY_IMAGE_TYPE
557 value: "ubi8"
558 # Community Env Vars End
559 - name: MDB_SEARCH_REPO_URL
560 value: "quay.io/mongodb"
561 - name: MDB_SEARCH_NAME
562 value: "mongodb-search"
563 - name: MDB_SEARCH_VERSION
564 value: "0.64.0"
565 - name: MDB_ENVOY_IMAGE
566 value: "envoyproxy/envoy:v1.37-latest"
567 volumes:
568 - name: webhook-server-dir
569 emptyDir: {}
4

MongoDB 検索する および ベクトル検索 の配置に進む前に、 Kubernetes 演算子 が完全に機能していることを確認してください。次のコマンドを実行して、すべての演算子コンポーネントが実行中、使用できることを確認します。

1kubectl --context "${K8S_CTX}" -n "${MDB_NS}" rollout status --timeout=2m deployment/mongodb-kubernetes-operator
2echo "Operator deployment in ${MDB_NS} namespace"
3kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get deployments
4echo; echo "Operator pod in ${MDB_NS} namespace"
5kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get pods
1Waiting for deployment "mongodb-kubernetes-operator" rollout to finish: 0 of 1 updated replicas are available...
2deployment "mongodb-kubernetes-operator" successfully rolled out
3Operator deployment in mongodb namespace
4NAME READY UP-TO-DATE AVAILABLE AGE
5mongodb-kubernetes-operator 1/1 1 1 3s
6
7Operator pod in mongodb namespace
8NAME READY STATUS RESTARTS AGE
9mongodb-kubernetes-operator-85f6cbcf67-wmtnm 1/1 Running 0 3s
5

MongoDB、安全なアクセスのために認証が必要です。この手順では、3 つのKubernetesシークレットを作成します。

  • mdb-admin-user-password: MongoDB管理者の認証情報。

  • mdb-user-password: 検索クエリを実行する権限を持つユーザーの認証情報。

  • mdbc-rs-search-sync-source-password: データを同期し、インデックスを管理するために mongot プロセスによって内部的に使用される専用検索ユーザーの認証情報。

Kubernetes 演算子は、これらのシークレットからパスワードを使用して、MongoDBデータベースにユーザーを自動的に作成します。

シークレットを作成するには、次のコマンドをコピーして貼り付け、実行します。

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
6

TLS 証明書の管理には cert-manager が必要です。クラスターにすでに cert-manager がインストールされている場合は、この手順をスキップします。それ以外の場合は、Helm を使用して cert-manager をインストールします。

cert-manager名前空間に cert-manager をインストールするには、ターミナルで次のコマンドを実行します。

1helm 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
9for 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
13done
14
15echo "cert-manager is ready in namespace ${CERT_MANAGER_NAMESPACE}."
7

MongoDBMongoDBSearch リソースの TLS 証明書を発行する認証局インフラストラクチャを作成します。コマンドは、次のアクションを実行します。

  • 自己署名 ClusterIssuer を作成します。

  • CA 証明書を生成します。

  • すべての名前空間が使用できるクラスター全体の CA 発行者を公開します。

  • MongoDBリソースが CA バンドルを使用できるように、ConfigMap を通じて CA バンドルを公開します。

1# Bootstrap a self-signed ClusterIssuer that will mint the CA material consumed by
2# the MongoDBCommunity deployment.
3kubectl apply --context "${K8S_CTX}" -f - <<EOF_MANIFEST
4apiVersion: cert-manager.io/v1
5kind: ClusterIssuer
6metadata:
7 name: ${MDB_TLS_SELF_SIGNED_ISSUER}
8spec:
9 selfSigned: {}
10EOF_MANIFEST
11
12kubectl --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.
15kubectl apply --context "${K8S_CTX}" -f - <<EOF_MANIFEST
16apiVersion: cert-manager.io/v1
17kind: Certificate
18metadata:
19 name: ${MDB_TLS_CA_CERT_NAME}
20 namespace: ${CERT_MANAGER_NAMESPACE}
21spec:
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
31EOF_MANIFEST
32
33kubectl --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.
36kubectl apply --context "${K8S_CTX}" -f - <<EOF_MANIFEST
37apiVersion: cert-manager.io/v1
38kind: ClusterIssuer
39metadata:
40 name: ${MDB_TLS_CA_ISSUER}
41spec:
42 ca:
43 secretName: ${MDB_TLS_CA_SECRET_NAME}
44EOF_MANIFEST
45
46kubectl --context "${K8S_CTX}" wait --for=condition=Ready clusterissuer "${MDB_TLS_CA_ISSUER}"
47
48TMP_CA_CERT="$(mktemp)"
49
50kubectl --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.
55kubectl --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
60echo "Cluster-wide CA issuer ${MDB_TLS_CA_ISSUER} is ready."
8

MongoDBサーバーと MongoDBSearch サービスの両方のTLS証明書を発行します。MongoDBサーバー証明書には、ポッドとサービス通信に必要なすべての DNS 名が含まれます。どちらの証明書もサーバーとクライアントの認証をサポートしています。

1server_certificate="${MDB_RESOURCE_NAME}-server-tls"
2search_certificate="${MDB_RESOURCE_NAME}-search-tls"
3
4mongo_dns_names=()
5for ((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")
8done
9mongo_dns_names+=(
10 "${MDB_RESOURCE_NAME}-svc.${MDB_NS}.svc.cluster.local"
11 "*.${MDB_RESOURCE_NAME}-svc.${MDB_NS}.svc.cluster.local"
12)
13
14search_dns_names=(
15 "*.${MDB_RESOURCE_NAME}-search-svc.${MDB_NS}.svc.cluster.local"
16)
17
18render_dns_list() {
19 local dns_list=("$@")
20 for dns in "${dns_list[@]}"; do
21 printf " - \"%s\"\n" "${dns}"
22 done
23}
24
25kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - <<EOF_MANIFEST
26apiVersion: cert-manager.io/v1
27kind: Certificate
28metadata:
29 name: ${server_certificate}
30 namespace: ${MDB_NS}
31spec:
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---
46apiVersion: cert-manager.io/v1
47kind: Certificate
48metadata:
49 name: ${search_certificate}
50 namespace: ${MDB_NS}
51spec:
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[@]}")
65EOF_MANIFEST
66
67kubectl --context "${K8S_CTX}" -n "${MDB_NS}" wait --for=condition=Ready certificate "${server_certificate}" --timeout=300s
68kubectl --context "${K8S_CTX}" -n "${MDB_NS}" wait --for=condition=Ready certificate "${search_certificate}" --timeout=300s
69
70echo "MongoDB TLS certificates have been issued."
9

MongoDB Community Edition をすでに配置している場合は、この手順をスキップします。それ以外の場合は、 MongoDB Community Edition を配置します。

MongoDB Community Edition を配置するには、次の手順を実行します。

  1. mdb-rs という名前の MongoDBCommunity カスタムリソースを作成します。

    このリソースは、mongod コンテナと mongodb-agent コンテナの CPU とメモリ リソースを定義し、次の 3 人のユーザーを設定します。

    mdb-user

    データベースを復元し、検索クエリを実行できるユーザー。このユーザーは mdb-user-password シークレットを使用してこれらの操作を実行します。

    search-sync-source

    MongoDB 検索するがMongoDBデータベースに接続し、インデックスを管理およびインデックスの構築を行うために使用するユーザー。このユーザーは、 Kubernetes演算子が作成する searchCoordinator ロールを使用します。これは mdbc-rs-search-sync-source-password シークレットを使用して、mongotmongod に接続します。

    admin-user

    データベース管理ユーザー。

    Kubernetes 演算子はこのリソースを使用して、3 ノードを持つMongoDBレプリカセットを構成します。

    シークレットを作成するには、次のコマンドをコピーして貼り付け、実行します。

    1kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - <<EOF
    2apiVersion: mongodbcommunity.mongodb.com/v1
    3kind: MongoDBCommunity
    4metadata:
    5 name: ${MDB_RESOURCE_NAME}
    6spec:
    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
    82EOF
  2. MongoDBCommunityリソースの配置が完了するまで待ちます。

    MongoDBCommunity カスタムリソースを適用すると、 Kubernetes演算子によってMongoDBノード(ポッド)の配置が開始されます。このステップでは、mdbc-rs リソースのステータス フェーズが Running になるまで実行を一時停止します。これはMongoDB Communityレプリカセットが操作可能であることを示します。

    1echo "Waiting for MongoDBCommunity resource to reach Running phase..."
    2kubectl --context "${K8S_CTX}" -n "${MDB_NS}" wait \
    3 --for=jsonpath='{.status.phase}'=Running mdbc/mdbc-rs --timeout=400s
    4echo; echo "MongoDBCommunity resource"
    5kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get mdbc/mdbc-rs
    6echo; echo "Pods running in cluster ${K8S_CTX}"
    7kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get pods
    1Waiting for MongoDBCommunity resource to reach Running phase...
    2mongodbcommunity.mongodbcommunity.mongodb.com/mdbc-rs condition met
    3
    4MongoDBCommunity resource
    5NAME PHASE VERSION
    6mdbc-rs Running 8.2
    7
    8Pods running in cluster minikube
    9NAME READY STATUS RESTARTS AGE
    10mdbc-rs-0 2/2 Running 0 2m30s
    11mdbc-rs-1 2/2 Running 0 82s
    12mdbc-rs-2 2/2 Running 0 38s
    13mongodb-kubernetes-operator-5776c8b4df-cppnf 1/1 Running 0 7m37s
10

負荷分散なしで、検索ノードの 1 つのインスタンスを配置できます。

配置するには、次の手順を実行します。

  1. mdbc-rs という名前の MongoDBSearch カスタムリソースを作成します。

    このリソースは、検索ノードの CPU とメモリのリソース要件を指定します。このカスタムリソースの設定の詳細については、MongoDB Search とベクトル検索 の設定を参照してください。

    1# create a Kubernetes secret that would have embedding model's API Keys
    2kubectl create secret generic "${AUTO_EMBEDDING_API_KEY_SECRET_NAME}" \
    3 --from-literal=query-key="${AUTO_EMBEDDING_API_QUERY_KEY}" \
    4 --from-literal=indexing-key="${AUTO_EMBEDDING_API_INDEXING_KEY}" --context "${K8S_CTX}" -n "${MDB_NS}"
    5
    6# create MongoDBSearch resource, enabling the auto embedding using the API Keys provided above
    7kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - <<EOF
    8apiVersion: mongodb.com/v1
    9kind: MongoDBSearch
    10metadata:
    11 name: ${MDB_RESOURCE_NAME}
    12spec:
    13 security:
    14 tls:
    15 certificateKeySecretRef:
    16 name: ${MDB_SEARCH_TLS_SECRET_NAME}
    17 resourceRequirements:
    18 limits:
    19 cpu: "3"
    20 memory: 5Gi
    21 requests:
    22 cpu: "2"
    23 memory: 3Gi
    24 autoEmbedding:
    25 providerEndpoint: ${PROVIDER_ENDPOINT}
    26 embeddingModelAPIKeySecret:
    27 name: ${AUTO_EMBEDDING_API_KEY_SECRET_NAME}
    28EOF

    注意

    Kubernetes Operator はMongoDB Search の 1 つのインスタンスのみを配置するため、そのインスタンスは埋め込みマテリアライズドビューライターとして自動的に構成されます。

    1kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - <<EOF
    2apiVersion: mongodb.com/v1
    3kind: MongoDBSearch
    4metadata:
    5 name: ${MDB_RESOURCE_NAME}
    6spec:
    7 security:
    8 tls:
    9 certificateKeySecretRef:
    10 name: ${MDB_SEARCH_TLS_SECRET_NAME}
    11 resourceRequirements:
    12 limits:
    13 cpu: "3"
    14 memory: 5Gi
    15 requests:
    16 cpu: "2"
    17 memory: 3Gi
    18EOF
  2. MongoDBSearchリソースの配置が完了するまで待機します。

    MongoDBSearch カスタムリソースを適用すると、 Kubernetes演算子による検索ノード(ポッド)の配置が開始されます。このステップでは、mdbc-rs MongoDBSearch リソースのステータス フェーズが Running になるまで実行を一時停止します。これはMongoDB Search が操作可能であることを示します。

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

MongoDBSearch を使用した MongoDBCommunityリソースの配置が成功させることを確認します。

1echo "Waiting for MongoDBCommunity resource to reach Running phase..."
2kubectl --context "${K8S_CTX}" -n "${MDB_NS}" wait \
3 --for=jsonpath='{.status.phase}'=Running mdbc/mdbc-rs --timeout=400s
4echo; echo "MongoDBCommunity resource"
5kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get mdbc/mdbc-rs
6echo; echo "Pods running in cluster ${K8S_CTX}"
7kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get pods
12

MongoDBレプリカセットノード、 Kubernetes演算子用のMongoDBコントロール、および検索ノードの名前空間ポッド内のすべての実行中中のポッドを表示します。

1echo; echo "MongoDBCommunity resource"
2kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get mdbc/mdbc-rs
3echo; echo "MongoDBSearch resource"
4kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get mdbs/mdbc-rs
5echo; echo "Pods running in cluster ${K8S_CTX}"
6kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get pods
1MongoDBCommunity resource
2NAME PHASE VERSION
3mdbc-rs Running 8.2.6
4
5MongoDBSearch resource
6NAME PHASE VERSION LOADBALANCER AGE
7mdbc-rs Running 0.64.0 5m1s
8
9Pods running in cluster kind-kind
10NAME READY STATUS RESTARTS AGE
11mdbc-rs-0 2/2 Running 1 (25s ago) 7m32s
12mdbc-rs-1 2/2 Running 1 (3m ago) 6m31s
13mdbc-rs-2 2/2 Running 1 (102s ago) 5m44s
14mdbc-rs-search-0 1/1 Running 0 4m21s
15mongodb-kubernetes-operator-85f6cbcf67-wmtnm 1/1 Running 0 7m54s

MongoDB Community Edition で使用するMongoDB Search とベクトル検索 を正常に配置したので、 MongoDBクラスターへのデータの追加、 MongoDB Search およびベクトル検索インデックスの作成、データに対してクエリを実行します。詳細については、MongoDB Search とベクトル検索の使用を参照してください。

項目一覧