Kubernetes演算子 を使用して、 KubernetesクラスターにMongoDB Search とベクトル検索を配置し、外部MongoDB Enterprise Edition v8.0.10 以上のサーバーで実行できます。この手順では、 Kubernetesクラスターに mongot プロセスを配置して構成し、新規または既存の外部レプリカセット配置を使用する方法を示します。
前提条件
MongoDB Search とベクトル検索を配置するには、次のものが必要です。
ローカルで使用可能な
kubeconfigを含む実行中のKubernetesクラスター。Kubernetesコマンドライン ツール(
kubectl)は、クラスターと通信するように構成されています。Helm、Kubernetesのパッケージマネージャーである Helm は、 Kubernetes演算子をインストールします。
このチュートリアルのコマンドを実行中には、Batch v5.1 以上が必要です。
データの保存用にバージョン 8.0.10 以降を実行中MongoDB Enterprise Editionレプリカセット。
MongoDB Enterprise の配置の詳細については、 MongoDBデータベース リソースの配置と構成 を参照してください。
MongoDBタスクを管理するための実行中のMongoDB Cloud ManagerまたはMongoDB Ops Manager 。
始める前に
Kubernetes Operator を使用してMongoDB Search とベクトル検索をインストールする前に、次の操作を行う必要があります。
MongoDB Search およびベクトル検索のCloud ManagerまたはMongoDB Ops Managerパラメーターの構成
Cloud ManagerまたはMongoDB Ops Manager UIにログインし、次の手順を実行して、 MongoDB Search およびベクトル検索用のCloud ManagerまたはMongoDB Ops Managerを構成します。
Cloud ManagerまたはMongoDB Ops Manager の配置構成を変更します。
Modify ボタンをクリックして、配置構成エディターを開きます。
[Process Configuration] セクションの下の [Advanced Configuration Options] をクリックします。
[Add Option ボタンをクリックし、ドロップダウンから [setParameter Startup Option] を選択します。
名前と値を追加した後、Add をクリックして、フィールドに次のパラメータを 1 つずつ追加します。
Parameter値mongotHost検索ホスト名とポート。例:
search-node1.example.com:27017。searchIndexManagementHostAndPort検索ホスト名とポート。例:
search-node1.example.com:27017。skipAuthenticationToSearchIndexManagementServerfalsesearchTLSMode構成された TLSモード。例、
mongotプロセスが TLS 接続を受け入れるように構成されている場合は、preferTLS。
MongoDB Search およびベクトル検索用のCloud ManagerまたはMongoDB Ops Managerユーザーの構成
searchCoordinator ロールを持つユーザーを作成する必要があります。MongoDBバージョン 8.2 以降では、searchCoordinator は組み込みロールです。ユーザーを作成し、そのユーザーにロールを割り当てる必要があります。MongoDB のバージョンが 8.2 および 8.0.10 以降より前のバージョンの場合、ユーザーを作成する前に、ロールを手動で作成し、特権を割り当てる必要があります。実行中いるMongoDBバージョンに対応するタブを選択して、searchCoordinator ロールを持つユーザーを作成します。
ユーザーを作成し、そのユーザーに組み込みsearchCoordinator ロールを割り当てるには、 Cloud Managerまたは Ops Manager UIまたは を使用して、次の手順を実行します。mongosh
権限を持つ searchCoordinator ロールを作成し、その後に searchCoordinator ロールを持つユーザーを追加するには、Cloud Manager または Ops Manager UI で次の手順を実行します。
ロールに割り当てるデータベース特権を追加します。
Privilegesセクションで、 Add Privilegeをクリックします。
Resource には、データベースの
__mdb_internal_searchを入力します。コレクションフィールドには何も入力しないでください。
Actions の下に、次のアクションを追加します。
changeStreamcleanupStructuredEncryptionData,compactStructuredEncryptionDatacollStatsconvertToCappedcreateCollection,dropCollection,listCollections,renameCollectionSameDBcreateIndex,dropIndex,listIndexescreateSearchIndexes,dropSearchIndex,listSearchIndexes,updateSearchIndexdbHash,dbStatsfind,insert,remove,updatekillCursorsplanCacheRead
mongoshで、次のコマンドを実行します。
カスタムロールを作成します。
db.createRole({ role: "searchCoordinator", privileges: [ { resource: { db: "__mdb_internal_search", collection: "" }, actions: [ "changeStream", "cleanupStructuredEncryptionData", "collStats", "compactStructuredEncryptionData", "convertToCapped", "createCollection", "createIndex", "createSearchIndexes", "dbHash", "dbStats", "dropCollection", "dropIndex", "dropSearchIndex", "find", "insert", "killCursors", "listCollections", "listIndexes", "listSearchIndexes", "planCacheRead", "remove", "renameCollectionSameDB", "update", "updateSearchIndex" ] }, { resource: { cluster: true }, actions: [ "bypassDefaultMaxTimeMS" ] } ], roles: [ { role: "clusterMonitor", db: "admin" }, { role: "directShardOperations", db: "admin" }, { role: "readAnyDatabase", db: "admin" } ] });
環境を設定する
このチュートリアルのサンプルコードをターミナルで実行中ための環境を準備します。
必須。環境変数を設定してください。
この手順の後続のステップで使用する環境変数を設定するには、以下をコピーし、環境変数の値を設定してから、環境変数をロードします。
1 export K8S_CTX="<your kubernetes context here>" 2 3 export MDB_NS="mongodb" 4 5 export MDB_VERSION="8.0.10" 6 7 export MDB_ADMIN_USER_PASSWORD="admin-user-password-CHANGE-ME" 8 export MDB_USER_PASSWORD="mdb-user-password-CHANGE-ME" 9 export MDB_SEARCH_SYNC_USER_PASSWORD="search-sync-user-password-CHANGE-ME" 10 11 export 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 15 export MDB_EXTERNAL_HOST_0="mdbc-rs-0.mdbc-rs-svc.${MDB_NS}.svc.cluster.local:27017" 16 export MDB_EXTERNAL_HOST_1="mdbc-rs-1.mdbc-rs-svc.${MDB_NS}.svc.cluster.local:27017" 17 export 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 20 export 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 24 export MDB_EXTERNAL_KEYFILE_CONTENT="your-mongodb-keyfile-content-CHANGE-ME" 25 26 # REPLACE with your actual external MongoDB replica set name 27 export MDB_EXTERNAL_REPLICA_SET_NAME="mdbc-rs" 28 29 export OPERATOR_HELM_CHART="mongodb/mongodb-kubernetes" 30 export OPERATOR_ADDITIONAL_HELM_VALUES="" 31 32 export MDB_CONNECTION_STRING="mongodb://mdb-user:${MDB_USER_PASSWORD}@${MDB_EXTERNAL_HOST_0}/?replicaSet=${MDB_EXTERNAL_REPLICA_SET_NAME}"
条件付き。 MongoDB Helmリポジトリを追加します。
Helm は、 Kubernetes上のMongoDBインスタンスの配置と管理を自動化します。 Kubernetes Operator 演算子をインストールするための Helmチャートを含む Helmリポジトリをすでに追加している場合は、この手順をスキップします。それ以外の場合は、 Helmリポジトリを追加します。
を追加、コピー、貼り付け、実行するには、次のコマンドを実行します。
1 helm repo add mongodb https://mongodb.github.io/helm-charts 2 helm repo update mongodb 3 helm search repo mongodb/mongodb-kubernetes
条件付き。Kubernetes Operator 用のMongoDBコントロール をインストールします。
Kubernetes Operator は、MongoDB、MongoDBOpsManager、MongoDBSearch のカスタム リソースを監視し、 MongoDB配置のライフサイクルを管理します。MongoDB Controls for Kubernetes Operator をすでにインストールしている場合は、この手順をスキップします。それ以外の場合は、前の手順で追加したHelmリポジトリからMongoDB Controls for Kubernetes Operator をインストールします。
MongoDB Controls for Kubernetes Operator を mongodb名前空間にインストールするには、次のコマンドをコピー、貼り付け、実行します。
1 helm 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}"
上記のコマンドは、 Kubernetes Operator を mongodb名前空間にインストールします。このコマンドは、まだ存在しない場合は作成します。インストール後、 Kubernetes Operator は MongoDBSearch カスタム リソースを監視し、 MongoDB Search とベクトル検索配置のライフサイクルを管理します。
MongoDB Search とベクトル検索をインストールする
必須。MongoDBユーザーシークレットを作成してロードします。
mongot プロセスでは、検索インデックスを作成し、検索クエリを実行中ために外部MongoDBデプロイに接続するための認証情報が必要です。この手順では、次のKubernetesシークレットが作成されます。
mdb-admin-user-password- MongoDB管理者の認証情報。mdb-user-password- 検索クエリを実行する権限を持つユーザーの認証情報。mdbc-rs-search-sync-source-password- データを同期し、インデックスを管理するためにmongotプロセスによって内部的に使用される専用検索ユーザーの認証情報。
Kubernetes Operator はこれらのシークレットをMongoDBポッドにマウントします。
シークレットを作成するには、 MongoDB Search とベクトル検索を配置する予定の名前空間で、以下をコピーして貼り付け、実行します。
1 kubectl --context "${K8S_CTX}" --namespace "${MDB_NS}" \ 2 create secret generic mdb-admin-user-password \ 3 --from-literal=password="${MDB_ADMIN_USER_PASSWORD}" 4 5 kubectl --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 9 kubectl --context "${K8S_CTX}" --namespace "${MDB_NS}" \ 10 create secret generic mdb-user-password \ 11 --from-literal=password="${MDB_USER_PASSWORD}"
必須。 への接続に使用するキーファイルmongod シークレットを配置します。
外部MongoDBからの接続を認証するために、mongot プロセスは外部MongoDBレプリカセットノードがレプリカセットノード間の内部認証に使用するのと同じキーファイルを使用します。
外部MongoDBから キーファイル コンテンツを含むKubernetesシークレットを作成するには、次のコマンドをコピーして貼り付け、実行します。
1 kubectl --context "${K8S_CTX}" --namespace "${MDB_NS}" \ 2 create secret generic "${MDB_EXTERNAL_KEYFILE_SECRET_NAME}" \ 3 --from-literal=keyfile="${MDB_EXTERNAL_KEYFILE_CONTENT}"
必須。MongoDB Search とベクトル検索のリソースを作成して配置します 。
負荷分散なしで、検索ノードの 1 つのインスタンスを配置できます。配置するには、次の手順を実行します。
mdbsという名前のMongoDBSearchカスタムリソースを作成します。このリソースには、次のものが含まれています。
spec.source.external.hostAndPorts外部MongoDBレプリカセットノードのリスト。
spec.source.external.keyfileSecretRef外部レプリカセットノードによって使用されるキーファイル シークレット。
spec.source.username同期ユーザーユーザー名 を検索します。
spec.source.passwordSecretRef同期ユーザーのパスワードを検索します。
spec.resourceRequirements検索コンテナの CPU とメモリリソースの要件。
このカスタムリソースの設定の詳細については、MongoDB Search とベクトル検索の設定を参照してください。
1 kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - <<EOF 2 apiVersion: mongodb.com/v1 3 kind: MongoDBSearch 4 metadata: 5 name: mdbs 6 spec: 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 27 EOF MongoDBSearchリソースの配置が完了するまで待ちます。MongoDBSearchカスタムリソースを適用すると、 Kubernetes演算子による検索ノード(ポッド)の配置が開始されます。このステップでは、mdbsリソースのステータス フェーズがRunningになるまで実行を一時停止します。これはMongoDB Search ステートメントが操作可能であることを示します。1 echo "Waiting for MongoDBSearch resource to reach Running phase..." 2 kubectl --context "${K8S_CTX}" -n "${MDB_NS}" wait \ 3 --for=jsonpath='{.status.phase}'=Running mdbs/mdbs --timeout=300s
必須。MongoDB Search とベクトル検索の外部アクセスを構成します。
外部MongoDBインスタンスが検索サービスに接続できるようにするには、 MongoDB Search とベクトル検索の外部アクセスを構成する必要があります。検索ポッドをKubernetesクラスターの外部に公開する LoadBalancer サービスを作成できます。
このサービスは、 Kubernetesクラスターの外部からアクセスできる外部IPアドレスまたはホスト名を使用して、ポート 27027 の MongoDBSearch サービスを公開します。
1 kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - <<YAML 2 apiVersion: v1 3 kind: Service 4 metadata: 5 name: ${MDB_SEARCH_HOSTNAME} 6 spec: 7 type: LoadBalancer 8 selector: 9 app: mdbs-search-svc 10 ports: 11 - name: mongot 12 port: 27027 13 targetPort: 27027 14 YAML 15 16 echo "Waiting for external IP to be assigned to service ${MDB_SEARCH_HOSTNAME}..." 17 TIMEOUT=120 # 2 minutes timeout 18 ELAPSED=0 19 while [ ${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)) 28 done 29 30 if [ ${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 34 fi
任意。名前空間で実行中のすべてのポッドを表示します。
MongoDBレプリカセットノード、 Kubernetes演算子用のMongoDBコントロール、および検索ノードの名前空間ポッド内のすべての実行中中のポッドを表示します。
1 echo; echo "MongoDBSearch resource" 2 kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get mdbs/mdbs 3 echo; echo "Search pods running in cluster ${K8S_CTX}" 4 kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get pods -l app=mdbs-search-svc 5 echo; echo "All pods in namespace ${MDB_NS}" 6 kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get pods
次のステップ
MongoDB Search とベクトル検索を正常に配置して外部のMongoDB Enterprise Edition で使用することができたら、 MongoDBクラスターにデータを追加し、 MongoDB Search とベクトル検索インデックスを作成し、データに対してクエリを実行できます。詳細については、 MongoDB Search とベクトル検索 の設定 を参照してください。