Docs Menu
Docs Home
/
MongoDB Enterprise Kubernetes 연산자
/

서비스 메시 없이 멀티 Kubernetes 클러스터에 복제본 세트 배포하기

이 페이지의 내용

  • 시작하기 전에
  • 개요
  • 서비스 메시 없이 MongoDBMultiCluster 리소스 배포

이 절차에 따라 멤버 Kubernetes 클러스터 간에 외부 연결을 설정하기 위해 서비스 메시를 사용하지 않고 다중 Kubernetes 클러스터 MongoDB 배포에 복제본 세트를 배포할 수 있습니다.

이 절차를 사용하는 대신 서비스 메시를 사용하는 Multi-Kubernetes-Cluster Quick Start 를 사용할 수 있습니다.

서비스 메시가 없는 다중 Kubernetes 클러스터 MongoDB 배포에서는 다음 MongoDBMultiCluster 리소스 설정을 사용합니다.

  • spec.clusterSpecList.externalAccess.externalService Kubernetes 연산자가 외부 서비스를 생성하고 기본 구성의 일부로 기본 설정으로 로드 밸런서를 구성하도록 설정을 설정합니다. TLS 패스스루를 사용하여 TCP 프록시 역할을 하도록 로드 밸런서를 구성합니다(로드 밸런서에 TLS 종료 없음).

  • Kubernetes 연산자가 Kubernetes cluster의 각 파드에 대해 생성하는 외부 서비스를 사용자 지정합니다. spec.externalAccess 에서 글로벌 "all-cluster" 구성을 사용합니다. spec.clusterSpecList.externalAccess.externalService 의 설정 및 Kubernetes cluster별 재정의 설정.

  • 각 Kubernetes cluster의 spec.clusterSpecList.externalAccess.externalService.annotations 에서 load balancer에 대한 cloud 공급자 주석을 지정합니다.

  • spec.clusterSpecList.externalAccess.externalDomain 에서 외부 도메인을 지정합니다. 이를 통해 Kubernetes Operator는 도메인 접미사를 사용하여 mongod 프로세스를 등록할 수 있습니다. 이렇게 하면 다중 Kubernetes 클러스터 MongoDB 배포에서 mongod 프로세스에 대한 외부 연결이 가능합니다.

다음 절차에서는 복제본 세트에 있는 MongoDB 호스트 간에, 그리고 클라이언트 애플리케이션과 MongoDB 배포 간에 TLS암호화 연결을 설정합니다.

1

kubectl 명령을 실행하여 MongoDBMultiCluster 리소스 인증서를 저장하는 새 시크릿을 만듭니다.

kubectl --context $MDB_CENTRAL_CLUSTER_FULL_NAME \
--namespace=<metadata.namespace> \
create secret tls <prefix>-<metadata.name>-cert \
--cert=<resource-tls-cert> \
--key=<resource-tls-key>

참고

시크릿 앞에 <prefix>-<metadata.name> 을(를) 붙여야 합니다.

예를 예시 my-deployment mdb 배포서버 서버를 호출하고 접두사를 로 설정하다 하는 경우 클라이언트 TLS 통신에 대한 TLS 시크릿의 이름을 로 지정해야 mdb-my-deployment-cert 합니다. 또한 내부 클러스터 인증 (활성화된 경우)을 위한 TLS 시크릿의 이름을 mdb-my-deployment-clusterfile 로 지정해야 합니다.

2

kubectl 명령을 실행하여 CAMongoDBMultiCluster 리소스에 연결합니다. MongoDBMultiCluster 리소스에 대해 항상 ca-pem 의 이름을 지정해야 하는 CA 인증서 파일을 지정합니다.

kubectl --context $MDB_CENTRAL_CLUSTER_FULL_NAME \
--namespace=<metadata.namespace> \
create configmap custom-ca -from-file=ca-pem=<your-custom-ca-file>
3

아직 실행하지 않은 경우 다음 명령을 실행하여 중앙 cluster에서 기본 네임스페이스의 모든 kubectl 명령을 실행합니다.

