Kubernetes의 MongoDB 데이터베이스 아키텍처
중요
이 섹션은 단일 Kubernetes 클러스터 배포에만 적용됩니다. 다중 Kubernetes 클러스터 MongoDB 배포의 경우 아키텍처, 기능 및 제한 을 참조하세요.
Kubernetes Operator 및 Cloud Manager 또는 Ops Manager를 사용하여 MongoDB database 리소스를 Kubernetes 클러스터에 배포할 수 있습니다. 기존 Cloud Manager 또는 Ops Manager를 사용하거나 Kubernetes에 Ops Manager를 배포하여 데이터베이스를 관리할 수 있습니다.
Kubernetes Operator는 Cloud Manager 또는 Ops Manager를 사용하여 다음과 같은 MongoDB database 사용자 지정 리소스를 관리합니다.
MongoDB
MongoDBUser
사용자지정 리소스 사양은 Kubernetes Operator에서 이러한 리소스를 정의합니다. Kubernetes Operator는 이러한 리소스를 모니터링합니다. 리소스의 사양을 업데이트 하면 Kubernetes Kubernetes Operator는 이러한 변경 사항을 Cloud Cloud Manager MongoDB Ops ManagerManager MongoDB 또는 MongoDB Ops Manager 에 푸시하여 MongoDB deployment의 구성을 변경합니다.
MongoDB
사용자 지정 리소스 정의
Kubernetes Operator는 MongoDB 사용자 지정 리소스에 의해 정의된 MongoDB database 배포를 관리합니다.
사용자 지정 리소스 사양은 MongoDB database 다음 유형의 MongoDB database 사용자 지정 리소스를 정의합니다.
Standalone
ReplicaSet
ShardedCluster
다음 다이어그램은 Kubernetes Operator에서 MongoDB 리소스의 각 유형 구성을 보여줍니다.
경고
Kubernetes Operator는 중재자 노드를 지원하지 않습니다.
독립형
MongoDB database 리소스의 Standalone
유형에 대해 Kubernetes Operator는 단일 노드를 가진 복제본 세트를 StatefulSet로 Kubernetes 클러스터에 배포합니다.
Kubernetes Operator는 생성할 파드 수와 함께 파드 사양이 포함된 StatefulSet를 생성합니다. Kubernetes Operator는 Kubernetes StatefulSet 컨트롤러를 사용하여 이 독립형 MongoDB database 인스턴스에 대한 파드를 생성합니다.
중요
Kubernetes에서 Standalone
리소스는 노드가 하나뿐인 ReplicaSet
리소스와 동일합니다. 복제본 세트를 사용하면 나중에 노드를 추가할 수 있으므로 Standalone
대신 노드가 하나인 ReplicaSet
를 배포하는 것이 좋습니다.
복제본 세트
ReplicaSet
MongoDB 리소스의 유형의 경우, Kubernetes Operator는 복제본 세트를 StatefulSet 로 spec.members
Kubernetes 클러스터에 배포합니다.값과 동일한 멤버 수를 갖습니다.
Kubernetes Operator는 Kubernetes StatefulSet 컨트롤러를 사용하여 복제본 세트의 각 노드에 대해 StatefulSet에 하나의 파드를 생성합니다.
StatefulSet의 각 파드는 MongoDB Agent 인스턴스를 실행합니다.
샤딩된 클러스터
MongoDB 리소스의 ShardedCluster
유형은 하나 이상의 Config 서버, mongos
인스턴스 및 샤드 멤버로 구성됩니다.
ShardedCluster
리소스에 대해 Kubernetes Operator가 다음을 배포합니다.
모든 Config 서버에 대해 하나의 StatefulSet
모든
mongos
인스턴스에 대해 하나의 StatefulSet각 샤드 노드당 하나의 StatefulSet
Kubernetes Operator는 Kubernetes StatefulSet 컨트롤러에 의존하여 샤딩된 클러스터에 대해 생성된 각 StatefulSet에 하나의 파드를 생성합니다.
사용자 지정 리소스조정 MongoDB
MongoDB 사용자 지정 리소스 사양을 적용하면, Kubernetes Operator는 각 리소스를 StatefulSet로 Kubernetes 클러스터에 배포합니다.
Kubernetes Operator:
사용자 지정 리소스의 사양 및 관련 ConfigMap 을 감시합니다. 또는 시크릿 저장 도구에 저장된 시크릿.
사양 파일, ConfigMap 또는 시크릿이 변경되면 변경 사항을 검증합니다.
Kubernetes 클러스터의 MongoDB database 리소스를 적절하게 업데이트합니다.
변경 사항을 Cloud Manager 또는 Ops Manager로 푸시하여 MongoDB deployment 구성을 변경합니다.
복제본 세트 조정 다이어그램
다음 다이어그램은 복제본 세트를 변경할 경우 Kubernetes Operator가 어떻게 작동하는지 설명합니다.
샤딩된 클러스터 조정 다이어그램
다음 다이어그램은 샤딩된 클러스터를 변경할 경우 Kubernetes Operator가 어떻게 동작하는지 설명합니다.
조정 워크플로
MongoDB 리소스 사양을 생성하거나 변경할 때 또는 관련 ConfigMap 또는 시크릿을 변경할 때, Kubernetes Operator는 변경 사항을 조정하기 위해 다음 작업을 수행합니다.
Kubernetes Operator에서 프로젝트를 생성하거나 프로젝트에 연결하는 데 사용한 ConfigMap에서 필요한 조직 및 프로젝트 구성을 읽습니다.
리소스 사양을 변경하면 Kubernetes Operator는 변경이 발생했음을 식별하고
spec.opsManager.configMapRef.name
에 지정된 ConfigMap의 사양을 확인합니다.참고
MongoDB 리소스에 대한 Kubernetes Operator를 구성할 때 ConfigMap을 생성하여 Cloud Manager 또는 Ops Manager 프로젝트를 연결하거나 생성합니다. MongoDB Agent는 이 ConfigMap을 사용하여 MongoDB 리소스의 배포를 시작하거나 변경합니다.
다음 중 하나에 지정된 시크릿에서 Cloud Manager 또는 Ops Manager에 대한 인증 구성을 읽습니다.
spec.credentials
리소스 사양에서
이 시크릿은 Kubernetes Operator가 Cloud Manager 또는 Ops Manager에 인증하는 데 필요한 Cloud Manager API 키 또는 Ops Manager API 키를 저장합니다.
참고
MongoDB 리소스에 대한 Kubernetes Operator를 구성할 때 이 시크릿을 Kubernetes에서 생성하거나 시크릿 저장소 도구에 저장해야 합니다.
Kubernetes Operator는 Cloud Manager 또는 Ops Manager에 연결하여 다음 작업을 수행합니다.
ConfigMap의
orgId
필드에서 조직을 읽습니다.orgId
필드에 값을 제공해야 합니다.이 선택적 필드에 값을 지정하지 않은 경우 ConfigMap의
projectName
필드에 지정된 프로젝트 이름을 읽거나 없는 경우 Cloud Manager 또는 Ops Manager에서 이 프로젝트를 만듭니다.MongoDB Agent용으로 Kubernetes Operator가 생성한
<project-id>-group-secret
시크릿이 존재하는지 확인합니다. Kubernetes Operator는 시크릿 저장소 도구 에서 시크릿을 읽거나 MongoDB Ops Manager API 키 또는 Cloud Manager API 키를 사용하여 시크릿을 생성합니다.자체를 ConfigMap 및 이 시크릿의 감시자로 등록합니다. 이를 통해 Kubernetes Operator는 ConfigMap 또는 시크릿에 대한 변경 사항에 반응할 수 있습니다.
Kubernetes Operator는 모든 TLS 및 X.509 인증서를 확인합니다.
복제본 세트에 대해 TLS가 활성화된 경우, Kubernetes Operator는
<prefix>-<resource-name>-cert
시크릿 또는 시크릿 저장소 도구에 제공된 인증서를 찾습니다.샤딩된 클러스터에 대해 TLS가 활성화된 경우, Kubernetes Operator는 이러한 시크릿에서 인증서를 찾습니다.
X.509 또는 X.509 및 TLS를 사용한 내부 인증이 활성화된 경우, Kubernetes Operator는 해당 인증서에 필요한 구성이 포함되어 있는지 확인합니다.
Kubernetes Operator는 필요한 StatefulSet를 찾아 업데이트하거나, StatefulSet가 존재하지 않는 경우 새 StatefulSet를 생성합니다. StatefulSet의 수는 MongoDB 리소스 유형에 따라 다릅니다.
ReplicaSet
또는Standalone
리소스의 경우 Kubernetes Operator는 단일 StatefulSet를 생성합니다.ShardedCluster
리소스의 경우 Kubernetes Operator는 다음을 생성합니다.모든 Config 서버에 대해 하나의 StatefulSet.
모든
mongos
인스턴스에 대해 하나의 StatefulSet.각 샤드 노드당 하나의 StatefulSet.
이 시점에서 각 파드는 하나 이상의 MongoDB Agent 인스턴스를 실행하지만, 아직
mongod
인스턴스를 포함하지는 않습니다.각 MongoDB Agent 인스턴스는 Cloud Manager 또는 Ops Manager 폴링을 시작하여 MongoDB 자동화 구성을 수신합니다.
참고
비정적 컨테이너: 가 MongoDB Agent 처음으로 구성을 수신하면 에 MongoDB 지정된 버전의
spec.version
바이너리를 인터넷에서 다운로드하거나,MongoDB Ops Manager 가 MongoDB Agent 로컬 모드 로 구성된 경우 에서 다운로드합니다.정적 컨테이너: 정적 컨테이너는 런타임에 바이너리를 다운로드하지 않습니다. 자세한 내용은 정적 컨테이너(공개 미리 보기)를 참조하세요.
MongoDB Agent는 자동화 구성을 수신한 후 해당 파드에서
mongod
인스턴스를 시작합니다.StatefulSet를 제외하고 MongoDB 사용자 지정 리소스가 생성하는 각 StatefulSet의 각 파드에
mongos
대해 Kubernetes Operator는 Persistent Volume Claim 을 생성합니다. . 리소스 사양에서spec.persistent
를false
로 설정하여 이 동작을 재정의할 수 있습니다.
Kubernetes Operator는 MongoDB Agent로부터 수신한 자동화 구성을 사양의 변경 사항으로 업데이트하여 Cloud Manager 또는 Ops Manager로 전송합니다.
각 파드에 대한 각 MongoDB Agent는 Cloud Manager 또는 Ops Manager를 다시 폴링하고 업데이트된 자동화 구성을 수신합니다.
사양의 필드를 변경하면 Kubernetes Operator가 롤링 업데이트 를 수행합니다. StatefulSets의 새 사양과 일치하는 새 파드를 시작합니다.
Kubernetes Operator는 각 MongoDB Agent가 준비 상태에 도달했다고 보고할 때까지 기다립니다.
참고
데이터베이스 리소스 의 보안 구성 을 변경하거나 6 확장하다 5 하는 경우 기존 StatefulSet에서 Kubernetes Operator는 단계를 실행하기 전에 단계를 실행합니다.
Kubernetes Operator는 Kubernetes 서비스를 업데이트하거나 새로운 MongoDB 리소스의 경우 각각의 새로운 StatefulSet에 필요한 서비스를 생성합니다.
ServiceType
ClusterIP
의 경우 , Kubernetes Operator는ClusterIP
를None
로 설정하고 다음 조치를 수행합니다.이 서비스가 존재하지 않는 경우 생성합니다.
ReplicaSet
또는Standalone
리소스의 경우, Kubernetes Operator는 사용자 지정 리소스의 이름에-svc
를 추가하여 서비스 이름을 지정합니다.ShardedCluster
리소스의 경우, Kubernetes Operator는 이러한 명명 규칙을 사용한합니다.mongos
인스턴스의 경우, Kubernetes Operator는spec.service
에 지정된 이름 또는-svc
이 추가된 리소스 이름을 사용합니다.Config 서버의 경우 Kubernetes Operator는
-cs
가 추가된 리소스 이름을 사용합니다.각 샤드의 경우 Kubernetes Operator는
-sh
가 추가된 리소스 이름을 사용합니다.
포트의 경우 Kubernetes Operator는 기본 포트 27017 또는 에 지정된 .net.port 를
spec.additionalMongodConfig
사용합니다.
사용자 지정 리소스조정 MongoDBUser
사용자 인증 방법이 SCRAM 으로 설정된 경우, MongoDB 사용자 리소스 사양 은 사용자 자격 증명을 저장하는 시크릿 저장소 도구 에 따라 달라집니다. Kubernetes spec.passwordSecretKeyRef
시크릿 MongoDBUser
을 사용하는 경우 리소스 사양의 설정에서 시크릿을 지정합니다.
Kubernetes Operator는 변경 사항에 대한 시크릿을 감시합니다. 시크릿 구성을 변경하면 Kubernetes Operator가 변경 사항을 조정합니다. 다음 작업을 수행합니다.
MongoDB 사용자 리소스 사양의
spec.MongoDBResourceRef.name
설정에 지정된 값에 따라 MongoDB 사용자의 리소스를 결정합니다.Cloud Manager 또는 Ops Manager에 연결합니다.
ConfigMap의
orgId
에서 조직을 읽습니다.ConfigMap의
projectName
에서 프로젝트 이름을 읽거나 이 프로젝트가 없는 경우 Cloud Manager 또는 Ops Manager에서 이 프로젝트를 만듭니다.MongoDB Agent용으로 Kubernetes Operator가 생성한
<project-id>-group-secret
이(가) 존재하는지 확인합니다. Kubernetes Operator는 시크릿 저장소 도구 에서 시크릿을 읽거나 MongoDB Ops Manager API 키 또는 Cloud Manager API 키를 사용하여 시크릿을 생성합니다.
Cloud Manager 또는 Ops Manager에서 사용자의 자격 증명을 업데이트하거나 존재하지 않는 경우 새 사용자를 생성합니다.
사용자 인증 메서드가 SCRAM인 경우 시크릿에서 비밀번호를 읽습니다.
사용자 이름을 읽습니다. 사용자 이름이 변경된 경우 Kubernetes Operator는 이전 이름을 제거하고 새 이름을 추가합니다.
Cloud Manager 또는 Ops Manager에 사용자가 있는지 확인합니다.
다음 다이어그램은 사용자 시크릿 또는 MongoDB 사용자 리소스 사양을 변경할 경우 Kubernetes Operator가 어떻게 동작하는지 설명합니다.