複数のKubernetesクラスターにMongoDBリソースの複数のインスタンスを配置するには、まずKubernetes Operator をKubernetesクラスターの 1 つに配置する必要があります。 Kubernetes Operator が中央クラスターに配置されると、中央クラスターにアップデートを適用することで、すべてのKubernetesクラスターにわたってすべてのMongoDBリソースを作成および管理できるようになります。
注意
Kubernetes Operator を配置する手順は、サービス メトリクスの有無にかかわらず同じです。演算子インストールでは、クラスター間ネットワークは構成されません。 MongoDBリソースを配置すると、 演算子は外部のKubernetes Service を通じて各ノードを公開し、そのホスト名を外部からアクセス可能な FQDN に設定します。この参照アーキテクチャでは、外部 DNS は、これらの FQDN を外部サービスにマッピングする DNS レコードを作成します。
前提条件
次の手順を開始する前に、次のアクションを実行してください。
kubectlをインストールします。GKE クラスターの手順または同等の手順を完了します。
外部 DNS の構成 手順または同等の手順を完了します。
kubectl mongodbプラグインをインストールします。kubectl mongodbプラグインをインストールするには1ご希望の Kubernetes Operator パッケージ バージョンをダウンロードします。
Kubernetes Operator リポジトリ用のMongoDBコントロールのリリース ページから、ご希望のKubernetes Operatorパッケージバージョンをダウンロードします。
パッケージの名前には次のパターンが使用されます:
kubectl-mongodb_{{ .Version }}_{{ .Os }}_{{ .Arch }}.tar.gz。次のいずれかのパッケージを使用します。
kubectl-mongodb_{{ .Version }}_darwin_amd64.tar.gzkubectl-mongodb_{{ .Version }}_darwin_arm64.tar.gzkubectl-mongodb_{{ .Version }}_linux_amd64.tar.gzkubectl-mongodb_{{ .Version }}_linux_arm64.tar.gz
23kubectl mongodbプラグインバイナリを見つけて、目的の宛先にコピーします。解凍された ディレクトリで
kubectl-mongodbバイナリを見つけ、次の例に示すように、Kubernetes Operator ユーザーの PATH 内にある目的の宛先に移動します。mv kubectl-mongodb /usr/local/bin/kubectl-mongodb これで、次のコマンドを使用して
kubectl mongodbプラグインを実行できるようになります。kubectl mongodb multicluster setup kubectl mongodb multicluster recover サポートされているフラグの詳細については、 MongoDB kubernetes プラグイン リファレンス を参照してください。
必要に応じて を更新し、次の
env_variables.shファイルで定義されている環境変数を設定します。1 # Namespace in which Ops Manager and AppDB will be deployed 2 export OM_NAMESPACE="mongodb-om" 3 # Namespace in which the operator will be installed 4 export OPERATOR_NAMESPACE="mongodb-operator" 5 # Namespace in which MongoDB resources will be deployed 6 export MDB_NAMESPACE="mongodb" 7 8 # comma-separated key=value pairs for additional parameters passed to the helm-chart installing the operator 9 export OPERATOR_ADDITIONAL_HELM_VALUES="${OPERATOR_ADDITIONAL_HELM_VALUES:-""}" 10 11 export OFFICIAL_OPERATOR_HELM_CHART="mongodb/mongodb-kubernetes" 12 export OPERATOR_HELM_CHART="${OPERATOR_HELM_CHART:-${OFFICIAL_OPERATOR_HELM_CHART}}"
ソースコード
手順
各KubernetesクラスターにKubernetes Operator、 MongoDB 、およびMongoDB Ops Managerの名前空間を作成します。
kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" create namespace "${OPERATOR_NAMESPACE}" kubectl --context "${K8S_CLUSTER_1_CONTEXT_NAME}" create namespace "${OPERATOR_NAMESPACE}" kubectl --context "${K8S_CLUSTER_2_CONTEXT_NAME}" create namespace "${OPERATOR_NAMESPACE}" kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" create namespace "${OM_NAMESPACE}" kubectl --context "${K8S_CLUSTER_1_CONTEXT_NAME}" create namespace "${OM_NAMESPACE}" kubectl --context "${K8S_CLUSTER_2_CONTEXT_NAME}" create namespace "${OM_NAMESPACE}" kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" create namespace "${MDB_NAMESPACE}" kubectl --context "${K8S_CLUSTER_1_CONTEXT_NAME}" create namespace "${MDB_NAMESPACE}" kubectl --context "${K8S_CLUSTER_2_CONTEXT_NAME}" create namespace "${MDB_NAMESPACE}"
イメージ プル シークレットを作成します。
mkdir -p secrets kubectl create secret generic "image-registries-secret" \ --from-file=.dockerconfigjson="${HOME}/.docker/config.json" --type=kubernetes.io/dockerconfigjson \ --dry-run=client -o yaml > secrets/image-registries-secret.yaml kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${OPERATOR_NAMESPACE}" apply -f secrets/image-registries-secret.yaml kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${OM_NAMESPACE}" apply -f secrets/image-registries-secret.yaml kubectl --context "${K8S_CLUSTER_1_CONTEXT_NAME}" -n "${OM_NAMESPACE}" apply -f secrets/image-registries-secret.yaml kubectl --context "${K8S_CLUSTER_2_CONTEXT_NAME}" -n "${OM_NAMESPACE}" apply -f secrets/image-registries-secret.yaml kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${MDB_NAMESPACE}" apply -f secrets/image-registries-secret.yaml kubectl --context "${K8S_CLUSTER_1_CONTEXT_NAME}" -n "${MDB_NAMESPACE}" apply -f secrets/image-registries-secret.yaml kubectl --context "${K8S_CLUSTER_2_CONTEXT_NAME}" -n "${MDB_NAMESPACE}" apply -f secrets/image-registries-secret.yaml
Kubernetesクラスターを構成します。
次のコマンドを実行して、 Kubernetesクラスターを構成します。
1 kubectl mongodb multicluster setup \ 2 --central-cluster="${K8S_CLUSTER_0_CONTEXT_NAME}" \ 3 --member-clusters="${K8S_CLUSTER_0_CONTEXT_NAME},${K8S_CLUSTER_1_CONTEXT_NAME},${K8S_CLUSTER_2_CONTEXT_NAME}" \ 4 --member-cluster-namespace="${OM_NAMESPACE}" \ 5 --central-cluster-namespace="${OPERATOR_NAMESPACE}" \ 6 --create-service-account-secrets \ 7 --install-database-roles=true \ 8 --image-pull-secrets=image-registries-secret 9 10 kubectl mongodb multicluster setup \ 11 --central-cluster="${K8S_CLUSTER_0_CONTEXT_NAME}" \ 12 --member-clusters="${K8S_CLUSTER_0_CONTEXT_NAME},${K8S_CLUSTER_1_CONTEXT_NAME},${K8S_CLUSTER_2_CONTEXT_NAME}" \ 13 --member-cluster-namespace="${MDB_NAMESPACE}" \ 14 --central-cluster-namespace="${OPERATOR_NAMESPACE}" \ 15 --create-service-account-secrets \ 16 --install-database-roles=true \ 17 --image-pull-secrets=image-registries-secret
Kubernetes用のMongoDB Helm Charts を追加します。
MongoDB Helm Charts for Kubernetesリポジトリを Helm に追加します。
1 helm repo add mongodb https://mongodb.github.io/helm-charts 2 helm repo update mongodb 3 helm search repo "${OFFICIAL_OPERATOR_HELM_CHART}"
Kubernetes 演算子 を配置します。
Kubernetes用のMongoDB Helm Charts を使用して、 Kubernetes演算子を配置します。
1 helm upgrade --install \ 2 --debug \ 3 --kube-context "${K8S_CLUSTER_0_CONTEXT_NAME}" \ 4 mongodb-kubernetes-operator-multi-cluster \ 5 "${OPERATOR_HELM_CHART}" \ 6 --namespace="${OPERATOR_NAMESPACE}" \ 7 --set namespace="${OPERATOR_NAMESPACE}" \ 8 --set operator.namespace="${OPERATOR_NAMESPACE}" \ 9 --set operator.watchNamespace="${OM_NAMESPACE}\,${MDB_NAMESPACE}" \ 10 --set operator.name=mongodb-kubernetes-operator-multi-cluster \ 11 --set operator.createOperatorServiceAccount=false \ 12 --set operator.createResourcesServiceAccountsAndRoles=false \ 13 --set "multiCluster.clusters={${K8S_CLUSTER_0_CONTEXT_NAME},${K8S_CLUSTER_1_CONTEXT_NAME},${K8S_CLUSTER_2_CONTEXT_NAME}}" \ 14 --set "${OPERATOR_ADDITIONAL_HELM_VALUES:-"dummy=value"}" \ 15 --set operator.env=dev
MongoDB Controls for Kubernetes Operator のステータスを確認します。
1 kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${OPERATOR_NAMESPACE}" rollout status --timeout=2m deployment/mongodb-kubernetes-operator-multi-cluster 2 echo "Operator deployment in ${OPERATOR_NAMESPACE} namespace" 3 kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${OPERATOR_NAMESPACE}" get deployments 4 echo; echo "Operator pod in ${OPERATOR_NAMESPACE} namespace" 5 kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${OPERATOR_NAMESPACE}" get pods