KubernetesクラスターにMongoDB Search とベクトル検索を配置すると、アプリケーション内で強力な検索エクスペリエンスを直接構築できます。MongoDB Search とベクトル検索を使用すると、オンプレミスのMongoDBデータベースと自動的に同期する従来のテキスト検索とAIを使用したベクトル検索機能の両方を構築できます。これにより、高度な検索機能を提供しながら個別のシステムを同期して維持する必要がなくなります。詳しくは、以下を参照してください。
オンプレミス配置で全文検索やセマンティック検索などの検索機能を有効にするには、 MongoDB Search およびベクトル検索プロセス(mongot
)を配置し、それをMongoDBデータベース配置(mongod
)に接続する必要があります。 。mongot
の配置は任意であり、それが提供する検索機能を活用する予定の場合にのみ必要です。
MongoDB Database プロセス(mongod
)は、mongot
のすべての検索クエリのプロキシとして機能します。mongod
はクエリを mongot
に転送し、クエリを処理します。mongot
はクエリ結果を mongod
に返し、ノードはその結果を に転送します。mongot
と直接やり取りすることはありません。
各 mongot
プロセスには、データベースや他の検索ノードと共有されていない独自の永続ボリュームがあります。ストレージ は、データベースから継続的に提供されるデータから構築されたインデックスを維持するために使用されます。インデックス定義(メタデータ)はデータベース自体に保存されます。
mongot
は、次のアクションを実行します。
インデックスを管理します。
mongot
は、データベース内のインデックス定義を更新します。データベースからデータを取得します。
mongot
ノードは、データベースへの永続的な接続を確立し、データベースからインデックスをリアルタイムで更新します。検索クエリを処理します。
When
mongod
が$search
、$searchMeta
、または$vectorSearch
クエリを受信すると、そのクエリはmongot
ノードのいずれかに送信されます。クエリを受け取ったmongot
はクエリを処理し、データを集計し、その結果をmongod
に返し、ユーザーに転送します。
mongot
コンポーネントは 1 つのMongoDBレプリカセットと厳密に結合されているため、複数のデータベースやレプリカセットで共有することはできません。つまり、レプリカセット配置には専用の検索ノードがあります。
mongot
と mongod
の間のネットワーク接続は両方向で行われます。
mongot
は、インデックスの構築とクエリの実行に使用されるデータを取得するためにレプリカセットへの接続を確立します。mongod
はmongot
に接続して、インデックス管理やデータのクエリなどの検索関連の操作を転送します。
MongoDB Search とベクトル検索の配置
Kubernetes演算子 の有無にかかわらず、検索配置アーキテクチャに大きな違いはありません。Kubernetes Operator は、特にデータベースもKubernetes Operator によって管理されている場合に、完全に機能する検索ノードを配置するために必要な手順を簡素化します。
配置するには、MongoDBSearch
カスタム リソース(CR)を適用します。これをKubernetes Operator が取得して mongot
ポッドの配置を開始し、spec
で指定された永続ストレージをリクエストします。Kubernetes Operator を使用して配置されたMongoDB Search とベクトル検索 は、同じKubernetesクラスター内または完全に独立した外部MongoDBデータベース内にKubernetes Operator によって配置されたMongoDBレプリカセットを対象とできます。mongot
が使用するように配置して構成する方法については、以下をご覧ください。
KubernetesのMongoDBレプリカセットについては、 MongoDB Enterprise Edition を使用した検索のインストールと使用 を参照してください。
外部MongoDBレプリカセットは、外部MongoDB Enterprise Edition を使用してMongoDB Search およびベクトル検索をインストールして使用する を参照してください。
前提条件
MongoDB Enterprise配置でMongoDB Search とベクトル検索を活用するには、次のものが必要です。
完全に機能するMongoDB 8.0.10+次のいずれかの方法で配置されたレプリカセット。
Kubernetes演算子を使用するKubernetesクラスター内
Kubernetesクラスターの外部
Cloud ManagerまたはMongoDB Ops Manager のインスタンス
設定タスク
次の表は、 Kubernetes Operator が自動的に実行する構成タスクと、 KubernetesにMongoDB Search とベクトル検索を正常に配置し、 KubernetesのMongoDBレプリカセットまたは外部MongoDBレプリカセットに接続するために実行する必要があるアクションを示しています。
タスク | (Inside Kubernetes) Performed by | (External MongoDB) Performed by |
---|---|---|
Kubernetes内でのMongoDB Ops Managerの配置 | Kubernetes 演算子 | Kubernetes 演算子 |
Kubernetes の外部でのCloud ManagerまたはMongoDB Ops Managerの配置 | あなたの | あなたの |
MongoDBレプリカセットの配置 | Kubernetes 演算子 | あなたの |
| あなたの | あなたの |
MongoDBレプリカセットへの接続文字列の指定 | Kubernetes 演算子 | あなたの |
| Kubernetes 演算子 | Kubernetes 演算子 |
各 | Kubernetes 演算子 | あなたの |
MongoDBバージョン 8.2 未満の多角形 | Kubernetes 演算子 | あなたの |
| Kubernetes Operator と MongoDBUserリソースを適用することで | あなたの |
クエリ検索に必要な権限を持つユーザーでMongoDBレプリカセットを構成する | あなたの | あなたの |
MongoDB Search およびベクトル検索インデックスの作成 | あなたの | あなたの |
各 | 不要 | あなたの |
| 不要 | あなたの |
次の図は、 KubernetesクラスターにMongoDB Enterpriseレプリカセット単一のMongoDB Search およびベクトル検索インスタンスの配置アーキテクチャを示しています。

