Docs Menu

MongoDBOpsManager 사용자 지정 리소스 정의

Kubernetes Operator는 사용자 MongoDBOpsManager 지정 리소스 를 사용하여 MongoDB Ops Manager 배포를 Kubernetes 관리합니다. 리소스를 배포하는 각 클러스터에서. Kubernetes Operator는 리소스의 사양이 변경되는지 감시합니다. 사양이 변경되면 Kubernetes Operator는 변경 사항의 유효성을 검사하고 MongoDB Ops Manager 구성 요소를 배포하는 각 Kubernetes 클러스터의 리소스를 적절하게 업데이트합니다.

MongoDBOpsManager 사용자 지정리소스 s 사양은 다음과 같은 MongoDB Ops Manager 구성 요소를 정의합니다.

  • 애플리케이션 데이터베이스

  • MongoDB Ops Manager 애플리케이션

  • 백업 데몬

다음 다이어그램은 MongoDB Ops Manager 배포의 관련 구성 요소를 설명합니다.

  • 단일 클러스터 배포에서는 Kubernetes Operator를 설치한 것과 동일한 Kubernetes 클러스터에 이러한 구성 요소를 배포합니다. 이 클러스터를 "운영자 클러스터"라고 합니다.

  • 멀티 클러스터 배포에서는 다음을 수행할 수 있습니다.

    • 각 구성 요소를 '멤버 클러스터'라고 하는 서로 다른 Kubernetes 클러스터에 배포합니다. 단일 멤버 Kubernetes 클러스터를 사용하여 간소화된 멀티 클러스터 배포를 배포할 수도 있습니다. 자세한 내용은 단일 및 다중 클러스터 모드를 참조하세요.

    • Kubernetes Operator가 다른 모든 멤버 클러스터를 관리하는 '운영자 클러스터'로 알려진 하나의 Kubernetes 클러스터에 Kubernetes Operator를 설치합니다. 연산자 클러스터는 MongoDB Ops Manager 구성 요소를 호스팅할 수 있으므로 멤버 클러스터로 간주될 수도 있습니다. 멀티 클러스터 아키텍처 다이어그램을 참조하세요.

Diagram showing the high-level architecture of the MongoDB
Enterprise Kubernetes Operator (single Kubernetes Cluster)

애플리케이션 데이터베이스의 경우, Kubernetes Operator는 MongoDB 복제본 세트를 StatefulSet 로 배포합니다. .

애플리케이션 데이터베이스의 각 Pod에는 다음과 같은 컨테이너가 있습니다.

  • mongod.

  • MongoDB Agent. MongoDB Agent 버전을 재정의하려면 $AGENT_IMAGE 환경 변수 또는 Kubernetes Operator 설치에 사용하는 Helm 차트의 agent.version 를 사용합니다.

  • 모니터링 에이전트. 모니터링 에이전트의 버전을 재정의할 수 없습니다. Kubernetes Operator가 사용하는 버전은 MongoDB Ops Manager 버전과의 이전 버전과의 호환성을 보장합니다.

    모니터링 에이전트의 버전을 보려면 다음과 같이 하세요:

    • Kubernetes Operator의 경우 파드 내부의 /usr/local/om_version_mapping.json 또는 Kubernetes Operator의 경우 이미지를 검사합니다.

    • 애플리케이션 데이터베이스를 배포하는 파드에서 모니터링 에이전트의 컨테이너 이미지를 확인합니다.

멀티 클러스터 배포서버에서( spec.applicationDatabase.topologyMultiCluster 로 설정하는 경우), Kubernetes Operator는 spec.applicationDatabase.clusterSpecList 의 애플리케이션 데이터베이스에 대해 지정된 각 Kubernetes 클러스터에 StatefulSet를 생성합니다.

