Docs Menu

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

이 절차에 따라 멤버 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자 이내여야 합니다.

Kubernetes 문서에서 metadata.name이름 도 참조하세요.

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 문제 해결을 참조하세요.