Docs Menu
Docs Home
/
엔터프라이즈 Kubernetes 운영자
/

멀티-Kubernetes-Cluster Quick Start

퀵 스타트를 통해 GKE(Google Kubernetes Engine)Istio 서비스 메시를 사용하여 3개의 Kubernetes 멤버 클러스터에 MongoDB 복제본 세트 배포.

시작하기 전에

참고

다음 절차에서는 다중 Kubernetes 클러스터 MongoDB deployment 범위를 라는 단일 네임스페이스 mongodb로 지정합니다. 여러 네임스페이스 또는 모든 네임스페이스의 리소스를 감시하도록 다중 Kubernetes 클러스터 MongoDB deployment 구성할 수 있습니다.

멀티-Kubernetes cluster MongoDB 배포를 생성하는 방법을 보여주는 이 동영상 튜토리얼 안내를 따라해 보세요.

소요 시간: 12분

여러 Kubernetes 클러스터에 MongoDB 복제본 세트 배포

빠른 시작을 사용하여 다중 Kubernetes 클러스터 MongoDB deployment 를 만들기 전에 다음 작업을 완료하세요.

계속 진행하기 전에 일반 전제 조건을 충족하는지 확인하세요. 학습 내용은 일반 전제 조건을 참조하세요.

다음 예시 와 같이 클러스터 이름과 클러스터를 배포 사용 가능한 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(Google Kubernetes Engine) 클러스터를 설정합니다.

1

아직 수행하지 않은 경우 Google Cloud Platform 프로젝트 만들고 프로젝트 에서 청구를 활성화 아티팩트 레지스트리 및 GKE API를 활성화 다음 Google Cloud Platform 문서의 Google Kubernetes Engine 빠른 시작 에 설명된 관련 절차에 따라 Cloud 셸 시작합니다. .

2

다음 예시와 같이 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"

중앙 및 멤버 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

TLS 인증서를 사용하여 다중 Kubernetes 클러스터 MongoDB 배포에서 복제본 세트 연결을 암호화할지 여부에 따라 적절한 탭을 선택합니다.

TLS-Encrypted Connections 탭 에서 다음 절차를 사용할 수 있습니다.

  • MongoDBMultiCluster 리소스 배포

  • MongoDBMultiCluster 리소스에 대한 TLS 인증서 갱신

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

시작하기 전에 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

기본적으로 Kubernetes 연산자의 범위는 mongodb 네임스페이스로 지정됩니다. 다음 명령을 실행하면 kubectl mongodb 플러그인이

  • 각 클러스터에 중앙 클러스터 1개, 멤버 클러스터 3개, 레이블이 지정된 네임스페이스 1개를 생성합니다. 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
4

Istio를 사용하는 경우 중앙 클러스터 에서 다음 명령을 실행 배포서버 의 각 멤버 클러스터에 대한 컨텍스트를 지정합니다. Istio에서 사이드카 삽입 을 활성화 하려면 다음 명령을 사용하여 각 멤버 클러스터의 mongodb 네임스페이스에 istio-injection=enabled 레이블을 추가합니다. 다른 서비스 메시를 사용하는 경우 생성된 네임스페이스에서 네트워크 트래픽을 처리하다 하도록 구성합니다.

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
5

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

kubectl config use-context $MDB_CENTRAL_CLUSTER_FULL_NAME
kubectl config set-context $(kubectl config current-context) \
--namespace=mongodb
6

Helm 또는 kubectl 을 사용하여 mongodb 네임스페이스의 중앙 cluster에 MongoDB Enterprise Kubernetes Operator를 배포합니다.

  1. Kubernetes 용 MongoDB Helm Charts 리포지토리 Helm에 추가합니다.

    helm repo add mongodb https://mongodb.github.io/helm-charts
  2. Kubernetes 용 MongoDB Helm Charts 사용하여 Kubernetes Operator를 배포 .

    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
  1. Kubernetes Operator 사용자 지정 리소스를 적용합니다.

    kubectl apply -f https://raw.githubusercontent.com/mongodb/mongodb-enterprise-kubernetes/master/crds.yaml
  2. Kubernetes Operator YAML 템플릿을 다운로드합니다.

    curl https://raw.githubusercontent.com/mongodb/mongodb-enterprise-kubernetes/master/mongodb-enterprise-multi-cluster.yaml -o operator.yaml
  3. 선택 사항: Kubernetes 연산자 YAML 템플릿을 사용자 지정합니다.

    선택적 Kubernetes Operator 설치 설정에 대한 학습 MongoDB 엔터프라이즈 Kubernetes Operator kubectloc 설치 설정을 참조하세요.

  4. Kubernetes 연산자 YAML 파일 을 적용합니다.

    kubectl apply -f operator.yaml
  5. 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 리소스를 제거해야 합니다.