애플리케이션 데이터베이스에 대한 MongoDB 복제본 세트 노드를 호스팅하는 각 멤버 Kubernetes 클러스터에서 다음 조치가 수행됩니다.

  • Kubernetes는 애플리케이션 데이터베이스 복제본 세트를 구성하는 각 노드에 대해 StatefulSet에 하나의 파드를 생성합니다. StatefulSet의 각 파드는 mongod 와 MongoDB Agent를 실행합니다.

    각 MongoDB Agent가 StatefulSet의 해당 파드에서 mongod 을(를) 시작하려면 spec.applicationDatabase.version 설정을 사용하여 애플리케이션 데이터베이스에 대한 특정 MongoDB Server 버전을 지정해야 합니다. 이 설정에서 지정하는 버전은 컨테이너 레지스트리의 태그와 일치해야 합니다.

  • 각 MongoDB Agent 는 해당 애플리케이션 데이터베이스 파드에서 mongod을(를) 시작합니다. MongoDB Agent가 애플리케이션 데이터베이스 복제본 세트 에 mongod 프로세스를 추가합니다.

    MongoDBOpsManager 사용자 지정 리소스 의 spec.applicationDatabase 컬렉션 에 있는 애플리케이션 데이터베이스 복제본 세트 에 대한 복제본 수 및 기타 구성 옵션을 구성합니다. Kubernetes Operator는 시크릿 을 사용하여 이 구성을 MongoDB Agent에 전달합니다. Kubernetes Operator가 애플리케이션 데이터베이스 StatefulSet의 각 파드에 마운트합니다.

    멀티 클러스터 애플리케이션 데이터베이스 배포서버(여기서 spec.applicationDatabase.topologyMultiCluster 로 설정됨)에서는 spec.applicationDatabase.clusterSpecList 의 각 멤버 클러스터에 대해 각 멤버 클러스터의 노드 수를 개별적으로 지정합니다. 멀티 클러스터 배포에서는 spec.applicationDatabasereplicas 설정이 무시됩니다.

  • spec.applicationDatabase collection을 업데이트할 때마다 Kubernetes Operator는 MongoDB Agent 구성 및 StatefulSet 사양(해당되는 경우)에 변경 사항을 적용합니다. StatefulSet 사양이 변경되면 Kubernetes는 순차적으로 파드를 업그레이드하고 각 파드를 재시작합니다.

  • 애플리케이션 데이터베이스를 호스팅하는 각 Kubernetes 클러스터 내에서 각 애플리케이션 데이터베이스 파드에 대한 연결을 제공하기 위해 Kubernetes Operator는 헤드리스 서비스 를 생성합니다. . 애플리케이션 데이터베이스의 멀티 클러스터 배포에서 Kubernetes Operator는 <om_resource_name>-db-N-svc 라는 이름의 서비스( metadata.name 에 해당)도 생성하고 <om_resource_name>-db-0.<namespace>.svc.cluster.local 와 같은 해당 FQDN 을 호스트 이름으로 사용합니다. 특정 mongod.

  • StorageClass 에 따라 또는 Kubernetes Operator를 배포하는 환경에서 Kubernetes는 영구 볼륨 을 생성할 수 있습니다. 동적 볼륨 프로비저닝을 사용합니다.

    영구 볼륨 클레임 을 사용자 지정할 수 spec.applicationDatabase.podSpec.persistence.multiple 있습니다. 또는 를 spec.applicationDatabase.podSpec.persistence.single사용하여 애플리케이션 데이터베이스 파드에 대해

프라이머리 노드를 선택하려면 애플리케이션 데이터베이스 복제본 세트 노드의 과반수를 사용할 수 있어야 합니다. 복제본 세트의 노드 과반수가 실패하면 복제본 세트는 프라이머리 노드를 선출하기 위한 과반수 투표를 구성할 수 없습니다. 자세한 내용은 복제본 세트 배포 아키텍처를 참조하세요.

가능하면 홀수의 멤버 Kubernetes 클러스터를 사용하고 애플리케이션 데이터베이스 노드를 데이터 센터, 구역 또는 Kubernetes 클러스터에 분산합니다. 자세한 내용은 둘 이상의 데이터 센터에 분산된 복제본 세트를 참조하세요.

애플리케이션 데이터베이스의 토폴로지에 대한 다음 예를 고려하세요.

멤버가 5개인 애플리케이션 데이터베이스의 경우 가능한 멤버 분포는 다음과 같습니다.

  • 클러스터 2개: Cluster 1 에 3개, Cluster 2 에 2개.

    • Cluster 2 가 실패하면 Cluster 1 는 프라이머리 노드 를 선택하기에 충분한 수의 애플리케이션 데이터베이스의 복제본 세트 멤버를 호스팅합니다.

    • Cluster 1 가 실패하면 Cluster 2 에 프라이머리 노드를 선택할 수 있는 애플리케이션 데이터베이스의 노드가 충분하지 않습니다.

  • 클러스터 3개: Cluster 1 에 멤버 2개, Cluster 2 에 멤버 2개, Cluster 3 에 멤버 1개.

    • 단일 cluster에 장애가 발생하면 나머지 cluster에 프라이머리 노드를 선택할 수 있는 충분한 구성원이 있습니다.

    • 두 cluster가 실패하면 나머지 cluster의 구성원이 충분하지 않아 프라이머리 노드를 선출할 수 없습니다.

