Docs Menu
Docs Home
/
MongoDB Enterprise Kubernetes 연산자
/

멀티-Kubernetes-Cluster Quick Start

이 페이지의 내용

  • 시청을 통한 학습을 선호하시나요?
  • 전제 조건
  • 일반 전제 조건 검토
  • 환경 변수 및 GKE 구역 설정
  • GKE cluster 설정
  • 중앙 및 멤버 cluster에 대한 사용자 인증 자격 증명 받기
  • MongoDBMultiCluster 리소스 배포
  • 다음 단계

빠른 시작을 통해 GKE(Google Kubernetes Engine)Istio 서비스 메시를 사용하여 3개의 Kubernetes 멤버 클러스터에 MongoDB 복제본 세트 를 배포 수 있습니다.

시작하기 전에

  • 멀티 Kubernetes 클러스터 배포에 대해 알아보기

  • 멀티-Kubernetes cluster 서비스 및 도구목록 검토

  • 전제 조건완료

참고

다음 절차에서는 다중 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 복제본 세트 배포

빠른 시작을 사용하여 다중 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) 설정 cluster:

1

아직 수행하지 않았다면 Google Cloud Platform 프로젝트 를 만들고 프로젝트 에서 청구를 활성화 하고 아티팩트 레지스트리 및 GKE API를 활성화 한 다음 Google shell Kubernetes Engine 빠른 시작 의 관련 절차에 따라 Cloud 을 Google Cloud Platform 시작합니다. 문서에서 확인 가능합니다.

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개, 네임스페이스 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에서 다음 명령은 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
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. 용 Helm 추가 리포지토리를 MongoDB Helm에 Charts 추가합니다.Kubernetes

    helm repo add mongodb https://mongodb.github.io/helm-charts
  2. 용 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
  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 템플릿을 사용자 지정합니다.

    선택적 Operator Kubernetes 설치 설정에 학습 MongoDB Enterprise Kubernetes Operator 보려면 kubectl 을 참조하세요. 및 oc 설치 설정.

  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를 Ops Manager 프로젝트 에 연결합니다. 학습 내용은 ConfigMap을 사용하여 MongoDB 배포당 1개의 프로젝트 생성을 참조하세요.

8
9

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

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개, 네임스페이스 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에서 다음 명령은 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
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. 용 Helm 추가 리포지토리를 MongoDB Helm에 Charts 추가합니다.Kubernetes

    helm repo add mongodb https://mongodb.github.io/helm-charts
  2. 용 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
  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 템플릿을 사용자 지정합니다.

    선택적 Operator Kubernetes 설치 설정에 학습 MongoDB Enterprise Kubernetes Operator 보려면 kubectl 을 참조하세요. 및 oc 설치 설정.

  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를 Ops Manager 프로젝트 에 연결합니다. 학습 내용은 ConfigMap을 사용하여 MongoDB 배포당 1개의 프로젝트 생성을 참조하세요.

6
7

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

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 데이터베이스 사용자를 참조하세요.

돌아가기

전제 조건