빠른 시작을 통해 GKE(Google Kubernetes Engine) 및 Istio 서비스 메시를 사용하여 3개의 Kubernetes 멤버 클러스터에 MongoDB 복제본 세트 배포 .
시작하기 전에
멀티 Kubernetes 클러스터 배포에 대해 알아보기
전제 조건완료
참고
시청을 통한 학습을 선호하시나요?
멀티-Kubernetes cluster MongoDB 배포를 생성하는 방법을 보여주는 이 동영상 튜토리얼 안내를 따라해 보세요.
소요 시간: 12분
전제 조건
빠른 시작을 사용하여 다중 Kubernetes 클러스터 MongoDB deployment 를 만들기 전에 다음 작업을 완료하세요.
일반 전제 조건 검토
계속 진행하기 전에 일반 전제 조건을 충족하는지 확인하세요. 학습 내용은 일반 전제 조건을 참조하세요.
환경 변수 및 GKE 구역 설정
다음 예시 와 같이 클러스터 이름과 클러스터를 배포 사용 가능한 GKE 구역을 사용하여 환경 변수를 설정합니다.
export MDB_GKE_PROJECT={GKE project name} export MDB_CENTRAL_CLUSTER_ZONE="us-west1-a" export MDB_CLUSTER_1_ZONE="us-west1-b" export MDB_CLUSTER_2_ZONE="us-east1-b" export MDB_CLUSTER_3_ZONE="us-central1-a" export MDB_CENTRAL_CLUSTER_FULL_NAME="gke_${MDB_GKE_PROJECT}_${MDB_CENTRAL_CLUSTER_ZONE}_${MDB_CENTRAL_CLUSTER}" export MDB_CLUSTER_1_FULL_NAME="gke_${MDB_GKE_PROJECT}_${MDB_CLUSTER_1_ZONE}_${MDB_CLUSTER_1}" export MDB_CLUSTER_2_FULL_NAME="gke_${MDB_GKE_PROJECT}_${MDB_CLUSTER_2_ZONE}_${MDB_CLUSTER_2}" export MDB_CLUSTER_3_FULL_NAME="gke_${MDB_GKE_PROJECT}_${MDB_CLUSTER_3_ZONE}_${MDB_CLUSTER_3}"
GKE cluster 설정
GKE(Google Kubernetes Engine) 클러스터를 설정합니다.
Google Cloud 계정을 설정합니다.
아직 수행하지 않았다면 Google Cloud 프로젝트 만들고 프로젝트 에서 청구를 활성화 아티팩트 레지스트리 및 GKE API를 활성화 다음 Google Cloud 문서의 Google Kubernetes Engine 빠른 시작에 설명된 관련 절차에 따라 Cloud Shell을 시작합니다.
중앙 클러스터와 멤버 클러스터를 생성합니다.
다음 예시와 같이 GKE 구역, 노드 수, 인스턴스 유형을 지정하여 하나의 중앙 클러스터와 하나 이상의 멤버 cluster 를 생성합니다.
gcloud container clusters create $MDB_CENTRAL_CLUSTER \ --zone=$MDB_CENTRAL_CLUSTER_ZONE \ --num-nodes=5 \ --machine-type "e2-standard-2"
gcloud container clusters create $MDB_CLUSTER_1 \ --zone=$MDB_CLUSTER_1_ZONE \ --num-nodes=5 \ --machine-type "e2-standard-2"
gcloud container clusters create $MDB_CLUSTER_2 \ --zone=$MDB_CLUSTER_2_ZONE \ --num-nodes=5 \ --machine-type "e2-standard-2"
gcloud container clusters create $MDB_CLUSTER_3 \ --zone=$MDB_CLUSTER_3_ZONE \ --num-nodes=5 \ --machine-type "e2-standard-2"
중앙 및 멤버 cluster에 대한 사용자 인증 자격 증명 받기
중앙 및 멤버 Kubernetes cluster에 대한 사용자 인증 자격 증명을 얻고 저장합니다. 나중에 이러한 cluster에서 kubectl
명령을 실행하기 위해 이러한 자격 증명을 사용하게 됩니다.
다음 명령을 실행합니다.
gcloud container clusters get-credentials $MDB_CENTRAL_CLUSTER \ --zone=$MDB_CENTRAL_CLUSTER_ZONE gcloud container clusters get-credentials $MDB_CLUSTER_1 \ --zone=$MDB_CLUSTER_1_ZONE gcloud container clusters get-credentials $MDB_CLUSTER_2 \ --zone=$MDB_CLUSTER_2_ZONE gcloud container clusters get-credentials $MDB_CLUSTER_3 \ --zone=$MDB_CLUSTER_3_ZONE
MongoDBMultiCluster 리소스 배포
TLS 인증서를 사용하여 다중 Kubernetes 클러스터 MongoDB 배포에서 복제본 세트 연결을 암호화할지 여부에 따라 적절한 탭을 선택합니다.
이 TLS-Encrypted Connections 탭 에서 다음 절차를 사용할 수 있습니다.
MongoDBMultiCluster
리소스 배포MongoDBMultiCluster
리소스에 대한 TLS 인증서 갱신
이 절차는 복제본 세트 의 MongoDB 호스트 간에, 그리고 클라이언트 애플리케이션과 MongoDB 배포 간에 TLS로 암호화된 연결을 설정합니다.
시작하기 전에 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>
kubectl mongodb
플러그인을 실행합니다.
기본적으로 Kubernetes 연산자의 범위는 mongodb
네임스페이스로 지정됩니다. 다음 명령을 실행하면 kubectl mongodb
플러그인이
각 클러스터에 중앙 클러스터 1개, 멤버 클러스터 3개, 레이블이 지정된 네임스페이스 1개를 생성합니다.
mongodb
모든 노드 cluster를 포함하는 하드 코딩된 이름
mongodb-kubernetes-operator-member-list
로 기본 ConfigMap을 만듭니다. ConfigMap의 이름은 변경할 수 없습니다.
kubectl mongodb
플러그인을 실행합니다.
kubectl mongodb multicluster setup \ --central-cluster="${MDB_CENTRAL_CLUSTER_FULL_NAME}" \ --member-clusters="${MDB_CLUSTER_1_FULL_NAME},${MDB_CLUSTER_2_FULL_NAME},${MDB_CLUSTER_3_FULL_NAME}" \ --member-cluster-namespace="mongodb" \ --central-cluster-namespace="mongodb" \ --create-service-account-secrets \ --install-database-roles=true
선택 사항: 각 멤버 클러스터에서 Istio 삽입 웹훅을 설정합니다.
Istio를 사용하는 경우 중앙 클러스터 에서 다음 명령을 실행 배포서버 의 각 멤버 클러스터에 대한 컨텍스트를 지정합니다. Istio에서 사이드카 삽입을 활성화 하려면 다음 명령을 istio-injection=enabled
사용하여 mongodb
각 멤버 클러스터 의 네임스페이스에 레이블을 추가합니다. 다른 서비스 메시를 사용하는 경우 생성된 네임스페이스에서 네트워크 트래픽을 처리하다 하도록 구성합니다.
kubectl label \ --context=$MDB_CLUSTER_1_FULL_NAME \ namespace mongodb \ istio-injection=enabled
kubectl label \ --context=$MDB_CLUSTER_2_FULL_NAME \ namespace mongodb \ istio-injection=enabled
kubectl label \ --context=$MDB_CLUSTER_3_FULL_NAME \ namespace mongodb \ istio-injection=enabled
중앙 클러스터 에 Kubernetes Operator용 MongoDB 컨트롤러를 배포합니다.
Helm 또는 kubectl
을 사용하여 mongodb
네임스페이스 의 중앙 클러스터 에 Kubernetes Operator용 MongoDB 컨트롤러를 배포합니다.
Kubernetes 용 MongoDB Helm Charts 리포지토리 Helm에 추가합니다.
helm repo add mongodb https://mongodb.github.io/helm-charts Kubernetes 용 MongoDB Helm Charts 사용하여 Kubernetes Operator를 배포 .
helm upgrade \ --install \ mongodb-kubernetes-operator-multi-cluster \ mongodb/mongodb-kubernetes \ --namespace mongodb \ --set namespace=mongodb \ --version <mongodb-kubernetes-operator-version> \ --set operator.name=mongodb-kubernetes-operator-multi-cluster \ --set operator.createOperatorServiceAccount=false \ --set operator.createResourcesServiceAccountsAndRoles=false \ --set "multiCluster.clusters={$MDB_CLUSTER_1_FULL_NAME,$MDB_CLUSTER_2_FULL_NAME,$MDB_CLUSTER_3_FULL_NAME}" \ --set multiCluster.performFailover=false
Kubernetes Operator 사용자 지정 리소스를 적용합니다.
kubectl apply -f https://raw.githubusercontent.com/mongodb/mongodb-kubernetes/master/public/crds.yaml Kubernetes Operator YAML 템플릿을 다운로드합니다.
curl https://raw.githubusercontent.com/mongodb/mongodb-kubernetes/master/public/mongodb-kubernetes-multi-cluster.yaml -o operator.yaml 선택 사항: Kubernetes 연산자 YAML 템플릿을 사용자 지정합니다.
선택적 Kubernetes 연산자 설치 설정에 대해 학습Kubernetes 연산자 kubectl 및 oc 설치 설정용 MongoDB 컨트롤러를 참조하세요.
Kubernetes 연산자 YAML 파일 을 적용합니다.
kubectl apply -f operator.yaml Kubernetes Operator가 배포되었는지 확인합니다.
Kubernetes 연산자가 올바르게 설치되었는지 확인하려면 다음 명령을 실행하고 출력을 확인합니다.
kubectl describe deployments mongodb-kubernetes-operator -n <metadata.namespace> oc describe deployments mongodb-kubernetes-operator -n <metadata.namespace> 기본적으로 배포는
mongodb
네임스페이스에 존재합니다. 다음 오류 메시지가 나타나면 올바른 네임스페이스를 사용하고 있는지 확인합니다.Error from server (NotFound): deployments.apps "mongodb-kubernetes-operator" not found Kubernetes 연산자 문제를 해결하려면 Kubernetes 연산자 의 로그 검토 및 기타 문제 해결 주제를 참조하세요.
중요
Kubernetes Operator 또는 네임스페이스 를 제거해야 하는 경우 먼저 MongoDB 리소스를 제거해야 합니다.
Ops Manager와 함께 사용할 시크릿을 만들고 ConfigMap을 만듭니다.
Kubernetes Operator가 MongoDB Ops Manager 프로젝트에서 객체를 생성하고 업데이트할 수 있도록 시크릿을 생성합니다. 자세한 내용 은 Kubernetes Operator에 대한 자격 증명 생성을 참조하세요.
ConfigMap을 생성하여 Kubernetes Operator를 MongoDB Ops Manager 프로젝트 에 연결합니다. 자세한 학습 ConfigMap을 사용하여 MongoDB 배포당 1개의 프로젝트 생성을 참조하세요.
MongoDBMultiCluster
리소스 를 배포합니다.
spec.credentials
spec.opsManager.configMapRef.name
, 및 보안 설정을 지정하고 MongoDBMultiCluster
리소스 배포 . 다음 코드 샘플duplicateServiceObjects
에서는 true
Istio에서 DNS 프록시를 활성화 위해 를 로 설정하다 .
참고
이 튜토리얼에서는 Istio 서비스 메시로 cluster 간 DNS 확인을 활성화하기 위해 각 Kubernetes Pod당 단일 ClusterIP 주소를 사용하여 service 객체를 생성합니다.
kubectl apply -f - <<EOF apiVersion: mongodb.com/v1 kind: MongoDBMultiCluster metadata: name: multi-replica-set spec: version: 8.0.0 type: ReplicaSet persistent: false duplicateServiceObjects: true credentials: my-credentials opsManager: configMapRef: name: my-project security: certsSecretPrefix: <prefix> tls: ca: custom-ca clusterSpecList: - clusterName: ${MDB_CLUSTER_1_FULL_NAME} members: 3 - clusterName: ${MDB_CLUSTER_2_FULL_NAME} members: 2 - clusterName: ${MDB_CLUSTER_3_FULL_NAME} members: 3 EOF
Kubernetes Operator는 이전 단계에서 생성한 CA 가 포함된 ConfigMap을 각 멤버 클러스터 에 복사하고, 연결된 PEM 시크릿을 생성하여 멤버 클러스터에 배포합니다.
리소스가 실행 MongoDBMultiCluster
확인합니다.
멤버 cluster의 경우 다음 명령을 실행하여 MongoDB 파드가 실행 중 상태인지 확인합니다.
kubectl get pods \ --context=$MDB_CLUSTER_1_FULL_NAME \ --namespace mongodb kubectl get pods \ --context=$MDB_CLUSTER_2_FULL_NAME \ --namespace mongodb kubectl get pods \ --context=$MDB_CLUSTER_3_FULL_NAME \ --namespace mongodb 중앙 cluster에서 다음 명령을 실행하여
MongoDBMultiCluster
리소스가 실행 상태인지 확인합니다.kubectl --context=$MDB_CENTRAL_CLUSTER_FULL_NAME \ --namespace mongodb \ get mdbmc multi-replica-set -o yaml -w
MongoDBMultiCluster 리소스에 대한 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> \ --dry-run=client \ -o yaml | kubectl apply -f -
이 절차에서는 복제본 세트 에 있는 MongoDB 호스트 간 연결과 클라이언트 애플리케이션과 MongoDB 배포 간 연결을 암호화하지 않습니다.
kubectl mongodb
플러그인을 실행합니다.
기본적으로 Kubernetes 연산자의 범위는 mongodb
네임스페이스로 지정됩니다. 다음 명령을 실행하면 kubectl mongodb
플러그인이
각 클러스터에 중앙 클러스터 1개, 멤버 클러스터 3개, 레이블이 지정된 네임스페이스 1개를 생성합니다.
mongodb
모든 노드 cluster를 포함하는 하드 코딩된 이름
mongodb-kubernetes-operator-member-list
로 기본 ConfigMap을 만듭니다. ConfigMap의 이름은 변경할 수 없습니다.
kubectl mongodb
플러그인을 실행합니다.
kubectl mongodb multicluster setup \ --central-cluster="${MDB_CENTRAL_CLUSTER_FULL_NAME}" \ --member-clusters="${MDB_CLUSTER_1_FULL_NAME},${MDB_CLUSTER_2_FULL_NAME},${MDB_CLUSTER_3_FULL_NAME}" \ --member-cluster-namespace="mongodb" \ --central-cluster-namespace="mongodb" \ --create-service-account-secrets \ --install-database-roles=true
선택 사항: 각 멤버 클러스터에서 Istio 삽입 웹훅을 설정합니다.
Istio를 사용하는 경우 중앙 클러스터 에서 다음 명령을 실행 배포서버 의 각 멤버 클러스터에 대한 컨텍스트를 지정합니다. Istio에서 사이드카 삽입을 활성화 하려면 다음 명령을 istio-injection=enabled
사용하여 mongodb
각 멤버 클러스터 의 네임스페이스에 레이블을 추가합니다. 다른 서비스 메시를 사용하는 경우 생성된 네임스페이스에서 네트워크 트래픽을 처리하다 하도록 구성합니다.
kubectl label \ --context=$MDB_CLUSTER_1_FULL_NAME \ namespace mongodb \ istio-injection=enabled
kubectl label \ --context=$MDB_CLUSTER_2_FULL_NAME \ namespace mongodb \ istio-injection=enabled
kubectl label \ --context=$MDB_CLUSTER_3_FULL_NAME \ namespace mongodb \ istio-injection=enabled
중앙 클러스터 에 Kubernetes Operator용 MongoDB 컨트롤러를 배포합니다.
Helm 또는 kubectl
을 사용하여 mongodb
네임스페이스 의 중앙 클러스터 에 Kubernetes Operator용 MongoDB 컨트롤러를 배포합니다.
Kubernetes 용 MongoDB Helm Charts 리포지토리 Helm에 추가합니다.
helm repo add mongodb https://mongodb.github.io/helm-charts Kubernetes 용 MongoDB Helm Charts 사용하여 Kubernetes Operator를 배포 .
helm upgrade \ --install \ mongodb-kubernetes-operator-multi-cluster \ mongodb/mongodb-kubernetes \ --namespace mongodb \ --set namespace=mongodb \ --version <mongodb-kubernetes-operator-version> \ --set operator.name=mongodb-kubernetes-operator-multi-cluster \ --set operator.createOperatorServiceAccount=false \ --set operator.createResourcesServiceAccountsAndRoles=false \ --set "multiCluster.clusters={$MDB_CLUSTER_1_FULL_NAME,$MDB_CLUSTER_2_FULL_NAME,$MDB_CLUSTER_3_FULL_NAME}" \ --set multiCluster.performFailover=false
Kubernetes Operator 사용자 지정 리소스를 적용합니다.
kubectl apply -f https://raw.githubusercontent.com/mongodb/mongodb-kubernetes/master/public/crds.yaml Kubernetes Operator YAML 템플릿을 다운로드합니다.
curl https://raw.githubusercontent.com/mongodb/mongodb-kubernetes/master/public/mongodb-kubernetes-multi-cluster.yaml -o operator.yaml 선택 사항: Kubernetes 연산자 YAML 템플릿을 사용자 지정합니다.
선택적 Kubernetes 연산자 설치 설정에 대해 학습Kubernetes 연산자 kubectl 및 oc 설치 설정용 MongoDB 컨트롤러를 참조하세요.
Kubernetes 연산자 YAML 파일 을 적용합니다.
kubectl apply -f operator.yaml Kubernetes Operator가 배포되었는지 확인합니다.
Kubernetes 연산자가 올바르게 설치되었는지 확인하려면 다음 명령을 실행하고 출력을 확인합니다.
kubectl describe deployments mongodb-kubernetes-operator -n <metadata.namespace> oc describe deployments mongodb-kubernetes-operator -n <metadata.namespace> 기본적으로 배포는
mongodb
네임스페이스에 존재합니다. 다음 오류 메시지가 나타나면 올바른 네임스페이스를 사용하고 있는지 확인합니다.Error from server (NotFound): deployments.apps "mongodb-kubernetes-operator" not found Kubernetes 연산자 문제를 해결하려면 Kubernetes 연산자 의 로그 검토 및 기타 문제 해결 주제를 참조하세요.
중요
Kubernetes Operator 또는 네임스페이스 를 제거해야 하는 경우 먼저 MongoDB 리소스를 제거해야 합니다.
Ops Manager와 함께 사용할 시크릿을 만들고 ConfigMap을 만듭니다.
Kubernetes Operator가 MongoDB Ops Manager 프로젝트에서 객체를 생성하고 업데이트할 수 있도록 시크릿을 생성합니다. 자세한 내용 은 Kubernetes Operator에 대한 자격 증명 생성을 참조하세요.
ConfigMap을 생성하여 Kubernetes Operator를 MongoDB Ops Manager 프로젝트 에 연결합니다. 자세한 학습 ConfigMap을 사용하여 MongoDB 배포당 1개의 프로젝트 생성을 참조하세요.
MongoDBMultiCluster
리소스 를 배포합니다.
spec.credentials
spec.opsManager.configMapRef.name
, 및 보안 설정을 지정하고 MongoDBMultiCluster
리소스 배포 . 다음 코드 샘플duplicateServiceObjects
에서는 true
Istio에서 DNS 프록시를 활성화 위해 를 로 설정하다 .
참고
이 튜토리얼에서는 Istio 서비스 메시로 cluster 간 DNS 확인을 활성화하기 위해 각 Kubernetes Pod당 단일 ClusterIP 주소를 사용하여 service 객체를 생성합니다.
kubectl apply -f - <<EOF apiVersion: mongodb.com/v1 kind: MongoDBMultiCluster metadata: name: multi-replica-set spec: version: 8.0.0 type: ReplicaSet persistent: false duplicateServiceObjects: true credentials: my-credentials opsManager: configMapRef: name: my-project security: certsSecretPrefix: <prefix> tls: ca: custom-ca clusterSpecList: - clusterName: ${MDB_CLUSTER_1_FULL_NAME} members: 3 - clusterName: ${MDB_CLUSTER_2_FULL_NAME} members: 2 - clusterName: ${MDB_CLUSTER_3_FULL_NAME} members: 3 EOF
Kubernetes Operator는 이전 단계에서 생성한 CA 가 포함된 ConfigMap을 각 멤버 클러스터 에 복사하고, 연결된 PEM 시크릿을 생성하여 멤버 클러스터에 배포합니다.
리소스가 실행 MongoDBMultiCluster
확인합니다.
멤버 cluster의 경우 다음 명령을 실행하여 MongoDB 파드가 실행 중 상태인지 확인합니다.
kubectl get pods \ --context=$MDB_CLUSTER_1_FULL_NAME \ --namespace mongodb kubectl get pods \ --context=$MDB_CLUSTER_2_FULL_NAME \ --namespace mongodb kubectl get pods \ --context=$MDB_CLUSTER_3_FULL_NAME \ --namespace mongodb 중앙 cluster에서 다음 명령을 실행하여
MongoDBMultiCluster
리소스가 실행 상태인지 확인합니다.kubectl --context=$MDB_CENTRAL_CLUSTER_FULL_NAME \ --namespace mongodb \ get mdbmc multi-replica-set -o yaml -w
다음 단계
세 개의 Kubernetes cluster에 MongoDB 복제본 세트를 배포한 후 데이터베이스 사용자를 추가하여 MongoDB database에 연결할 수 있습니다. managed 데이터베이스 사용자를 참조하세요.