MongoDBOpsManager
사용자 지정 리소스 정의
이 페이지의 내용
Kubernetes Kubernetes Operator는 MongoDB Ops Manager 리소스 를 배포 하는 MongoDBOpsManager
각 Kubernetes Kubernetes 클러스터 에서 사용자 지정 리소스 를 사용하여 MongoDB Ops Manager 배포를 관리합니다. Kubernetes Operator는 리소스의 사양이 변경되는지 감시합니다. 사양이 Kubernetes 변경되면 Kubernetes Operator는 변경 사항의 유효성을 검사하고 MongoDB Kubernetes Ops Manager 구성 요소를 배포 하는 각 Kubernetes MongoDB Ops Manager 클러스터의 리소스 를 적절하게 업데이트합니다.
MongoDBOpsManager
사용자 지정 리소스 s 사양은 다음과 같은 MongoDB Ops Manager 구성 요소를 정의합니다.
애플리케이션 데이터베이스
MongoDB Ops Manager 애플리케이션
백업 데몬
다음 다이어그램은 MongoDB Ops Manager 배포의 관련 구성 요소를 설명합니다.
단일 클러스터 배포에서는 Kubernetes Operator를 설치한 것과 동일한 Kubernetes 클러스터에 이러한 구성 요소를 배포합니다. 이 클러스터를 "운영자 클러스터"라고 합니다.
멀티 클러스터 배포에서는 다음을 수행할 수 있습니다.
각 구성 요소를 '멤버 클러스터'라고 하는 서로 다른 Kubernetes 클러스터에 배포합니다. 단일 멤버 Kubernetes 클러스터 를 사용하여 간소화된 멀티 클러스터 배포서버 를 배포 할 수도 있습니다. 학습 내용은 단일 및 다중 클러스터 모드를 참조하세요.
Kubernetes Operator가 다른 모든 멤버 클러스터를 관리하는 '운영자 클러스터'로 알려진 하나의 Kubernetes 클러스터에 Kubernetes Operator를 설치합니다. 연산자 클러스터는 MongoDB Ops Manager 구성 요소를 호스팅할 수 있으므로 멤버 클러스터로 간주될 수도 있습니다. 멀티 클러스터 아키텍처 다이어그램을 참조하세요.
애플리케이션 데이터베이스
애플리케이션 데이터베이스의 경우, Kubernetes Operator는 MongoDB 복제본 세트를 StatefulSet 로 배포합니다. .
애플리케이션 데이터베이스의 각 Pod에는 다음과 같은 컨테이너가 있습니다.
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.topology
를 MultiCluster
로 설정하는 경우), 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.topology
가MultiCluster
로 설정됨)에서는spec.applicationDatabase.clusterSpecList
의 각 멤버 클러스터에 대해 각 멤버 클러스터의 노드 수를 개별적으로 지정합니다. 멀티 클러스터 배포에서는spec.applicationDatabase
의replicas
설정이 무시됩니다.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개 중 과반수가 사용할 수 있어야 합니다.
Ops Manager 애플리케이션
애플리케이션 데이터베이스가 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 연산자 인스턴스가 MongoDBOpsManager 와 MongoDB 사용자 지정 리소스를 모두 관리하지 않는 배포에는 제한 이 적용됩니다.
백업 을 활성화 하면 Kubernetes Operator가 Persistent Volume Claim (영구 볼륨 클레임)을 생성합니다. 각 멤버 Kubernetes 클러스터 에 있는 Backup Daemon의 헤드 데이터베이스 에 해당합니다. spec.backup.headDB
설정을 사용하여 헤드 데이터베이스 를 구성할 수 있습니다.
Kubernetes Operator는 MongoDB Ops Manager API를 호출하여 MongoDB Ops Manager 애플리케이션의 백업 구성이 각 멤버 Kubernetes 클러스터의 사용자 지정 리소스 정의에 정의한 구성과 일치하는지 확인합니다.