次の図は、 MongoDB Enterprise Editionレプリカセットを持つMongoDB Search およびベクトル検索用のKubernetes Operator がKubernetesクラスターに配置するコンポーネントを示しています。

mongot
プロセスと mongod
プロセスの両方がKubernetesクラスター内に配置されている場合、 Kubernetes Operator は両方のプロセスの構成を自動的に実行します。具体的には、 Kubernetes演算子は次の操作を実行します。
を使用して、または命名規則によって、 と同じ名前のMongoDB
MongoDBSearch
spec.source.mongodbResourceRef
CR を検索して、 が参照するMongoDB CRMongoDBSearch
を検索します。YAMLファイルに
mongot
構成を生成し、それを<MongoDBSearch.metadata.name>-search-config
という名前の構成マップに保存します。コンフィギュレーション マップは検索ポッドによってマウントされ、YAML 構成はスタートアップ時に
mongot
のプロセスによって使用されます。生成された YAML には、レプリカセットへの接続方法、TLS 設定などに関するすべての情報が含まれています。CR の と 設定に従って構成されたストレージとリソースの要件を持つ、 という名前のMongoDB Search とベクトル検索ステートメントセットを配置します。
<MongoDBSearch.metadata.name>-search
spec.persistence
spec.resourceRequirements
mongot ホストのホスト名やポート番号など、必要な
setParameter
オプションを追加して、すべてのmongod
プロセスの構成を更新します。必要なsetParameter
オプション( MongoDBレプリカセットノードのホスト名とポート番号など)。v8.2 より前のMongoDBバージョンの場合、 は
mongot
プロセスに必要なすべての権限を持つsearchCoordinator
カスタムロールを作成します。MongoDB 8.2 以降では、searchCoordinator
は組み込みロールです。
次のアクションを実行する必要があります。
MongoDBUser
カスタムリソースを使用してレプリカセットにユーザーを作成します。mongot
は、このユーザーの認証情報を使用してレプリカセットに接続し、データをソースします。ユーザー名は任意ですが(例では
search-sync-source-user
を使用しています)、searchCoordinator
ロールが設定されている必要があります。このユーザーのユーザー名とパスワードは、それぞれ
MongoDBSearch.spec.source.username
とMongoDBSearch.spec.source.passwordSecretRef
で渡されます。パスワードシークレットは、
MongoDBUser
仕様(MongoDBUser.spec.source.passwordSecretKeyRef
)の作成に使用されたものと同じシークレットを参照できます。
MongoDBSearch
カスタムリソースを構成して適用します。
mongot
プロセスの CR 設定の詳細については、 MongoDB Search とベクトル検索設定 を参照してください。
次の図は、外部MongoDB Enterprise Editionレプリカセットを使用するKubernetesクラスターでのMongoDB Search とベクトル検索の配置アーキテクチャを示しています。

次の図は、 Kubernetes Operator がMongoDB Search およびベクトル検索用のKubernetesクラスターに配置するコンポーネントを示しています。