kubectl config use-context $MDB_CENTRAL_CLUSTER_FULL_NAME
kubectl config set-context $(kubectl config current-context) \
--namespace=mongodb
4
  1. 샘플 복제본 세트 YAML 파일을 복사하여 새 텍스트 파일에 붙여넣습니다.

  2. 원하는 복제본 세트 구성과 일치하도록 파일 설정을 변경합니다.

1# Provides statefulSet override per cluster
2
3apiVersion: mongodb.com/v1
4kind: MongoDBMultiCluster
5metadata:
6 name: multi-replica-set
7spec:
8 version: 6.0.0-ent
9 type: ReplicaSet
10 credentials: my-credentials
11 opsManager:
12 configMapRef:
13 name: my-project
14 externalAccess:
15 externalService:
16 annotations:
17 # Global cloud-specific annotations added to external services in all clusters
18 spec:
19 # ServiceSpec attributes to override in external services in all clusters
20 clusterSpecList:
21 - clusterName: cluster1.example.com
22 members: 2
23 externalAccess:
24 # Domain suffix that mongod processes will use in cluster1
25 externalDomain: cluster1.example.com
26 externalService:
27 annotations:
28 # Cloud-specific annotations for external services
29 spec:
30 # ServiceSpec attributes to override if necessary
31 - clusterName: cluster2.example.com
32 members: 1
33 externalAccess:
34 # Domain suffix that mongod processes will use in cluster2
35 externalDomain: cluster2.example.com
36 externalService:
37 annotations:
38 # Cloud-specific annotations for external services
39 spec:
40 # ServiceSpec attributes to override if necessary
41 - clusterName: cluster3.example.com
42 members: 1
43 externalAccess:
44 # Domain suffix that mongod processes will use in cluster3
45 externalDomain: cluster3.example.com
46 externalService:
47 annotations:
48 # Cloud-specific annotations for external services
49 spec:
50 # ServiceSpec attributes to override if necessary
51
52...
5

spec.externalAccess 를 사용하여 다중 Kubernetes 클러스터 MongoDB deployment 의 모든 클러스터에 영향을 미치는 글로벌 값을 지정합니다. spec.clusterSpecList.externalAccess.externalService 를 사용한 설정 및 클러스터별 재정의 설정.

MongoDBMultiCluster 리소스 사양에서 이러한 설정을 제공하면 Kubernetes 연산자는 모든 Kubernetes cluster의 각 Pod에 대한 외부 서비스를 생성합니다. 그런 다음 이러한 서비스를 사용하여 배포의 모든 mongod 프로세스에 대한 외부 연결을 설정합니다.

6

spec.clusterSpecList.externalAccess.externalDomain 을 사용하여 각 cluster의 외부 도메인을 정의합니다. 설정.

결과적으로, Kubernetes 연산자는 다음 규칙에 따라 Kubernetes cluster의 모든 mongod 프로세스를 호스트 이름으로 등록합니다.

<pod-name>.<externalDomain>

예를 들어, mongod 프로세스의 호스트 이름은 my-replica-set-0-0.cluster-1.example.com 수 있습니다.

7
유형
설명
예시
문자열

MongoDBMultiCluster 리소스의 레이블입니다.

리소스 이름은 44자 이내여야 합니다.

metadata.name이름 도 참조하세요. Kubernetes 문서에서 확인 가능합니다.

multi-replica-set
문자열

MongoDBMultiCluster 리소스가 실행해야 하는 MongoDB의 버전입니다.

형식은 커뮤니티 에디션의 경우 X.Y.Z, 엔터프라이즈 에디션의 경우 X.Y.Z-ent여야 합니다.

중요: 호환되는 MongoDB Server 버전 을 선택해야 합니다. 호환되는 버전은 MongoDB database 리소스 가 사용하는 기본 이미지에 따라 다릅니다.

MongoDB 버전 관리에 대해 자세히 알아보려면 MongoDB 매뉴얼의 MongoDB 버전 관리를 참조하세요.

6.0.0-ent
spec
.opsManager
.configMapRef
문자열

ConfigMap 의 이름 MongoDB Ops Manager 연결 구성을 사용합니다. spec.cloudManager.configMapRef.name 설정은 이 설정의 별칭이며 대신 사용할 수 있습니다.

이 값은 생성하려는 리소스와 동일한 네임스페이스에 존재해야 합니다.

