为了跨多个Kubernetes集群部署MongoDB资源的多个实例,您首先需要将Kubernetes Operator部署到一个Kubernetes集群。将Kubernetes Operator 部署到中央Kubernetes集群后,您可以通过对中央Kubernetes集群应用更新来创建和管理所有Kubernetes集群中的所有MongoDB资源。
先决条件
在开始以下过程之前,请执行以下操作:
安装
kubectl。完成 GKE 集群程序 或同等程序。
完成 TLS 证书程序 或同等程序。
完成 Istio 服务网格程序 或同等程序。
安装
kubectl mongodb插件。要安装kubectl mongodb插件:1下载所需的 Kubernetes Operator 软件包版本。
从MongoDB Controllers for Kubernetes Operator 存储库的发布页面下载所需的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
3找到
kubectl mongodb插件二进制文件并将其复制到所需的目标。在解压缩的目录中找到
kubectl-mongodb二进制文件,并将其移动到 Kubernetes 操作符 用户的 PATH 内的所需目标,如以下示例所示:mv kubectl-mongodb /usr/local/bin/kubectl-mongodb现在,您可以使用以下命令运行
kubectl mongodb插件:kubectl mongodb multicluster setupkubectl mongodb multicluster recover要了解有关支持标志的更多信息,请参阅MongoDB kubectl 插件参考资料。
根据需要更新并设立以下
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}}"
源代码
您可以在MongoDB Kubernetes Operator存储库中找到所有包含的源代码。
步骤
在每个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.yaml配置Kubernetes集群。
运行以下命令以配置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-secret为Kubernetes添加MongoDB Helm Charts 。
将适用于 Kubernetes 的 MongoDB Helm Charts 存储库添加到 Helm。
helm repo add mongodb https://mongodb.github.io/helm-chartshelm repo update mongodbhelm search repo "${OFFICIAL_OPERATOR_HELM_CHART}"部署Kubernetes Operator。
使用适用于Kubernetes的MongoDB Helm Charts来部署Kubernetes Operator。
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=dev检查MongoDB 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