문서 메뉴
문서 홈
/
MongoDB Enterprise Kubernetes 연산자
/

멀티-Kubernetes-Cluster Quick Start

이 페이지의 내용

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

시작하기 전에

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

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

  • 전제 조건완료

참고

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

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

소요 시간: 12분

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

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

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

클러스터 이름과 사용 가능한 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 프로젝트를 만들고, 프로젝트에서 청구를 활성화하고, 아티팩트 레지스트리 및 GKE API를 활성화하고,Google Kubernetes Engine 빠른 시작 의 관련 절차에 따라 Cloud Shell을 시작합니다. Google 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(으)로 지정해야 합니다. 또한 내부 cluster 인증(허용한 경우)을 위한 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 템플릿을 사용자 지정합니다.

    선택적 Kubernetes Operator 설치 설정에 대해 자세히 알아보려면 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을 사용하여 1개의 프로젝트 만들기를 참조하세요.

8
9

spec.credentialsspec.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 템플릿을 사용자 지정합니다.

    선택적 Kubernetes Operator 설치 설정에 대해 자세히 알아보려면 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을 사용하여 1개의 프로젝트 만들기를 참조하세요.

6
7

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

돌아가기

전제 조건

다음

MongoDBMultiCluster 리소스 배포

이 페이지의 내용