서비스 메시 없이 멀티 Kubernetes 클러스터에 복제본 세트 배포하기
이 절차에 따라 멤버 Kubernetes 클러스터 간에 외부 연결을 설정하기 위해 서비스 메시를 사용하지 않고 다중 Kubernetes 클러스터 MongoDB 배포에 복제본 세트를 배포할 수 있습니다.
이 절차를 사용하는 대신 서비스 메시를 사용하는 Multi-Kubernetes-Cluster Quick Start 를 사용할 수 있습니다.
시작하기 전에
필수 구성 요소를 완료하되 서비스 메시를 설정하지는 않습니다. 대신 서비스 격자가 필요한지 여부를 결정하세요. 서비스 메시 없이 배포하기로 선택한 경우 외부 도메인을 사용하고 외부 연결이 가능하도록 DNS를 구성합니다.
전제 조건 완료의 일환으로 TLS 암호화를 위한 유효한 인증서를 생성합니다. 자세한 내용 은 TLS 암호화 연결 준비를 참조하세요.
MongoDB Ops Manager 리소스를 배포합니다.
다중 Kubernetes 클러스터 MongoDB deployment 에 Kubernetes Operator를 설치합니다. 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
프로세스에 대한 외부 연결이 가능합니다.
MongoDBMultiCluster
서비스 메시 없이 리소스 배포
다음 절차에서는 복제본 세트에 있는 MongoDB 호스트 간에, 그리고 클라이언트 애플리케이션과 MongoDB 배포 간에 TLS암호화 연결을 설정합니다.
리소스 의 TLS 인증서에 대한 시크릿을 MongoDBMultiCluster
생성합니다.
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
로 지정해야 합니다.
ConfigMap을 생성하여 CA를 리소스 와 MongoDBMultiCluster
연결합니다.
kubectl
명령을 실행하여 CA 를 MongoDBMultiCluster
리소스에 연결합니다. 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>
샘플 리소스를 복사하여 붙여넣습니다.
샘플 복제본 세트 YAML 파일을 복사하여 새 텍스트 파일에 붙여넣습니다.
원하는 복제본 세트 구성과 일치하도록 파일 설정을 변경합니다.
1 # Provides statefulSet override per cluster 2 3 apiVersion: mongodb.com/v1 4 kind: MongoDBMultiCluster 5 metadata: 6 name: multi-replica-set 7 spec: 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 ...
외부 연결 설정을 정의합니다.
spec.externalAccess 를 사용하여 다중 Kubernetes 클러스터 MongoDB deployment 의 모든 클러스터에 영향을 미치는 글로벌 값을 지정합니다. spec.clusterSpecList.externalAccess.externalService 를 사용한 설정 및 클러스터별 재정의 설정.
MongoDBMultiCluster
리소스 사양에서 이러한 설정을 제공하면 Kubernetes 연산자는 모든 Kubernetes cluster의 각 Pod에 대한 외부 서비스를 생성합니다. 그런 다음 이러한 서비스를 사용하여 배포의 모든 mongod
프로세스에 대한 외부 연결을 설정합니다.
각 Kubernetes 멤버 cluster에 대한 외부 도메인을 정의합니다.
spec.clusterSpecList.externalAccess.externalDomain 을 사용하여 각 cluster의 외부 도메인을 정의합니다. 설정.
결과적으로, Kubernetes 연산자는 다음 규칙에 따라 Kubernetes cluster의 모든 mongod
프로세스를 호스트 이름으로 등록합니다.
<pod-name>.<externalDomain>
예를 들어, mongod
프로세스의 호스트 이름은 my-replica-set-0-0.cluster-1.example.com
수 있습니다.
원하는 값으로 설정을 변경합니다.
키 | 유형 | 설명 | 예시 |
---|---|---|---|
문자열 |
리소스 이름은 44자 이내여야 합니다.
| multi-replica-set | |
문자열 | 이 형식은 커뮤니티 에디션의 경우 중요: 호환되는 MongoDB Server 버전 을 선택해야 합니다. 호환되는 버전은 MongoDB database 리소스 가 사용하는 기본 이미지에 따라 다릅니다. MongoDB 버전 관리에 대해 자세히 알아보려면 MongoDB 매뉴얼의 MongoDB 버전 관리를 참조하세요. | 6.0.0-ent | |
문자열 | ConfigMap 의 이름 MongoDB Ops Manager 연결 구성을 사용합니다. 이 값은 생성하려는 리소스와 동일한 네임스페이스에 존재해야 합니다. 중요: Kubernetes Operator는 ConfigMap에 대한 모든 변경 사항을 추적하고 | <my-project> | |
spec .clusterSpecList .clusterName | 문자열 | MongoDBMultiCluster 리소스에 있는 cluster의 이름입니다. | cluster1.example.com |
spec .clusterSpecList .members | integer | 이 클러스터의 노드 수입니다. | 2 |
spec .clusterSpecList .statefulSet .spec | 컬렉션 | 선택 사항. StatefulSet 에 대한 구성을 제공합니다. 다중 Kubernetes 클러스터 MongoDB deployment 에서 클러스터의 각 StatefulSet에 대해 재정의합니다. | 예제를 참조하세요. |
spec .clusterSpecList .statefulSet .spec .volumeClaimTemplates .spec | 컬렉션 | 선택 사항. 지정된 경우, 볼륨 클레임 템플릿 의 기본 스토리지 크기에 대한 클러스터별 재정의를 제공합니다. , 데이터를 저장하는 영구 볼륨의 경우. | 예제를 참조하세요. |
문자열 | Operator가 MongoDB Ops Manager와 통신할 수 있도록 MongoDB Ops Manager API 인증 자격 증명으로 생성 한 시크릿의 이름입니다.Kubernetes 자격 증명을 보유하고 있는 Ops Manager 쿠버네티스 시크릿 객체는 생성하려는 리소스와 동일한 네임스페이스에 존재해야 합니다. 중요: Kubernetes Operator는 시크릿에 대한 모든 변경 사항을 추적하고 | <mycredentials> | |
문자열 | ReplicaSet |
리소스 배포서버 에 대해 허용된 MongoDBMultiCluster
추가 설정을 추가합니다.
객체 에 선택적 설정을 추가할 수도 있습니다. 사양. 멀티-Kubernetes-Cluster 리소스 사양을 참조하세요.
이 복제본 세트 구성 파일 을 .yaml
확장자로 저장합니다.
복제본 세트 배포서버 를 시작합니다.
모든 디렉토리에서 다음 Kubernetes 명령을 호출하여 복제본 세트를 만듭니다.
kubectl apply -f <replica-set-conf>.yaml
각 클러스터의 구성원에 대한 외부 연결을 확인합니다.
모든 구성원 클러스터에서 외부 서비스의 상태를 확인합니다.
kubectl get services Kubernetes는 모든 멤버 cluster에 있는 복제본 세트의 각 Pod에 대해 생성된 외부 서비스 하나를 반환해야 합니다.
각 외부 서비스가 외부에 노출되고 연결할 수 있는지 확인합니다. 다음 예제와 유사한 명령을 실행합니다.
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
프로세스로 트래픽을 전달합니다.지정된 외부 도메인의 DNS 구역이 해당 외부 서비스를 가리키도록 구성합니다. 이 구성은 환경이나 사용 중인 클라우드 공급자에 따라 달라집니다.
다중 Kubernetes 클러스터 MongoDB 배포의 상태를 추적합니다.
MongoDBMultiCluster
리소스의 상태를 확인하려면 중앙 cluster에서 다음 명령을 사용합니다.
kubectl get mdbmc <resource-name> -o yaml -w
-w
(watch) 플래그 설정이 적용된 경우, 구성이 변경되면 상태 단계가 Running
상태를 달성할 때까지 출력이 즉시 새로 고침 됩니다. 리소스 배포 상태에 대해 자세히 알아보려면 Kubernetes Operator 문제 해결을 참조하세요.