Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/
Kubernetes Operator 用のMongoDBドライバー
/ /

マルチクラスター ReplicaSets

マルチ Kubernetes クラスターMongoDB配置では、複数の地理的リージョンにまたがるグローバルクラスターにMongoDBインスタンスを追加して、可用性とデータのグローバル分散を実現できます。

次の手順を開始する前に、次のアクションを実行してください。

  • kubectl をインストールします。

  • Mongosh をインストール

  • GKE クラスターの手順または同等の手順を完了します。

  • TLS 証明書 の手順または同等の手順を実行します。

  • Istio Service メッシュ手順または同等の手順を完了します。

  • MongoDB演算子の配置 手順を完了します。

  • マルチクラスターMongoDB Ops Manager の手順を完了します。MongoDB Ops Manager の代わりにCloud Managerを使用する場合は、この手順をスキップできます。

  • 必要な環境変数を次のように設定します。

# This script builds on top of the environment configured in the setup guides.
# It depends (uses) the following env variables defined there to work correctly.
# If you don't use the setup guide to bootstrap the environment, then define them here.
# ${K8S_CLUSTER_0_CONTEXT_NAME}
# ${K8S_CLUSTER_1_CONTEXT_NAME}
# ${K8S_CLUSTER_2_CONTEXT_NAME}
# ${MDB_NAMESPACE}
export RS_RESOURCE_NAME=mdb
export MONGODB_VERSION="8.0.5-ent"

含まれているすべてのソースコードはMongoDB Kubernetes Operatorリポジトリにあります。

1

次のスクリプトを実行して、必要な CA 証明書を証明書発行者に作成します。

1kubectl apply --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${MDB_NAMESPACE}" -f - <<EOF
2apiVersion: cert-manager.io/v1
3kind: Certificate
4metadata:
5 name: mdb-cert
6spec:
7 dnsNames:
8 - "*.${MDB_NAMESPACE}.svc.cluster.local"
9 duration: 240h0m0s
10 issuerRef:
11 name: my-ca-issuer
12 kind: ClusterIssuer
13 renewBefore: 120h0m0s
14 secretName: cert-prefix-mdb-cert
15 usages:
16 - server auth
17 - client auth
18EOF
2

spec.credentialsspec.opsManager.configMapRef.nameマルチクラスターMongoDB Ops Manager手順で定義した MongoDBMultiCluster を設定します。セキュリティ設定を定義し、 リソースを配置します。次のコードサンプルでは、Istio で DNS プロキシ を有効にするために duplicateServiceObjectsfalse に設定されています。

注意

Istio サービス メトリクスによるクラスター間での DNS 解決を有効にするために、このチュートリアルでは Kubernetes ポッドごとに 1 つの ClusterIP アドレスを持つサービス オブジェクトを作成します。

1kubectl apply --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${MDB_NAMESPACE}" -f - <<EOF
2apiVersion: mongodb.com/v1
3kind: MongoDBMultiCluster
4metadata:
5 name: ${RS_RESOURCE_NAME}
6spec:
7 type: ReplicaSet
8 version: ${MONGODB_VERSION}
9 opsManager:
10 configMapRef:
11 name: mdb-org-project-config
12 credentials: mdb-org-owner-credentials
13 duplicateServiceObjects: false
14 persistent: true
15 backup:
16 mode: enabled
17 externalAccess: {}
18 security:
19 certsSecretPrefix: cert-prefix
20 tls:
21 ca: ca-issuer
22 authentication:
23 enabled: true
24 modes: ["SCRAM"]
25 clusterSpecList:
26 - clusterName: ${K8S_CLUSTER_0_CONTEXT_NAME}
27 members: 2
28 - clusterName: ${K8S_CLUSTER_1_CONTEXT_NAME}
29 members: 1
30 - clusterName: ${K8S_CLUSTER_2_CONTEXT_NAME}
31 members: 2
32EOF
3

次のコマンドを実行して、MongoDBMultiClusterリソースがを実行中ことを確認します。

1echo; echo "Waiting for MongoDB to reach Running phase..."
2kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${MDB_NAMESPACE}" wait --for=jsonpath='{.status.phase}'=Running "mdbmc/${RS_RESOURCE_NAME}" --timeout=900s
3echo; echo "Pods running in cluster ${K8S_CLUSTER_0_CONTEXT_NAME}"
4kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${MDB_NAMESPACE}" get pods
5echo; echo "Pods running in cluster ${K8S_CLUSTER_1_CONTEXT_NAME}"
6kubectl --context "${K8S_CLUSTER_1_CONTEXT_NAME}" -n "${MDB_NAMESPACE}" get pods
7echo; echo "Pods running in cluster ${K8S_CLUSTER_2_CONTEXT_NAME}"
8kubectl --context "${K8S_CLUSTER_2_CONTEXT_NAME}" -n "${MDB_NAMESPACE}" get pods
4

次のコマンドを実行して、 MongoDBユーザーとパスワードを作成します。配置には強力なパスワードを使用してください。

1kubectl apply --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${MDB_NAMESPACE}" -f - <<EOF
2apiVersion: v1
3kind: Secret
4metadata:
5 name: rs-user-password
6type: Opaque
7stringData:
8 password: password
9---
10apiVersion: mongodb.com/v1
11kind: MongoDBUser
12metadata:
13 name: rs-user
14spec:
15 passwordSecretKeyRef:
16 name: rs-user-password
17 key: password
18 username: "rs-user"
19 db: "admin"
20 mongodbResourceRef:
21 name: ${RS_RESOURCE_NAME}
22 roles:
23 - db: "admin"
24 name: "root"
25EOF
26
27kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" wait --for=jsonpath='{.status.phase}'=Updated -n "${MDB_NAMESPACE}" mdbu/rs-user --timeout=300s
5

次のコマンドを mongosh 実行して、実行中のMongoDBインスタンスにアクセスできることを確認します。

1external_ip="$(kubectl get --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${MDB_NAMESPACE}" svc "${RS_RESOURCE_NAME}-0-0-svc-external" -o=jsonpath="{.status.loadBalancer.ingress[0].ip}")"
2
3mkdir -p certs
4kubectl get --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${MDB_NAMESPACE}" cm/ca-issuer -o=jsonpath='{.data.ca-pem}' > certs/ca.crt
5
6mongosh --host "${external_ip}" --username rs-user --password password --tls --tlsCAFile certs/ca.crt --tlsAllowInvalidHostnames --eval "db.runCommand({connectionStatus : 1})"
{
authInfo: {
authenticatedUsers: [ { user: 'rs-user', db: 'admin' } ],
authenticatedUserRoles: [ { role: 'root', db: 'admin' } ]
},
ok: 1,
'$clusterTime': {
clusterTime: Timestamp({ t: 1747925179, i: 1 }),
signature: {
hash: Binary.createFromBase64('T1ZP+QUFgBXayfOsRI6XFdEmjKI=', 0),
keyId: Long('7507281432415305733')
}
},
operationTime: Timestamp({ t: 1747925179, i: 1 })
}

戻る

マルチクラスターMongoDB Ops Manager

項目一覧