多 Kubernetes 集群快速入门
在此页面上
使用快速入门,使用 GKE (Google Kubernetes Engine) 和 Istio 服务网格跨三个Kubernetes成员集群部署MongoDB副本集。
开始之前:
注意
以下过程将多 Kubernetes集群MongoDB 部署的范围限定为单个 命名空间 命名为mongodb
。您可以配置多 Kubernetes集群MongoDB 部署,以监视多个命名空间或所有命名空间中的资源。
喜欢通过观看视频来学习?
观看此视频教程,演示如何创建多 Kubernetes 集群 MongoDB 部署。
时长:12 分钟
先决条件
在使用快速入门创建多 Kubernetes集群MongoDB 部署之前,请完成以下任务:
查看一般先决条件
在继续之前,确保您满足一般先决条件。 要学习;了解更多信息,请参阅一般先决条件。
设置环境变量和 GKE 区域
设置具有集群名称和 可用 GKE 区域 的环境变量 部署集群的位置,如以下示例:
export MDB_GKE_PROJECT={GKE project name} export MDB_CENTRAL_CLUSTER_ZONE="us-west1-a" export MDB_CLUSTER_1_ZONE="us-west1-b" export MDB_CLUSTER_2_ZONE="us-east1-b" export MDB_CLUSTER_3_ZONE="us-central1-a" export MDB_CENTRAL_CLUSTER_FULL_NAME="gke_${MDB_GKE_PROJECT}_${MDB_CENTRAL_CLUSTER_ZONE}_${MDB_CENTRAL_CLUSTER}" export MDB_CLUSTER_1_FULL_NAME="gke_${MDB_GKE_PROJECT}_${MDB_CLUSTER_1_ZONE}_${MDB_CLUSTER_1}" export MDB_CLUSTER_2_FULL_NAME="gke_${MDB_GKE_PROJECT}_${MDB_CLUSTER_2_ZONE}_${MDB_CLUSTER_2}" export MDB_CLUSTER_3_FULL_NAME="gke_${MDB_GKE_PROJECT}_${MDB_CLUSTER_3_ZONE}_${MDB_CLUSTER_3}"
设置 GKE 集群
设置 GKE (Google Kubernetes Engine) 集群:
设置您的 Google Cloud Platform 帐户。
如果尚未执行此操作,请创建一个Google Cloud Platform 项目,启用项目计费功能,启用Artifact 注册表和 GKE API,然后按照shell GoogleKubernetes Engine 快速入门 中的相关步骤启动 Cloud 在Google Cloud Platform 文档中。
创建中央集群和成员集群。
创建一个中央集群 和一个或多个成员集群,并指定 GKE 区域、节点数和实例类型,如下例所示:
gcloud container clusters create $MDB_CENTRAL_CLUSTER \ --zone=$MDB_CENTRAL_CLUSTER_ZONE \ --num-nodes=5 \ --machine-type "e2-standard-2"
gcloud container clusters create $MDB_CLUSTER_1 \ --zone=$MDB_CLUSTER_1_ZONE \ --num-nodes=5 \ --machine-type "e2-standard-2"
gcloud container clusters create $MDB_CLUSTER_2 \ --zone=$MDB_CLUSTER_2_ZONE \ --num-nodes=5 \ --machine-type "e2-standard-2"
gcloud container clusters create $MDB_CLUSTER_3 \ --zone=$MDB_CLUSTER_3_ZONE \ --num-nodes=5 \ --machine-type "e2-standard-2"
获取中央集群和成员集群的用户身份验证档案
获取中央 Kubernetes 集群和成员 Kubernetes 集群的用户身份验证档案并保存档案。 稍后,您将使用这些档案在这些集群上运行kubectl
命令。
运行以下命令:
gcloud container clusters get-credentials $MDB_CENTRAL_CLUSTER \ --zone=$MDB_CENTRAL_CLUSTER_ZONE gcloud container clusters get-credentials $MDB_CLUSTER_1 \ --zone=$MDB_CLUSTER_1_ZONE gcloud container clusters get-credentials $MDB_CLUSTER_2 \ --zone=$MDB_CLUSTER_2_ZONE gcloud container clusters get-credentials $MDB_CLUSTER_3 \ --zone=$MDB_CLUSTER_3_ZONE
部署 MongoDBMultiCluster 资源
根据您是否要使用 TLS证书加密多 Kubernetes 集群 MongoDB 部署中的副本集连接,选择相应的标签页。
您可以在此 TLS-Encrypted Connections标签页中使用以下步骤:
部署
MongoDBMultiCluster
资源为
MongoDBMultiCluster
资源续订 TLS 证书
这些过程在副本集的MongoDB主机之间以及客户端应用程序与MongoDB部署之间建立TLS加密连接。
在开始之前,您必须拥有有效的TLS加密证书。
为 资源的 TLSMongoDBMultiCluster
证书创建密钥。
运行kubectl
命令以创建用于存储MongoDBMultiCluster
资源证书的新密钥:
kubectl --context $MDB_CENTRAL_CLUSTER_FULL_NAME \ --namespace=<metadata.namespace> \ create secret tls <prefix>-<metadata.name>-cert \ --cert=<resource-tls-cert> \ --key=<resource-tls-key>
注意
您必须在密钥前面加上 <prefix>-<metadata.name>
作为前缀。
示例,如果您将部署调用为my-deployment
并将前缀设立为mdb
,则必须为客户端 TLS 通信 命名 TLSmdb-my-deployment-cert
密钥。此外,您必须将用于内部集群身份验证(如果已启用)的TLS密钥命名为mdb-my-deployment-clusterfile
。
运行kubectl mongodb
插件。
默认情况下,Kubernetes 操作符的作用域为mongodb
命名空间。当您运行以下命令时, kubectl mongodb
插件:
创建一个中央集群、三个成员集群和一个 命名空间
mongodb
在每个集群中标记为 。创建一个硬编码名称为
mongodb-enterprise-operator-member-list
的默认 ConfigMap,其中包含所有成员集群。 您无法更改 ConfigMap 的名称。
运行kubectl mongodb
插件:
kubectl mongodb multicluster setup \ --central-cluster="${MDB_CENTRAL_CLUSTER_FULL_NAME}" \ --member-clusters="${MDB_CLUSTER_1_FULL_NAME},${MDB_CLUSTER_2_FULL_NAME},${MDB_CLUSTER_3_FULL_NAME}" \ --member-cluster-namespace="mongodb" \ --central-cluster-namespace="mongodb" \ --create-service-account-secrets \ --install-database-roles=true
可选:在每个成员集群中设置 Istio 注入 Webhook。
如果您使用的是 Istio,请在中央集群上运行以下命令,并指定部署中每个成员集群的上下文。 启用 sidecar 注入 在 Istio 中,以下命令将istio-injection=enabled
mongodb
标签添加到每个成员集群上的 命名空间。如果使用其他服务网格,请将其配置为处理创建的命名空间中的网络流量。
kubectl label \ --context=$MDB_CLUSTER_1_FULL_NAME \ namespace mongodb \ istio-injection=enabled
kubectl label \ --context=$MDB_CLUSTER_2_FULL_NAME \ namespace mongodb \ istio-injection=enabled
kubectl label \ --context=$MDB_CLUSTER_3_FULL_NAME \ namespace mongodb \ istio-injection=enabled
在中央集群中部署 MongoDB Enterprise Kubernetes Operator。
使用 Helm 或kubectl
在mongodb
命名空间中的中央集群中部署 MongoDB Enterprise Kubernetes Operator。
将适用于 Kubernetes 的 MongoDB Helm Charts 存储库添加到 Helm。
helm repo add mongodb https://mongodb.github.io/helm-charts 使用 适用于 Kubernetes 的 MongoDB Helm Charts 部署 Kubernetes Operator。
helm upgrade \ --install \ mongodb-enterprise-operator-multi-cluster \ mongodb/enterprise-operator \ --namespace mongodb \ --set namespace=mongodb \ --version <mongodb-kubernetes-operator-version> \ --set operator.name=mongodb-enterprise-operator-multi-cluster \ --set operator.createOperatorServiceAccount=false \ --set operator.createResourcesServiceAccountsAndRoles=false \ --set "multiCluster.clusters={$MDB_CLUSTER_1_FULL_NAME,$MDB_CLUSTER_2_FULL_NAME,$MDB_CLUSTER_3_FULL_NAME}" \ --set multiCluster.performFailover=false
应用Kubernetes Operator 自定义资源。
kubectl apply -f https://raw.githubusercontent.com/mongodb/mongodb-enterprise-kubernetes/master/crds.yaml 下载Kubernetes Operator YAML 模板。
curl https://raw.githubusercontent.com/mongodb/mongodb-enterprise-kubernetes/master/mongodb-enterprise-multi-cluster.yaml -o operator.yaml 可选:自定义Kubernetes Operator YAML 模板。
要学习;了解可选的 Kubernetes Operator 安装设置,请参阅 MongoDB Enterprise Kubernetes Operator kubectl 和 oc 安装设置。
应用Kubernetes Operator YAML文件。
kubectl apply -f operator.yaml 验证Kubernetes Operator 是否已部署。
要验证 Kubernetes 操作符是否正确安装,请运行以下命令并验证输出:
kubectl describe deployments mongodb-enterprise-operator -n <metadata.namespace> oc describe deployments mongodb-enterprise-operator -n <metadata.namespace> 默认情况下,部署存在于
mongodb
命名空间中。 如果出现以下错误消息,请确保使用正确的命名空间:Error from server (NotFound): deployments.apps "mongodb-enterprise-operator" not found 要对 Kubernetes 操作符进行故障排除,请参阅查看 Kubernetes 操作符的日志和其他故障排除主题。
重要
如果需要删除 Kubernetes 操作符 或命名空间,则必须首先删除 MongoDB 资源。
创建与 Ops Manager 一起使用的密钥并创建 ConfigMap。
创建密钥,以便Kubernetes Operator 可以在MongoDB Ops Manager项目中创建和更新对象。 要了解更多信息,请参阅为 Kubernetes Operator 创建档案。
创建 ConfigMap,将Kubernetes Operator 链接到MongoDB Ops Manager项目。 要学习;了解更多信息,请参阅使用 ConfigMap 创建一个项目。
部署MongoDBMultiCluster
资源。
设置spec.credentials
、 spec.opsManager.configMapRef.name
和安全设置,并部署MongoDBMultiCluster
资源。 duplicateServiceObjects
在以下代码示例中,将 设立为true
以启用 DNS 代理 在 Istio 中。
注意
为了通过 Istio 服务网格启用跨集群 DNS 解析,本教程为每个 Kubernetes Pod 创建具有单个 ClusterIP 地址的服务对象。
kubectl apply -f - <<EOF apiVersion: mongodb.com/v1 kind: MongoDBMultiCluster metadata: name: multi-replica-set spec: version: 6.0.0-ent type: ReplicaSet persistent: false duplicateServiceObjects: true credentials: my-credentials opsManager: configMapRef: name: my-project security: certsSecretPrefix: <prefix> tls: ca: custom-ca clusterSpecList: - clusterName: ${MDB_CLUSTER_1_FULL_NAME} members: 3 - clusterName: ${MDB_CLUSTER_2_FULL_NAME} members: 2 - clusterName: ${MDB_CLUSTER_3_FULL_NAME} members: 3 EOF
Kubernetes Operator 将您在前面步骤中创建的带有CA的 ConfigMap 复制到每个成员集群,生成连接的PEM密钥,并将其分发到成员集群。
验证MongoDBMultiCluster
资源是否运行。
对于成员集群,运行以下命令验证 MongoDB Pod 是否处于运行状态:
kubectl get pods \ --context=$MDB_CLUSTER_1_FULL_NAME \ --namespace mongodb kubectl get pods \ --context=$MDB_CLUSTER_2_FULL_NAME \ --namespace mongodb kubectl get pods \ --context=$MDB_CLUSTER_3_FULL_NAME \ --namespace mongodb 在中央集群中,运行以下命令以验证
MongoDBMultiCluster
资源是否处于运行状态:kubectl --context=$MDB_CENTRAL_CLUSTER_FULL_NAME \ --namespace mongodb \ get mdbmc multi-replica-set -o yaml -w
为 MongoDBMultiCluster 资源续订 TLS 证书
使用以下过程定期续订TLS证书。
更新 MongoDBMultiCluster
资源的密钥。
运行此kubectl
命令以更新现有 密钥 存储MongoDBMultiCluster
资源的证书:
kubectl --context $MDB_CENTRAL_CLUSTER_FULL_NAME \ --namespace=<metadata.namespace> \ create secret tls <prefix>-<metadata.name>-cert \ --cert=<resource-tls-cert> \ --key=<resource-tls-key> \ --dry-run=client \ -o yaml | kubectl apply -f -
此过程不会加密副本集MongoDB主机之间的连接,以及客户端应用程序与MongoDB部署之间的连接。
运行kubectl mongodb
插件。
默认情况下,Kubernetes 操作符的作用域为mongodb
命名空间。当您运行以下命令时, kubectl mongodb
插件:
创建一个中央集群、三个成员集群和一个 命名空间
mongodb
在每个集群中标记为 。创建一个硬编码名称为
mongodb-enterprise-operator-member-list
的默认 ConfigMap,其中包含所有成员集群。 您无法更改 ConfigMap 的名称。
运行kubectl mongodb
插件:
kubectl mongodb multicluster setup \ --central-cluster="${MDB_CENTRAL_CLUSTER_FULL_NAME}" \ --member-clusters="${MDB_CLUSTER_1_FULL_NAME},${MDB_CLUSTER_2_FULL_NAME},${MDB_CLUSTER_3_FULL_NAME}" \ --member-cluster-namespace="mongodb" \ --central-cluster-namespace="mongodb" \ --create-service-account-secrets \ --install-database-roles=true
可选:在每个成员集群中设置 Istio 注入 Webhook。
如果您使用的是 Istio,请在中央集群上运行以下命令,并指定部署中每个成员集群的上下文。 启用 sidecar 注入 在 Istio 中,以下命令将istio-injection=enabled
mongodb
标签添加到每个成员集群上的 命名空间。如果使用其他服务网格,请将其配置为处理创建的命名空间中的网络流量。
kubectl label \ --context=$MDB_CLUSTER_1_FULL_NAME \ namespace mongodb \ istio-injection=enabled
kubectl label \ --context=$MDB_CLUSTER_2_FULL_NAME \ namespace mongodb \ istio-injection=enabled
kubectl label \ --context=$MDB_CLUSTER_3_FULL_NAME \ namespace mongodb \ istio-injection=enabled
在中央集群中部署 MongoDB Enterprise Kubernetes Operator。
使用 Helm 或kubectl
在mongodb
命名空间中的中央集群中部署 MongoDB Enterprise Kubernetes Operator。
将适用于 Kubernetes 的 MongoDB Helm Charts 存储库添加到 Helm。
helm repo add mongodb https://mongodb.github.io/helm-charts 使用 适用于 Kubernetes 的 MongoDB Helm Charts 部署 Kubernetes Operator。
helm upgrade \ --install \ mongodb-enterprise-operator-multi-cluster \ mongodb/enterprise-operator \ --namespace mongodb \ --set namespace=mongodb \ --version <mongodb-kubernetes-operator-version> \ --set operator.name=mongodb-enterprise-operator-multi-cluster \ --set operator.createOperatorServiceAccount=false \ --set operator.createResourcesServiceAccountsAndRoles=false \ --set "multiCluster.clusters={$MDB_CLUSTER_1_FULL_NAME,$MDB_CLUSTER_2_FULL_NAME,$MDB_CLUSTER_3_FULL_NAME}" \ --set multiCluster.performFailover=false
应用Kubernetes Operator 自定义资源。
kubectl apply -f https://raw.githubusercontent.com/mongodb/mongodb-enterprise-kubernetes/master/crds.yaml 下载Kubernetes Operator YAML 模板。
curl https://raw.githubusercontent.com/mongodb/mongodb-enterprise-kubernetes/master/mongodb-enterprise-multi-cluster.yaml -o operator.yaml 可选:自定义Kubernetes Operator YAML 模板。
要学习;了解可选的 Kubernetes Operator 安装设置,请参阅 MongoDB Enterprise Kubernetes Operator kubectl 和 oc 安装设置。
应用Kubernetes Operator YAML文件。
kubectl apply -f operator.yaml 验证Kubernetes Operator 是否已部署。
要验证 Kubernetes 操作符是否正确安装,请运行以下命令并验证输出:
kubectl describe deployments mongodb-enterprise-operator -n <metadata.namespace> oc describe deployments mongodb-enterprise-operator -n <metadata.namespace> 默认情况下,部署存在于
mongodb
命名空间中。 如果出现以下错误消息,请确保使用正确的命名空间:Error from server (NotFound): deployments.apps "mongodb-enterprise-operator" not found 要对 Kubernetes 操作符进行故障排除,请参阅查看 Kubernetes 操作符的日志和其他故障排除主题。
重要
如果需要删除 Kubernetes 操作符 或命名空间,则必须首先删除 MongoDB 资源。
创建与 Ops Manager 一起使用的密钥并创建 ConfigMap。
创建密钥,以便Kubernetes Operator 可以在MongoDB Ops Manager项目中创建和更新对象。 要了解更多信息,请参阅为 Kubernetes Operator 创建档案。
创建 ConfigMap,将Kubernetes Operator 链接到MongoDB Ops Manager项目。 要学习;了解更多信息,请参阅使用 ConfigMap 创建一个项目。
部署MongoDBMultiCluster
资源。
设置spec.credentials
、 spec.opsManager.configMapRef.name
和安全设置,并部署MongoDBMultiCluster
资源。 duplicateServiceObjects
在以下代码示例中,将 设立为true
以启用 DNS 代理 在 Istio 中。
注意
为了通过 Istio 服务网格启用跨集群 DNS 解析,本教程为每个 Kubernetes Pod 创建具有单个 ClusterIP 地址的服务对象。
kubectl apply -f - <<EOF apiVersion: mongodb.com/v1 kind: MongoDBMultiCluster metadata: name: multi-replica-set spec: version: 6.0.0-ent type: ReplicaSet persistent: false duplicateServiceObjects: true credentials: my-credentials opsManager: configMapRef: name: my-project security: certsSecretPrefix: <prefix> tls: ca: custom-ca clusterSpecList: - clusterName: ${MDB_CLUSTER_1_FULL_NAME} members: 3 - clusterName: ${MDB_CLUSTER_2_FULL_NAME} members: 2 - clusterName: ${MDB_CLUSTER_3_FULL_NAME} members: 3 EOF
Kubernetes Operator 将您在前面步骤中创建的带有CA的 ConfigMap 复制到每个成员集群,生成连接的PEM密钥,并将其分发到成员集群。
验证MongoDBMultiCluster
资源是否运行。
对于成员集群,运行以下命令验证 MongoDB Pod 是否处于运行状态:
kubectl get pods \ --context=$MDB_CLUSTER_1_FULL_NAME \ --namespace mongodb kubectl get pods \ --context=$MDB_CLUSTER_2_FULL_NAME \ --namespace mongodb kubectl get pods \ --context=$MDB_CLUSTER_3_FULL_NAME \ --namespace mongodb 在中央集群中,运行以下命令以验证
MongoDBMultiCluster
资源是否处于运行状态:kubectl --context=$MDB_CENTRAL_CLUSTER_FULL_NAME \ --namespace mongodb \ get mdbmc multi-replica-set -o yaml -w
后续步骤
跨三个 Kubernetes 集群部署 MongoDB 副本集后,您可以添加数据库用户,以便连接到 MongoDB database。请参阅托管数据库用户。