7
  1. Kubernetes Operator가 MongoDB Ops Manager 프로젝트에서 객체를 생성하고 업데이트할 수 있도록 시크릿을 생성합니다. 자세한 내용 은 Kubernetes Operator에 대한 자격 증명 생성을 참조하세요.

  2. ConfigMap을 생성하여 Kubernetes Operator를 MongoDB Ops Manager 프로젝트 에 연결합니다. 학습 보려면 ConfigMap을 사용하여 1개의 프로젝트 만들기를 참조하세요.

8
9

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: 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 시크릿을 생성하여 멤버 클러스터에 배포합니다.

10
  1. 멤버 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
  2. 중앙 cluster에서 다음 명령을 실행하여 MongoDBMultiCluster 리소스가 실행 상태인지 확인합니다.

    kubectl --context=$MDB_CENTRAL_CLUSTER_FULL_NAME \
    --namespace mongodb \
    get mdbmc multi-replica-set -o yaml -w

다음 절차에 따라 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> \
--dry-run=client \
-o yaml |
kubectl apply -f -

이 절차에서는 복제본 세트 에 있는 MongoDB 호스트 간 연결과 클라이언트 애플리케이션과 MongoDB 배포 간 연결을 암호화하지 않습니다.

1

기본적으로 Kubernetes 연산자의 범위는 mongodb 네임스페이스로 지정됩니다. 다음 명령을 실행하면 kubectl mongodb 플러그인이

  • 각 클러스터에 중앙 클러스터 1개, 멤버 클러스터 3개, 레이블이 지정된 네임스페이스 1개를 생성합니다. 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
2

Istio를 사용하는 경우 중앙 클러스터 에서 다음 명령을 실행 배포서버 의 각 멤버 클러스터에 대한 컨텍스트를 지정합니다. Istio에서 사이드카 삽입 을 활성화 하려면 다음 명령을 사용하여 각 멤버 클러스터의 mongodb 네임스페이스에 istio-injection=enabled 레이블을 추가합니다. 다른 서비스 메시를 사용하는 경우 생성된 네임스페이스에서 네트워크 트래픽을 처리하다 하도록 구성합니다.

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
3

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

kubectl config use-context $MDB_CENTRAL_CLUSTER_FULL_NAME
kubectl config set-context $(kubectl config current-context) \
--namespace=mongodb
4

Helm 또는 kubectl 을 사용하여 mongodb 네임스페이스의 중앙 cluster에 MongoDB Enterprise Kubernetes Operator를 배포합니다.

  1. Kubernetes 용 MongoDB Helm Charts 리포지토리 Helm에 추가합니다.

    helm repo add mongodb https://mongodb.github.io/helm-charts
  2. Kubernetes 용 MongoDB Helm Charts 사용하여 Kubernetes Operator를 배포 .

    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
  1. Kubernetes Operator 사용자 지정 리소스를 적용합니다.

    kubectl apply -f https://raw.githubusercontent.com/mongodb/mongodb-enterprise-kubernetes/master/crds.yaml
  2. Kubernetes Operator YAML 템플릿을 다운로드합니다.

    curl https://raw.githubusercontent.com/mongodb/mongodb-enterprise-kubernetes/master/mongodb-enterprise-multi-cluster.yaml -o operator.yaml
  3. 선택 사항: Kubernetes 연산자 YAML 템플릿을 사용자 지정합니다.

    선택적 Kubernetes Operator 설치 설정에 대한 학습 MongoDB 엔터프라이즈 Kubernetes Operator kubectloc 설치 설정을 참조하세요.

  4. Kubernetes 연산자 YAML 파일 을 적용합니다.

    kubectl apply -f operator.yaml
  5. 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 리소스를 제거해야 합니다.

5
  1. Kubernetes Operator가 MongoDB Ops Manager 프로젝트에서 객체를 생성하고 업데이트할 수 있도록 시크릿을 생성합니다. 자세한 내용 은 Kubernetes Operator에 대한 자격 증명 생성을 참조하세요.

  2. ConfigMap을 생성하여 Kubernetes Operator를 MongoDB Ops Manager 프로젝트 에 연결합니다. 학습 보려면 ConfigMap을 사용하여 1개의 프로젝트 만들기를 참조하세요.

6
7

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: 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 시크릿을 생성하여 멤버 클러스터에 배포합니다.

8
  1. 멤버 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
  2. 중앙 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 데이터베이스 사용자를 참조하세요.

돌아가기

전제 조건

이 페이지의 내용