7개 멤버로 구성된 애플리케이션 데이터베이스의 경우 다음과 같은 멤버 분포를 고려하세요.

  • 클러스터 2개: Cluster 1 에 4개, Cluster 2 에 3개 클러스터.

    • Cluster 2 이(가) 실패하면 Cluster 1 에 프라이머리 노드 를 선택할 수 있는 노드가 충분합니다.

    • Cluster 1 이(가) 실패하면 Cluster 2 의 멤버가 부족하여 프라이머리 노드 를 선택할 수 있습니다.

Cluster 2 이(가) 애플리케이션 데이터베이스의 멤버 최소 3개를 충족하지만, 프라이머리 노드 를 선택하려면 애플리케이션 데이터베이스의 멤버 7개 중 과반수가 사용할 수 있어야 합니다.

자세한 내용 은 MongoDB Ops Manager의 재해 복구 및 AppDB 리소스를 참조하세요.

애플리케이션 데이터베이스가 Running 상태에 도달하면 Kubernetes Operator가 MongoDB Ops Manager 애플리케이션 배포를 시작합니다.

  • 각 멤버 Kubernetes 클러스터에서 StatefulSet를 구성합니다.

  • 배포하려는 각 MongoDB Ops Manager 복제본 세트에 대해 Kubernetes 는 StatefulSet에 하나의 파드를 생성합니다.

  • 각 Pod에는 하나의 MongoDB Ops Manager 애플리케이션 프로세스가 포함되어 있습니다.

단일 MongoDB Ops Manager 클러스터 MongoDB Ops Manager 배포서버 가 단일 Pod 장애에 대해 복원력을 갖도록 하려면 를 spec.replicas 사용하여 애플리케이션을 호스팅하는 복제본 수를 늘립니다.

멀티 클러스터 MongoDB Ops Manager 배포가 전체 데이터 센터 또는 구역 장애에 대해 복원력을 갖도록 하려면 및 를 로 설정하여 여러 클러스터에 MongoDB Ops Manager 애플리케이션을 Kubernetes spec.topology spec.applicationDatabase.topology MultiCluster배포합니다. MongoDB Ops Manager 및 AppDB 리소스에 대한 재해 복구도 참조하세요.

이(가) spec.backup.enabled true Kubernetes 이면 Kubernetes 멤버 클러스터에서 MongoDB Ops Manager 애플리케이션이 실행 중 단계에 도달한 후 Operator가 백업 데몬을 시작합니다. 백업 데몬의 경우, Kubernetes Operator는 각 멤버 Kubernetes 클러스터에 StatefulSet를 배포합니다. 각 멤버 클러스터에서 Kubernetes는 spec.backup.members 에 지정된 수만큼 StatefulSet에 백업 데몬 파드를 생성합니다. 단일 클러스터 배포에서 이러한 조치는 Kubernetes Operator를 설치하고 MongoDB Ops Manager 구성 요소를 배포하는 데 사용하는 연산자 클러스터에서 수행됩니다.

백업 을 활성화 한 경우, 각 Kubernetes 멤버 클러스터 가 아닌 글로벌 수준에서 블록 저장소 oplog ,블록저장소 또는 S 스냅샷3저장소 를 구성합니다.spec.backup

백업 작업을 암호화 할 수도 있지만 동일한 Kubernetes 연산자 인스턴스가 MongoDBOpsManagerMongoDB 사용자 지정 리소스를 모두 관리하지 않는 배포에는 제한 이 적용됩니다.

백업 을 활성화 하면 Kubernetes Operator가 Persistent Volume Claim (영구 볼륨 클레임)을 생성합니다. 각 멤버 Kubernetes 클러스터 에 있는 Backup Daemon의 헤드 데이터베이스 에 해당합니다. spec.backup.headDB 설정을 사용하여 헤드 데이터베이스 를 구성할 수 있습니다.

Kubernetes Operator는 MongoDB Ops Manager API를 호출하여 MongoDB Ops Manager 애플리케이션의 백업 구성이 각 멤버 Kubernetes 클러스터의 사용자 지정 리소스 정의에 정의한 구성과 일치하는지 확인합니다.