중요: Kubernetes Operator는 ConfigMap에 대한 모든 변경 사항을 추적하고 MongoDB 리소스 상태를 조정합니다.

<my-project>
spec
.clusterSpecList
.clusterName
문자열
MongoDBMultiCluster 리소스에 있는 cluster의 이름입니다.
cluster1.example.com
spec
.clusterSpecList
.members
integer
이 클러스터의 노드 수입니다.
2
spec
.clusterSpecList
.statefulSet
.spec
컬렉션

선택 사항.

StatefulSet 에 대한 구성을 제공합니다. 다중 Kubernetes 클러스터 MongoDB deployment 에서 클러스터의 각 StatefulSet에 대해 재정의합니다. clusterSpecList 아래의 개별 클러스터 수준에서 지정된 경우, 전체 다중 Kubernetes 클러스터 MongoDB deployment 에 대한 StatefulSet의 글로벌 구성을 재정의합니다. 멀티-Kubernetes-Cluster 리소스 사양StatefulSet v1 앱 Kubernetes 문서를 참조하세요.

예제를 참조하세요.
spec
.clusterSpecList
.statefulSet
.spec
.volumeClaimTemplates
.spec
컬렉션
선택 사항. 지정된 경우, 볼륨 클레임 템플릿 의 기본 스토리지 크기에 대한 클러스터별 재정의를 제공합니다. , 데이터를 저장하는 영구 볼륨의 경우.
예제를 참조하세요.
문자열

Operator가 MongoDB Ops Manager와 통신할 수 있도록 MongoDB Ops Manager API 인증 자격 증명으로 생성 한 시크릿의 이름입니다.Kubernetes

자격 증명을 보유하고 있는 Ops Manager 쿠버네티스 시크릿 객체는 생성하려는 리소스와 동일한 네임스페이스에 존재해야 합니다.

중요: Kubernetes Operator는 시크릿에 대한 모든 변경 사항을 추적하고 MongoDB 리소스 상태를 조정합니다.

<mycredentials>
문자열
생성할 MongoDB 리소스 유형입니다. 이 필드에 지원되는 유일한 값은 ReplicaSet 입니다. 제한 사항을 참조하세요.
ReplicaSet
8

객체 에 선택적 설정을 추가할 수도 있습니다. 사양. 멀티-Kubernetes-Cluster 리소스 사양을 참조하세요.

9
10

모든 디렉토리에서 다음 Kubernetes 명령을 호출하여 복제본 세트를 만듭니다.

kubectl apply -f <replica-set-conf>.yaml
11
  1. 모든 구성원 클러스터에서 외부 서비스의 상태를 확인합니다.

    kubectl get services

    Kubernetes는 모든 멤버 cluster에 있는 복제본 세트의 각 Pod에 대해 생성된 외부 서비스 하나를 반환해야 합니다.

  2. 각 외부 서비스가 외부에 노출되고 연결할 수 있는지 확인합니다. 다음 예제와 유사한 명령을 실행합니다.

    mongosh mongodb://my-replica-set-0-0.cluster-0.example.com:27017 \
    -tls -tlsCAFile "issuer-ca.pem"

    my-replica-set-0-0.cluster-0.example.com:27017 에 연결하면 클라이언트 트래픽을 my-replica-set-0-0-svc-external 라는 이름의 외부 서비스로 전달하고, 이 외부 서비스도 다시 mongod 프로세스로 트래픽을 전달합니다.

  3. 지정된 외부 도메인의 DNS 구역이 해당 외부 서비스를 가리키도록 구성합니다. 이 구성은 환경이나 사용 중인 클라우드 공급자에 따라 달라집니다.

12

MongoDBMultiCluster 리소스의 상태를 확인하려면 중앙 cluster에서 다음 명령을 사용합니다.

kubectl get mdbmc <resource-name> -o yaml -w

-w(watch) 플래그 설정이 적용된 경우, 구성이 변경되면 상태 단계가 Running 상태를 달성할 때까지 출력이 즉시 새로 고침 됩니다. 리소스 배포 상태에 대해 자세히 알아보려면 Kubernetes Operator 문제 해결을 참조하세요.

돌아가기

리소스 배포