对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

在没有服务网格的情况下部署 Kubernetes 操作符

为了跨多个Kubernetes集群部署MongoDB资源的多个实例,您首先需要将Kubernetes Operator部署到一个Kubernetes集群。将Kubernetes Operator 部署到操作符 Kubernetes集群后,您可以通过对操作符 Kubernetes集群应用更新来创建和管理所有Kubernetes集群中的所有MongoDB资源。

在开始以下过程之前,请执行以下操作:

  • 安装 kubectl

  • 完成 GKE 集群程序 或同等程序。

  • 完成 TLS 证书程序 或同等程序。

  • 完成 Istio 服务网格程序 或同等程序。

  • 安装 kubectl mongodb 插件。要安装 kubectl mongodb 插件:

    1

    从MongoDB Controllers for Kubernetes Operator 存储库的发布页面下载所需的Kubernetes Operator包版本。

    包的名称使用以下模式: kubectl-mongodb_{{ .Version }}_{{ .Os }}_{{ .Arch }}.tar.gz

    使用以下包之一:

    • kubectl-mongodb_{{ .Version }}_darwin_amd64.tar.gz

    • kubectl-mongodb_{{ .Version }}_darwin_arm64.tar.gz

    • kubectl-mongodb_{{ .Version }}_linux_amd64.tar.gz

    • kubectl-mongodb_{{ .Version }}_linux_arm64.tar.gz

    2

    解压软件包,如以下示例所示:

    tar -zxvf kubectl-mongodb_<version>_darwin_amd64.tar.gz
    3

    在解压缩的目录中找到kubectl-mongodb二进制文件,并将其移动到 Kubernetes 操作符 用户的 PATH 内的所需目标,如以下示例所示:

    mv kubectl-mongodb /usr/local/bin/kubectl-mongodb

    现在,您可以使用以下命令运行kubectl mongodb插件:

    kubectl mongodb multicluster setup
    kubectl mongodb multicluster recover

    要了解有关支持标志的更多信息,请参阅MongoDB kubectl 插件参考资料。

  • 根据需要更新并设立以下 env_variables.sh文件中定义的环境变量。

    1# Namespace in which Ops Manager and AppDB will be deployed
    2export OM_NAMESPACE="mongodb-om"
    3# Namespace in which the operator will be installed
    4export OPERATOR_NAMESPACE="mongodb-operator"
    5# Namespace in which MongoDB resources will be deployed
    6export MDB_NAMESPACE="mongodb"
    7
    8# comma-separated key=value pairs for additional parameters passed to the helm-chart installing the operator
    9export OPERATOR_ADDITIONAL_HELM_VALUES="${OPERATOR_ADDITIONAL_HELM_VALUES:-""}"
    10
    11export OFFICIAL_OPERATOR_HELM_CHART="mongodb/mongodb-kubernetes"
    12export OPERATOR_HELM_CHART="${OPERATOR_HELM_CHART:-${OFFICIAL_OPERATOR_HELM_CHART}}"

您可以在MongoDB Kubernetes Operator存储库中找到所有包含的源代码。

1
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}"
2
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
3

运行以下命令以配置Kubernetes集群。

1kubectl 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
10kubectl 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
4

适用于 Kubernetes 的 MongoDB Helm Charts 存储库添加到 Helm。

1helm repo add mongodb https://mongodb.github.io/helm-charts
2helm repo update mongodb
3helm search repo "${OFFICIAL_OPERATOR_HELM_CHART}"
5

使用 适用于 Kubernetes 的 MongoDB Helm Charts 部署 Kubernetes Operator。

1helm 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
6
1kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${OPERATOR_NAMESPACE}" rollout status --timeout=2m deployment/mongodb-kubernetes-operator-multi-cluster
2echo "Operator deployment in ${OPERATOR_NAMESPACE} namespace"
3kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${OPERATOR_NAMESPACE}" get deployments
4echo; echo "Operator pod in ${OPERATOR_NAMESPACE} namespace"
5kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${OPERATOR_NAMESPACE}" get pods
给本页内容打分