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
MongoDBSearchspec.source.mongodbResourceRefCR を検索して、 が参照するMongoDB CRMongoDBSearchを検索します。YAMLファイルに
mongot構成を生成し、それを<MongoDBSearch.metadata.name>-search-configという名前の構成マップに保存します。コンフィギュレーション マップは検索ポッドによってマウントされ、YAML 構成はスタートアップ時に
mongotのプロセスによって使用されます。生成された YAML には、レプリカセットへの接続方法、TLS 設定などに関するすべての情報が含まれています。CR の と 設定に従って構成されたストレージとリソースの要件を持つ、 という名前のMongoDB Search とベクトル検索ステートメントセットを配置します。
<MongoDBSearch.metadata.name>-searchspec.persistencespec.resourceRequirementsmongot ホストのホスト名やポート番号など、必要な
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ホストを指すように を使用して
MongoDBSearchCR を構成して適用します。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。