Kubernetes演算子 を使用して、 KubernetesクラスターにMongoDB Search とベクトル検索を配置し、外部MongoDB Enterprise Edition v8.2.0 以上のサーバーで実行できます。この手順では、 Kubernetesクラスターに mongot プロセスを配置する構成し、新規または既存の外部レプリカセット配置を使用する方法を示します。このチュートリアルでは、TLS を有効にして安全な配置を構成する方法を説明します。TLS 証明書を提供する必要があります。
MongoDBSearch サービスのサーバー証明書とキー。
外部MongoDBデータベースの公開 CA 証明書。
前提条件
MongoDB Search とベクトル検索を配置するには、次のものが必要です。
ローカルで使用可能な
kubeconfigを含む実行中のKubernetesクラスター。Kubernetesコマンドライン ツール(
kubectl)は、クラスターと通信するように構成されています。Helm、Kubernetesのパッケージマネージャーである Helm は、 Kubernetes演算子をインストールします。
このチュートリアルのコマンドを実行中には、Batch v5.1 以上が必要です。
データを保存するために、バージョン 8.2 以降を実行している MongoDB Enterprise Edition レプリカセット。
MongoDB Enterprise の配置の詳細については、 MongoDBデータベース リソースの配置と構成 を参照してください。
MongoDBタスクを管理するための実行中のMongoDB Cloud ManagerまたはMongoDB Ops Manager 。
外部 DB TLS
外部MongoDB Enterprise配置は、TLS接続を使用し、必要に応じて構成する必要があります。
外部 DB CAファイル
外部MongoDB配置のサーバー証明書に署名するために使用された公開認証局(CA)の証明書ファイル(例:
external-ca.crt)が必要です。このファイルはローカルで必要になります。サービス証明書ファイルの検索
MongoDBSearch サービスには、有効な TLS サーバー証明書と秘密キー (例:
search-service.crt、search-service.key) が必要です。この証明書は、サービスのアクセスに使用するホスト名に対して有効である必要があります。(例:mdbs-search.example.com)
始める前に
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。useGrpcForSearchtrue
MongoDB Search およびベクトル検索用のCloud ManagerまたはMongoDB Ops Managerユーザーの構成
searchCoordinator ロールを持つユーザーを作成する必要があります。MongoDBバージョン 8.2 以降では、searchCoordinator は組み込みロールです。ユーザーを作成し、そのユーザーにロールを割り当てる必要があります。
ユーザーを作成し、そのユーザーに組み込みsearchCoordinator ロールを割り当てるには、 Cloud ManagerまたはMongoDB Ops Manager UIまたは を使用して、次の手順を実行します。mongosh
mongosh で、次のコマンドを実行します。
環境を設定する
このチュートリアルのサンプルコードをターミナルで実行中ための環境を準備します。
必須。環境変数を設定してください。
この手順の後続のステップで使用する環境変数を設定するには、以下をコピーし、環境変数の値を設定し、ターミナルでコマンドを実行する。
export K8S_CTX="<your kubernetes context here>"
export MDB_NS="mongodb"
export MDB_VERSION="8.2.0"
export MDB_ADMIN_USER_PASSWORD="admin-user-password-CHANGE-ME"export MDB_USER_PASSWORD="mdb-user-password-CHANGE-ME"export MDB_SEARCH_SYNC_USER_PASSWORD="search-sync-user-password-CHANGE-ME"
export MDB_TLS_CA_SECRET_NAME="ca"export MDB_SEARCH_TLS_SECRET_NAME="mdbs-search-tls"
export MDB_SEARCH_SERVICE_NAME="mdbs-search"export MDB_SEARCH_HOSTNAME="mdbs-search.example.com"
# External MongoDB replica set members - REPLACE THESE VALUES with your actual external MongoDB hosts# In production, replace with your actual external MongoDB replica set membersexport MDB_EXTERNAL_HOST_0="mdbc-rs-0.mdbc-rs-svc.${MDB_NS}.svc.cluster.local:27017"export MDB_EXTERNAL_HOST_1="mdbc-rs-1.mdbc-rs-svc.${MDB_NS}.svc.cluster.local:27017"export MDB_EXTERNAL_HOST_2="mdbc-rs-2.mdbc-rs-svc.${MDB_NS}.svc.cluster.local:27017"
# REPLACE with your actual external MongoDB replica set nameexport MDB_EXTERNAL_REPLICA_SET_NAME="mdbc-rs"
export OPERATOR_HELM_CHART="mongodb/mongodb-kubernetes"export OPERATOR_ADDITIONAL_HELM_VALUES=""
export MDB_CONNECTION_STRING="mongodb://mdb-user:${MDB_USER_PASSWORD}@${MDB_EXTERNAL_HOST_0}/?replicaSet=${MDB_EXTERNAL_REPLICA_SET_NAME}&tls=true&tlsCAFile=/tls/ca.crt"これらの環境変数は現在のターミナルセッションでのみ使用可能であり、新しいターミナルセッションでは再度設定する必要があることに注意してください。
条件付き。 MongoDB Helmリポジトリを追加します。
Helm は、 Kubernetes上のMongoDBインスタンスの配置と管理を自動化します。Kubernetes Operator 演算子をインストールするための Helmチャートを含む Helmリポジトリをすでに追加している場合は、この手順をスキップします。それ以外の場合は、 Helmリポジトリを追加します。
を追加、コピー、貼り付け、実行するには、次のコマンドを実行します。
helm repo add mongodb https://mongodb.github.io/helm-chartshelm repo update mongodbhelm search repo mongodb/mongodb-kubernetes条件付き。Kubernetes Operator 用のMongoDBコントロール をインストールします。
Kubernetes 演算子は、MongoDB、MongoDBOpsManager、MongoDBSearch のカスタム リソースを監視し、MongoDB配置のライフサイクルを管理します。MongoDB コントローラー for Kubernetes 演算子をすでにインストールしている場合は、この手順をスキップします。それ以外の場合は、前の手順で追加した Helm リポジトリからMongoDB Controls for Kubernetes 演算子 をインストールします。
MongoDB Controls for Kubernetes Operator を mongodb名前空間にインストールするには、次のコマンドをコピー、貼り付け、実行します。
helm upgrade --install --debug --kube-context "${K8S_CTX}" \ --create-namespace \ --namespace="${MDB_NS}" \ mongodb-kubernetes \ ${OPERATOR_ADDITIONAL_HELM_VALUES:+--set ${OPERATOR_ADDITIONAL_HELM_VALUES}} \ "${OPERATOR_HELM_CHART}"上記のコマンドは、 Kubernetes 演算子 を 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 とベクトル検索を配置する予定の名前空間で、以下をコピーして貼り付け、実行します。
# Create admin user secretkubectl create secret generic mdb-admin-user-password \ --from-literal=password="${MDB_ADMIN_USER_PASSWORD}" \ --dry-run=client -o yaml | kubectl apply --context "${K8S_CTX}" --namespace "${MDB_NS}" -f -
# Create search sync source user secretkubectl create secret generic "${MDB_RESOURCE_NAME}-search-sync-source-password" \ --from-literal=password="${MDB_SEARCH_SYNC_USER_PASSWORD}" \ --dry-run=client -o yaml | kubectl apply --context "${K8S_CTX}" --namespace "${MDB_NS}" -f -
# Create regular user secretkubectl create secret generic mdb-user-password \ --from-literal=password="${MDB_USER_PASSWORD}" \ --dry-run=client -o yaml | kubectl apply --context "${K8S_CTX}" --namespace "${MDB_NS}" -f -
echo "User secrets created."必須。MongoDB Search とベクトル検索のリソースを作成して配置します 。
負荷分散なしで、検索ノードの 1 つのインスタンスを配置できます。配置するには、次の手順を実行します。
mdbsという名前の MongoDBSearch カスタムリソースを作成します。このリソースには、次のものが含まれています。
spec.source.external.hostAndPorts外部MongoDBレプリカセットノードのリスト。
spec.source.username同期ユーザーユーザー名 を検索します。
spec.source.passwordSecretRef同期ユーザーのパスワードを検索します。
spec.source.external.tls.ca.name外部データベースを信頼するように MongoDBSearch ポッドを構成します。これは、外部MongoDBの公開 CA 証明書を含むkubernetes secretを指します。
spec.security.tls.certificateKeySecretRef.nameMongoDBSearch サービスを保護します。これは、MongoDBSearch ポッドが受信クライアントに提示する TLS サーバー証明書と秘密キーを含む kubernetes secret を指します。
spec.resourceRequirements検索コンテナの CPU とメモリリソースの要件。
このカスタムリソースの設定の詳細については、MongoDB Search とベクトル検索の設定を参照してください。
kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - <<EOFapiVersion: mongodb.com/v1kind: MongoDBSearchmetadata: name: ${MDB_SEARCH_RESOURCE_NAME:-mdbs}spec: source: external: hostAndPorts: - ${MDB_EXTERNAL_HOST_0} - ${MDB_EXTERNAL_HOST_1} - ${MDB_EXTERNAL_HOST_2} tls: ca: name: ${MDB_TLS_CA_SECRET_NAME} username: search-sync-source passwordSecretRef: name: ${MDB_RESOURCE_NAME}-search-sync-source-password key: password security: tls: certificateKeySecretRef: name: ${MDB_SEARCH_TLS_SECRET_NAME} resourceRequirements: limits: cpu: "3" memory: 5Gi requests: cpu: "2" memory: 3GiEOFMongoDBSearchリソースの配置が完了するまで待機します。
MongoDBSearch カスタムリソースを適用すると、Kubernetes演算子による検索ノード(ポッド)の配置が開始されます。このステップでは、
mdbsリソースのステータス フェーズがRunningになるまで実行を一時停止します。このフェーズはMongoDB 検索する ステートフルセットが操作可能であることを示します。echo "Waiting for MongoDBSearch resource to reach Running phase..." kubectl --context "${K8S_CTX}" -n "${MDB_NS}" wait --for=jsonpath='{.status.phase}'=Running mdbs/"${MDB_SEARCH_RESOURCE_NAME:-mdbs}" --timeout=300s
必須。MongoDB Search とベクトル検索の外部アクセスを構成します。
外部MongoDBインスタンスが検索サービスに接続できるようにするには、 MongoDB Search とベクトル検索の外部アクセスを構成する必要があります。検索ポッドをKubernetesクラスターの外部に公開する LoadBalancer サービスを作成できます。
このサービスは、Kubernetesクラスターの外部からアクセスできる外部IPアドレスまたはホスト名を使用して、ポート 27028 の MongoDBSearch サービスを公開します。
kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - <<YAMLapiVersion: v1kind: Servicemetadata: name: ${MDB_SEARCH_SERVICE_NAME}spec: type: LoadBalancer selector: app: ${MDB_SEARCH_RESOURCE_NAME:-mdbs}-search-svc ports: - name: mongot port: 27028 targetPort: 27028YAML
echo "Waiting for external IP to be assigned to service ${MDB_SEARCH_SERVICE_NAME}..."TIMEOUT=120 # 2 minutes timeoutELAPSED=0while [ ${ELAPSED} -lt ${TIMEOUT} ]; do EXTERNAL_IP=$(kubectl get service "${MDB_SEARCH_SERVICE_NAME}" --context "${K8S_CTX}" -n "${MDB_NS}" -o jsonpath='{.status.loadBalancer.ingress[0].ip}' 2>/dev/null) if [ -n "${EXTERNAL_IP}" ] && [ "${EXTERNAL_IP}" != "null" ]; then echo "External IP assigned: ${EXTERNAL_IP}" break fi echo "Still waiting for external IP assignment... (${ELAPSED}s/${TIMEOUT}s)" sleep 5 ELAPSED=$((ELAPSED + 5))done
if [ ${ELAPSED} -ge ${TIMEOUT} ]; then echo "ERROR: Timeout reached (${TIMEOUT}s) while waiting for external IP assignment" echo "LoadBalancer service may take longer to provision or there may be an issue" exit 1fi任意。名前空間で実行中のすべてのポッドを表示します。
MongoDBレプリカセットノード、 Kubernetes演算子用のMongoDBコントロール、および検索ノードの名前空間ポッド内のすべての実行中中のポッドを表示します。
echo; echo "MongoDBSearch resource"kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get mdbs/mdbsecho; echo "Search pods running in cluster ${K8S_CTX}"kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get pods -l app=mdbs-search-svcecho; echo "All pods in namespace ${MDB_NS}"kubectl --context "${K8S_CTX}" -n "${MDB_NS}" get pods次のステップ
MongoDB Search とベクトル検索を正常に配置して外部のMongoDB Enterprise Edition で使用することができたら、 MongoDBクラスターにデータを追加し、 MongoDB Search とベクトル検索インデックスを作成し、データに対してクエリを実行できます。詳細については、 MongoDB Search とベクトル検索 の設定 を参照してください。