Kubernetes Operator를 사용하여 외부 MongoDB 엔터프라이즈 v8.0.10 이상 서버 에서 실행 Kubernetes 클러스터 에 MongoDB Search 및 Vector Search를 배포 할 수 있습니다. 이 절차에서는 새 또는 기존 외부 복제본 세트 배포서버 사용하기 위해 Kubernetes 클러스터 에서 mongot 프로세스 배포 하고 구성하는 방법을 보여 줍니다.
전제 조건
MongoDB Search 및 Vector Search를 배포 하려면 다음이 필요합니다.
로컬에서 사용할 수 있는
kubeconfig가 포함 실행 Kubernetes 클러스터 입니다.Kubernetes 명령줄 도구인
kubectl이(가) 클러스터 와 통신하도록 구성되었습니다.Kubernetes 용 패키지 관리자인Helm을 사용하여 Kubernetes Operator를 설치합니다.
이 튜토리얼의 명령을 실행 하려면 Bash v5.1 이상을 사용해야 합니다.
데이터 저장을 위해 버전 8.0.10 이상을 실행 MongoDB 엔터프라이즈 복제본 세트 .
MongoDB 엔터프라이즈 배포에 대해 자세히 학습하려면 MongoDB 데이터베이스 리소스 배포 및 구성을 참조하세요.
MongoDB 작업 관리를 위해 실행 MongoDB Cloud Manager 또는 MongoDB Ops Manager .
시작하기 전에
Kubernetes Operator를 사용하여 MongoDB Search 및 Vector Search를 설치하기 전에 다음을 수행해야 합니다.
MongoDB Search 및 Vector Search를 위한 Cloud Manager 또는 MongoDB Ops Manager 매개변수 구성
Cloud Manager 또는 MongoDB Ops Manager UI 에 로그인하고 다음 단계를 수행하여 MongoDB Search 및 Vector Search에 대해 Cloud Manager 또는 MongoDB Ops Manager 구성합니다.
Cloud Manager 또는 MongoDB Ops Manager 배포서버 구성을 수정합니다.
Modify 버튼을 클릭하여 배포서버 구성 편집기를 엽니다.
Process Configuration 섹션에서 Advanced Configuration Options을 클릭합니다.
Add Option 버튼을 클릭하고 드롭다운에서 setParameter Startup Option 를 선택합니다.
이름과 값을 추가한 후 Add 를 클릭하여 필드에 다음 매개변수를 하나씩 추가합니다.
Parameter값mongotHost검색 호스트 이름 및 포트입니다. 예시:
search-node1.example.com:27017.searchIndexManagementHostAndPort검색 호스트 이름 및 포트입니다. 예시:
search-node1.example.com:27017.skipAuthenticationToSearchIndexManagementServerfalsesearchTLSMode구성된 TLS 모드 입니다. 예시 를 들어
mongot프로세스 TLS 연결을 허용하도록 구성된 경우preferTLS입니다.
MongoDB Search 및 Vector Search를 위한 Cloud Manager 또는 MongoDB Ops Manager 사용자 구성
searchCoordinator 역할 가진 사용자를 만들어야 합니다. MongoDB 버전 8.2 이상에서는 searchCoordinator 이 내장 역할 입니다. 사용자를 생성하고 사용자에게 역할 할당해야 합니다. 8.2 이전 및 8.0.10 이상의 MongoDB 버전의 경우 사용자를 만들기 전에 수동으로 역할 만들고 권한을 할당해야 합니다. 실행 중인 MongoDB 버전에 해당하는 탭 선택하여 searchCoordinator 역할 가진 사용자를 만듭니다.
사용자를 만들고 사용자에게 내장 searchCoordinator 역할 할당하려면 Cloud Manager , Ops Manager UI 또는 를 사용하여 다음 단계를 완료합니다.mongosh
권한이 있는 searchCoordinator 역할을 만들고 searchCoordinator 역할을 가진 사용자를 추가하려면 Cloud Manager 또는 MongoDB 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
In mongosh, run the following commands:
사용자 지정 역할 만듭니다.
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 deployment의 수명 주기를 관리합니다. Kubernetes Operator용 MongoDB 컨트롤러를 이미 설치한 경우 이 단계를 건너뛰세요. 그렇지 않으면 이전 단계에서 추가한 Helm 리포지토리에서 Kubernetes Operator용 MongoDB 컨트롤러를 설치합니다.
mongodb 네임스페이스 에 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}"
앞의 명령은 생성되는 mongodb 네임스페이스 에 Kubernetes 연산자를 설치합니다(아직 없는 경우). 설치 후 Kubernetes Operator는 MongoDBSearch 사용자 지정 리소스를 감시하고 MongoDB Search 및 Vector Search 배포의 수명 주기를 관리 .
MongoDB Search 및 Vector Search 설치
필수입니다. MongoDB 사용자 시크릿을 생성하고 로드합니다.
mongot 프로세스 검색 인덱스를 생성하고 검색 쿼리를 실행 위해 외부 MongoDB deployment 에 연결하려면 인증 자격 증명 필요합니다. 이 단계에서는 다음과 같은 Kubernetes 시크릿을 생성합니다.
mdb-admin-user-password- MongoDB 관리자의 자격 증명 .mdb-user-password- 검색 쿼리를 수행할 수 있는 권한이 있는 사용자의 자격 자격 증명 .mdbc-rs-search-sync-source-password-mongot프로세스 에서 데이터를 동기화하고 인덱스를 관리 위해 내부적으로 사용하는 전용 검색 사용자의 자격 증명 .
Kubernetes Operator는 이러한 시크릿을 MongoDB pod에 마운트합니다.
시크릿을 생성하려면 MongoDB Search 및 Vector 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 및 Vector Search를 위한 리소스 생성하고 배포 .
로드 밸런싱 없이 검색 노드 의 인스턴스 하나를 배포 할 수 있습니다. 배포 하려면 다음 단계를 완료하세요.
mdbs(이)라는MongoDBSearch사용자 지정 리소스 만듭니다.이 리소스 에는 다음이 포함되어 있습니다.
spec.source.external.hostAndPorts외부 MongoDB 복제본 세트 멤버 목록입니다.
spec.source.external.keyfileSecretRef외부 복제본 세트 멤버가 사용하는 키 파일 시크릿입니다.
spec.source.username동기화 사용자 사용자 이름 검색합니다.
spec.source.passwordSecretRef동기화 사용자 비밀번호를 검색합니다.
spec.resourceRequirements검색 컨테이너 에 대한 CPU 및 메모리 리소스 요구 사항입니다.
이 사용자 지정 리소스 의 설정에 대해 자세히 학습하려면 MongoDB 검색 및 벡터 검색 설정을 참조하세요.
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 연산자 검색 노드(pod) 배포를 시작합니다. 이 단계는mdbs리소스의 상태 단계가Running가 될 때까지 실행을 일시 중지하며, 이는 MongoDB Search StatefulSet가 작동 가능함을 나타냅니다.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 및 Vector Search에 대한 외부 액세스 구성합니다.
외부 MongoDB 인스턴스를 검색 서비스에 연결할 활성화 하려면 MongoDB Search 및 Vector 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 Operator용 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 엔터프라이즈 와 함께 사용할 MongoDB Search 및 Vector Search를 성공적으로 배포했으므로 이제 MongoDB cluster 에 데이터를 추가하고, MongoDB Search 및 Vector Search 인덱스를 생성하고, 데이터에 대해 쿼리를 실행 . 자세한 학습은 MongoDB 검색 및 벡터 검색 설정을 참조하세요.