멀티-Kubernetes-Cluster Quick Start
이 페이지의 내용
빠른 시작을 통해 GKE(Google Kubernetes Engine) 및 Istio 서비스 메시를 사용하여 3개의 Kubernetes 멤버 클러스터에 MongoDB 복제본 세트 를 배포 수 있습니다.
시작하기 전에
멀티 Kubernetes 클러스터 배포에 대해 알아보기
전제 조건완료
참고
다음 절차에서는 다중 Kubernetes 클러스터 MongoDB deployment 의 범위를 단일 네임스페이스 mongodb
로 지정합니다. 이름은 입니다. You can configure your multi-Kubernetes cluster MongoDB deployment to watch resources in multiple namespaces or all namespaces.
시청을 통한 학습을 선호하시나요?
멀티-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) 설정 cluster:
Google Cloud 계정을 설정합니다.
아직 수행하지 않았다면 Google Cloud Platform 프로젝트 를 만들고 프로젝트 에서 청구를 활성화 하고 아티팩트 레지스트리 및 GKE API를 활성화 한 다음 Google shell Kubernetes Engine 빠른 시작 의 관련 절차에 따라 Cloud 을 Google Cloud Platform 시작합니다. 문서에서 확인 가능합니다.
중앙 클러스터와 멤버 클러스터를 생성합니다.
다음 예시와 같이 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개, 네임스페이스
mongodb
를 생성합니다. 각 클러스터에서 레이블이 지정됩니다.모든 노드 cluster를 포함하는 하드 코딩된 이름
mongodb-enterprise-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
중앙 cluster에 MongoDB Enterprise Kubernetes Operator를 배포합니다.
Helm 또는 kubectl
을 사용하여 mongodb
네임스페이스의 중앙 cluster에 MongoDB Enterprise Kubernetes Operator를 배포합니다.
용 Helm 추가 리포지토리를 MongoDB Helm에 Charts 추가합니다.Kubernetes
helm repo add mongodb https://mongodb.github.io/helm-charts 용 Helm 사용 MongoDB Operator를 Charts Kubernetes 배포합니다.Kubernetes
helm upgrade \ --install \ mongodb-enterprise-operator-multi-cluster \ mongodb/enterprise-operator \ --namespace mongodb \ --set namespace=mongodb \ --version <mongodb-kubernetes-operator-version> \ --set operator.name=mongodb-enterprise-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-enterprise-kubernetes/master/crds.yaml Kubernetes Operator YAML 템플릿을 다운로드합니다.
curl https://raw.githubusercontent.com/mongodb/mongodb-enterprise-kubernetes/master/mongodb-enterprise-multi-cluster.yaml -o operator.yaml 선택 사항: Kubernetes 연산자 YAML 템플릿을 사용자 지정합니다.
선택적 Operator Kubernetes 설치 설정에 학습 MongoDB Enterprise Kubernetes Operator 보려면 kubectl 을 참조하세요. 및 oc 설치 설정.
Kubernetes 연산자 YAML 파일 을 적용합니다.
kubectl apply -f operator.yaml Kubernetes Operator가 배포되었는지 확인합니다.
Kubernetes 연산자가 올바르게 설치되었는지 확인하려면 다음 명령을 실행하고 출력을 확인합니다.
kubectl describe deployments mongodb-enterprise-operator -n <metadata.namespace> oc describe deployments mongodb-enterprise-operator -n <metadata.namespace> 기본적으로 배포는
mongodb
네임스페이스에 존재합니다. 다음 오류 메시지가 나타나면 올바른 네임스페이스를 사용하고 있는지 확인합니다.Error from server (NotFound): deployments.apps "mongodb-enterprise-operator" not found Kubernetes 연산자 문제를 해결하려면 Kubernetes 연산자 의 로그 검토 및 기타 문제 해결 주제를 참조하세요.
중요
Kubernetes Operator 또는 네임스페이스 를 제거해야 하는 경우 먼저 MongoDB 리소스를 제거해야 합니다.
Ops Manager와 함께 사용할 시크릿을 만들고 ConfigMap을 만듭니다.
Kubernetes Operator가 MongoDB Ops Manager 프로젝트에서 객체를 생성하고 업데이트할 수 있도록 시크릿을 생성합니다. 자세한 내용 은 Kubernetes Operator에 대한 자격 증명 생성을 참조하세요.
ConfigMap을 만들어 Kubernetes Operator를 Ops Manager 프로젝트 에 연결합니다. 학습 내용은 ConfigMap을 사용하여 MongoDB 배포당 1개의 프로젝트 생성을 참조하세요.
MongoDBMultiCluster
리소스 를 배포합니다.
spec.credentials
, spec.opsManager.configMapRef.name
및 보안 설정 을 설정하고 MongoDBMultiCluster
리소스 를 배포 합니다. 다음 코드 샘플duplicateServiceObjects
에서는 을(를) (으)로 설정하다 true
하여 DNS 프록시 를 활성화 합니다. Istio에서.
참고
이 튜토리얼에서는 Istio 서비스 메시로 cluster 간 DNS 확인을 활성화하기 위해 각 Kubernetes Pod당 단일 ClusterIP 주소를 사용하여 service 객체를 생성합니다.
kubectl apply -f - <<EOF apiVersion: mongodb.com/v1 kind: MongoDBMultiCluster metadata: name: multi-replica-set spec: version: 6.0.0-ent 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개, 네임스페이스
mongodb
를 생성합니다. 각 클러스터에서 레이블이 지정됩니다.모든 노드 cluster를 포함하는 하드 코딩된 이름
mongodb-enterprise-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
중앙 cluster에 MongoDB Enterprise Kubernetes Operator를 배포합니다.
Helm 또는 kubectl
을 사용하여 mongodb
네임스페이스의 중앙 cluster에 MongoDB Enterprise Kubernetes Operator를 배포합니다.
용 Helm 추가 리포지토리를 MongoDB Helm에 Charts 추가합니다.Kubernetes
helm repo add mongodb https://mongodb.github.io/helm-charts 용 Helm 사용 MongoDB Operator를 Charts Kubernetes 배포합니다.Kubernetes
helm upgrade \ --install \ mongodb-enterprise-operator-multi-cluster \ mongodb/enterprise-operator \ --namespace mongodb \ --set namespace=mongodb \ --version <mongodb-kubernetes-operator-version> \ --set operator.name=mongodb-enterprise-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-enterprise-kubernetes/master/crds.yaml Kubernetes Operator YAML 템플릿을 다운로드합니다.
curl https://raw.githubusercontent.com/mongodb/mongodb-enterprise-kubernetes/master/mongodb-enterprise-multi-cluster.yaml -o operator.yaml 선택 사항: Kubernetes 연산자 YAML 템플릿을 사용자 지정합니다.
선택적 Operator Kubernetes 설치 설정에 학습 MongoDB Enterprise Kubernetes Operator 보려면 kubectl 을 참조하세요. 및 oc 설치 설정.
Kubernetes 연산자 YAML 파일 을 적용합니다.
kubectl apply -f operator.yaml Kubernetes Operator가 배포되었는지 확인합니다.
Kubernetes 연산자가 올바르게 설치되었는지 확인하려면 다음 명령을 실행하고 출력을 확인합니다.
kubectl describe deployments mongodb-enterprise-operator -n <metadata.namespace> oc describe deployments mongodb-enterprise-operator -n <metadata.namespace> 기본적으로 배포는
mongodb
네임스페이스에 존재합니다. 다음 오류 메시지가 나타나면 올바른 네임스페이스를 사용하고 있는지 확인합니다.Error from server (NotFound): deployments.apps "mongodb-enterprise-operator" not found Kubernetes 연산자 문제를 해결하려면 Kubernetes 연산자 의 로그 검토 및 기타 문제 해결 주제를 참조하세요.
중요
Kubernetes Operator 또는 네임스페이스 를 제거해야 하는 경우 먼저 MongoDB 리소스를 제거해야 합니다.
Ops Manager와 함께 사용할 시크릿을 만들고 ConfigMap을 만듭니다.
Kubernetes Operator가 MongoDB Ops Manager 프로젝트에서 객체를 생성하고 업데이트할 수 있도록 시크릿을 생성합니다. 자세한 내용 은 Kubernetes Operator에 대한 자격 증명 생성을 참조하세요.
ConfigMap을 만들어 Kubernetes Operator를 Ops Manager 프로젝트 에 연결합니다. 학습 내용은 ConfigMap을 사용하여 MongoDB 배포당 1개의 프로젝트 생성을 참조하세요.
MongoDBMultiCluster
리소스 를 배포합니다.
spec.credentials
, spec.opsManager.configMapRef.name
및 보안 설정 을 설정하고 MongoDBMultiCluster
리소스 를 배포 합니다. 다음 코드 샘플duplicateServiceObjects
에서는 을(를) (으)로 설정하다 true
하여 DNS 프록시 를 활성화 합니다. Istio에서.
참고
이 튜토리얼에서는 Istio 서비스 메시로 cluster 간 DNS 확인을 활성화하기 위해 각 Kubernetes Pod당 단일 ClusterIP 주소를 사용하여 service 객체를 생성합니다.
kubectl apply -f - <<EOF apiVersion: mongodb.com/v1 kind: MongoDBMultiCluster metadata: name: multi-replica-set spec: version: 6.0.0-ent 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 데이터베이스 사용자를 참조하세요.