Kubernetesの外部でMongoDBデプロイている場合にMongoDB Search とベクトル検索を活用するには、 Kubernetes演算子を使用して mongot
を配置し、いくつかの手順を手動で実行する必要があります。Kubernetes Operator は、検索ポッドの構成を処理します。ただし、 MongoDBレプリカセットがKubernetesの外部にある場合は、 MongoDBノードとネットワークを再構成する必要があります。
以下の手動設定はユーザーが管理します。
MongoDB の外部構成
外部レプリカセット内のすべての
mongod
プロセスでsetParameter
を使用して、次のパラメータを構成します。構成する際、<search-service-hostname>:27027
をMongoDBSearch
サービスの実際の解決可能なホスト名とポートに置き換えます。setParameter: mongotHost: "<search-service-hostname>:27027" searchIndexManagementHostAndPort: "<search-service-hostname>:27027" skipAuthenticationToSearchIndexManagementServer: false searchTLSMode: "disabled" # or "requireTLS" for TLS deployments ((
<
)8.2 未満のMongoDBバージョンのみ)必要なすべての権限を持つsearchCoordinator
カスタムロールを作成します。MongoDB 8.2+ では、
searchCoordinator
は組み込みロールであるため、この手順をスキップできます。検索同期プロセス用の外部レプリカセットにユーザーを作成します。このユーザーには
searchCoordinator
ロールが必要です。- userName: "search-sync-source" password: "<your-search-sync-password>" database: "admin" roles: - role: "searchCoordinator" db: "admin"
Kubernetes の構成
外部MongoDBホストを指すように を使用して
MongoDBSearch
CR を構成して適用します。spec.source.external
検索同期ユーザーのパスワード用にKubernetesシークレットを作成します。
apiVersion: v1 kind: Secret metadata: name: search-sync-source-password stringData: password: "your-search-sync-password" 外部MongoDBレプリカセットで使用される キーファイル で指定されたキーと同じキーを含む キーファイル シークレット を作成します。
ネットワークと DNS を設定して、外部MongoDBと検索ポッド間の双方向接続を確保します。外部MongoDB環境は検索サービスのホスト名(
<search-service-hostname>
)を解決できる必要があります。
外部の mongod
プロセスに接続するための mongot
プロセスの CR 設定の詳細については、MongoDB Search とベクトル検索の設定を参照してください。
セキュリティ
次の画像は、mongot
プロセスのセキュリティ構成を示しています。MongoDBサーバーがKubernetesクラスター内にある場合、 Kubernetes Operator はMongoDB Search とベクトル検索の キーファイル認証 を自動的に設定します。MongoDBサーバーが外部の場合は、レプリカセットのキーファイル認証情報を含むKubernetes Secret を作成し、MongoDBSearch
CR で参照必要があります。

認証
mongod
に接続する際、mongot
は自分自身をデータベースユーザーとして認証します。MongoDB Search とベクトル検索を配置する場合は、データベースユーザーを作成する必要があります。Kubernetes Secret に保存されているユーザー認証情報を mongot
に渡すには、MongoDBSearch
CR の spec.source.username
フィールドと spec.source.passwordSecretRef
フィールドに入力します。
mongod
からの接続を受け入れる場合、mongot
はMongoDBレプリカセットの内部認証と同様に、キーファイルを使用した内部認証を使用してリモートリクエストを認証します。同じKubernetesクラスターでMongoDBリソースをインデックスように構成すると、 Kubernetes Operator は MongoDBSearch
のキーファイル認証を自動的に設定します。MongoDBレプリカセットがKubernetes の外部に配置されている場合は、レプリカセットのキーファイル認証情報を含むKubernetes Secret を作成し、MongoDBSearch.spec.source.external.keyfileSecretRef
フィールドで参照必要があります。
トランスポート層のセキュリティ
MongoDBSearch
は TLS を使用して、転送中のデータと認証情報を保護できます。インデックス管理コマンドと検索クエリでは、(空のオブジェクトであっても、{}
)spec.security.tls
フィールドを指定し、 フィールドのKubernetes Secretspec.security.tls.certificateKeySecretRef
で TLS 証明書を提供します。この TLS 証明書は、 MongoDBレプリカセットが使用する CA 証明書を発行したのと同じ CA によって発行され、署名されている必要があります。
MongoDBSearch
と MongoDB
の両方がKubernetes Operator によって配置される場合、基礎の mongot
と mongod
の構成は大部分がKubernetes Operator 自体によって処理されます。MongoDBレプリカセットがKubernetesの外部に配置される場合、.spec.source.external.tls
フィールドには、mongod
が構成されているのと同じ CA 証明書を含むKubernetes Secret が入力され、mongod
構成自体で searchTLSMode
パラメータが に設定されている必要があります。 requireTLS
。