複数のKubernetesクラスターにMongoDBリソースの複数のインスタンスを配置するには、まずKubernetes Operator をKubernetesクラスターの 1 つに配置する必要があります。Kubernetes Operator が中央のKubernetesクラスターに配置されると、中央のKubernetesクラスターにアップデートを適用することで、すべてのKubernetesクラスターにわたってMongoDBリソースを作成および管理できます。
前提条件
次の手順を開始する前に、次のアクションを実行してください。
kubectlをインストールします。Helm をインストールします。
GKE クラスターの手順または同等の手順を完了します。
TLS 証明書 の手順または同等の手順を実行します。
Istio Service メッシュ手順または同等の手順を完了します。
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 setupkubectl mongodb multicluster recoverサポートされているフラグの詳細については、 MongoDB kubernetes プラグイン リファレンス を参照してください。
必要に応じて を更新し、次の
env_variables.shファイルで定義されている環境変数を設定します。# Namespace in which Ops Manager and AppDB will be deployedexport OM_NAMESPACE="mongodb-om"# Namespace in which the operator will be installedexport OPERATOR_NAMESPACE="mongodb-operator"# Namespace in which MongoDB resources will be deployedexport MDB_NAMESPACE="mongodb" # comma-separated key=value pairs for additional parameters passed to the helm-chart installing the operatorexport OPERATOR_ADDITIONAL_HELM_VALUES="${OPERATOR_ADDITIONAL_HELM_VALUES:-""}" export OFFICIAL_OPERATOR_HELM_CHART="mongodb/mongodb-kubernetes"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.yamlkubectl --context "${K8S_CLUSTER_1_CONTEXT_NAME}" -n "${OM_NAMESPACE}" apply -f secrets/image-registries-secret.yamlkubectl --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.yamlkubectl --context "${K8S_CLUSTER_1_CONTEXT_NAME}" -n "${MDB_NAMESPACE}" apply -f secrets/image-registries-secret.yamlkubectl --context "${K8S_CLUSTER_2_CONTEXT_NAME}" -n "${MDB_NAMESPACE}" apply -f secrets/image-registries-secret.yamlKubernetesクラスターを構成します。
次のコマンドを実行して、 Kubernetesクラスターを構成します。
kubectl mongodb multicluster setup \ --central-cluster="${K8S_CLUSTER_0_CONTEXT_NAME}" \ --member-clusters="${K8S_CLUSTER_0_CONTEXT_NAME},${K8S_CLUSTER_1_CONTEXT_NAME},${K8S_CLUSTER_2_CONTEXT_NAME}" \ --member-cluster-namespace="${OM_NAMESPACE}" \ --central-cluster-namespace="${OPERATOR_NAMESPACE}" \ --create-service-account-secrets \ --install-database-roles=true \ --image-pull-secrets=image-registries-secret
kubectl mongodb multicluster setup \ --central-cluster="${K8S_CLUSTER_0_CONTEXT_NAME}" \ --member-clusters="${K8S_CLUSTER_0_CONTEXT_NAME},${K8S_CLUSTER_1_CONTEXT_NAME},${K8S_CLUSTER_2_CONTEXT_NAME}" \ --member-cluster-namespace="${MDB_NAMESPACE}" \ --central-cluster-namespace="${OPERATOR_NAMESPACE}" \ --create-service-account-secrets \ --install-database-roles=true \ --image-pull-secrets=image-registries-secretKubernetes用のMongoDB Helm Charts を追加します。
MongoDB Helm Charts for Kubernetesリポジトリを Helm に追加します。
helm repo add mongodb https://mongodb.github.io/helm-chartshelm repo update mongodbhelm search repo "${OFFICIAL_OPERATOR_HELM_CHART}"Kubernetes 演算子 を配置します。
Kubernetes用のMongoDB Helm Charts を使用して、 Kubernetes演算子を配置します。
helm upgrade --install \ --debug \ --kube-context "${K8S_CLUSTER_0_CONTEXT_NAME}" \ mongodb-kubernetes-operator-multi-cluster \ "${OPERATOR_HELM_CHART}" \ --namespace="${OPERATOR_NAMESPACE}" \ --set namespace="${OPERATOR_NAMESPACE}" \ --set operator.namespace="${OPERATOR_NAMESPACE}" \ --set operator.watchNamespace="${OM_NAMESPACE}\,${MDB_NAMESPACE}" \ --set operator.name=mongodb-kubernetes-operator-multi-cluster \ --set operator.createOperatorServiceAccount=false \ --set operator.createResourcesServiceAccountsAndRoles=false \ --set "multiCluster.clusters={${K8S_CLUSTER_0_CONTEXT_NAME},${K8S_CLUSTER_1_CONTEXT_NAME},${K8S_CLUSTER_2_CONTEXT_NAME}}" \ --set "${OPERATOR_ADDITIONAL_HELM_VALUES:-"dummy=value"}" \ --set operator.env=devMongoDB Kubernetes Operator のステータスを確認します。
kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${OPERATOR_NAMESPACE}" rollout status --timeout=2m deployment/mongodb-kubernetes-operator-multi-clusterecho "Operator deployment in ${OPERATOR_NAMESPACE} namespace"kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${OPERATOR_NAMESPACE}" get deploymentsecho; echo "Operator pod in ${OPERATOR_NAMESPACE} namespace"kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${OPERATOR_NAMESPACE}" get pods