使用此过程在多 Kubernetes 集群 MongoDB 部署中部署副本集,无需使用服务网格在成员 Kubernetes 集群之间建立外部连接。
作为使用此过程的替代方法,您可以使用多 Kubernetes 集群快速入门,其中使用了服务网格。
开始之前
完成先决条件,但不设置服务网格。 相反,请决定是否需要服务网格。 如果选择在没有服务网格的情况下进行部署,请使用外部域并配置 DNS 以启用外部连接。
在完成先决条件的过程中,为 TLS加密生成有效证书。要学习;了解更多信息,请参阅准备 TLS 加密连接。
部署MongoDB Ops Manager资源。
在多 Kubernetes集群MongoDB 部署中安装Kubernetes Operator。 请参阅多 Kubernetes 集群快速入门。
Overview
在没有服务网格的多 Kubernetes 集群 MongoDB 部署中,请使用以下MongoDBMultiCluster资源设置:
使用spec.clusterSpecList.externalAccess.externalService 设置,以便 Kubernetes 操作符 创建外部服务,并作为其默认配置的一部分,使用默认设置配置负载均衡器。将负载均衡器配置为具有TLS直通的 TCP 代理(负载均衡器中无 TLS 终止)。
自定义 Kubernetes Operator 为 Kubernetes 集群中每个 Pod 创建的外部服务。 使用spec.externalAccess中的全局“all-clusters”配置 设置和 Kubernetes 集群特定的覆盖在spec.clusterSpecList.externalAccess.externalService 设置。
在每个 Kubernetes 集群的spec.clusterSpecList.externalAccess.externalService.annotations中为负载均衡器指定特定于云提供商的注释。
在spec.clusterSpecList.externalAccess.externalDomain中指定外部域。 这允许 Kubernetes Operator 使用域后缀注册
mongod进程。 这将启用与多 Kubernetes 集群 MongoDB 部署中mongod进程的外部连接。
在没有服务网格的情况下部署 MongoDBMultiCluster 资源
以下过程将在副本集中的 MongoDB 主机之间以及客户端应用程序与 MongoDB 部署之间建立TLS加密连接。
为您的 MongoDBMultiCluster资源的 TLS 证书创建密钥。
运行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 通信的 TLS 密钥命名为 mdb-my-deployment-cert。此外,您必须将用于内部集群身份验证(如果已启用)的 TLS 密钥命名为 mdb-my-deployment-clusterfile。
复制并粘贴示例资源。
复制示例副本集YAML文件并将其粘贴到新的文本文件中。
更改文件的设置以匹配所需的副本集配置。
1 # Provides statefulSet override per cluster 2 3 apiVersion: mongodb.com/v1 4 kind: MongoDBMultiCluster 5 metadata: 6 name: multi-replica-set 7 spec: 8 version: 8.0.0 9 type: ReplicaSet 10 credentials: my-credentials 11 opsManager: 12 configMapRef: 13 name: my-project 14 externalAccess: 15 externalService: 16 annotations: 17 # Global cloud-specific annotations added to external services in all clusters 18 spec: 19 # ServiceSpec attributes to override in external services in all clusters 20 clusterSpecList: 21 - clusterName: cluster1.example.com 22 members: 2 23 externalAccess: 24 # Domain suffix that mongod processes will use in cluster1 25 externalDomain: cluster1.example.com 26 externalService: 27 annotations: 28 # Cloud-specific annotations for external services 29 spec: 30 # ServiceSpec attributes to override if necessary 31 - clusterName: cluster2.example.com 32 members: 1 33 externalAccess: 34 # Domain suffix that mongod processes will use in cluster2 35 externalDomain: cluster2.example.com 36 externalService: 37 annotations: 38 # Cloud-specific annotations for external services 39 spec: 40 # ServiceSpec attributes to override if necessary 41 - clusterName: cluster3.example.com 42 members: 1 43 externalAccess: 44 # Domain suffix that mongod processes will use in cluster3 45 externalDomain: cluster3.example.com 46 externalService: 47 annotations: 48 # Cloud-specific annotations for external services 49 spec: 50 # ServiceSpec attributes to override if necessary 51 52 ...
定义外部连接设置。
使用spec.externalAccess 属性指定会影响多 Kubernetes集群MongoDB 部署中所有集群的全局值 设置和特定于集群的覆盖(使用spec.clusterSpecList.externalAccess.externalService 设置。
当您在MongoDBMultiCluster资源规范中提供这些设置时,Kubernetes 操作符会为所有 Kubernetes 集群中的每个 Pod 创建外部服务。然后,您可以使用这些服务与部署中的所有mongod进程建立外部连接。
为每个 Kubernetes 成员集群定义一个外部域。
使用 spec.clusterSpecList.externalAccess.externalDomain 设置为每个成员集群定义一个外部域。
因此,Kubernetes 操作符根据以下约定在主机名下注册 Kubernetes 集群中的所有mongod进程:
<pod-name>.<externalDomain>
例如, mongod进程可能具有以下主机名: my-replica-set-0-0.cluster-1.example.com 。
根据您的偏好更改设置的值。
键 | 类型 | 说明 | 例子 |
|---|---|---|---|
字符串 |
| ||
字符串 | 此 Community 版的格式应为 重要提示:确保选择兼容的MongoDB Server版本。 兼容版本因MongoDB 数据库资源使用的基础映像而异。 要了解有关 MongoDB 版本控制的更多信息,请参阅 MongoDB 手册中的 MongoDB 版本控制。 |
| |
| 字符串 | 具有Ops Manager连接配置的 ConfigMap 的名称。 此值必须与待创建的资源位于同一命名空间。 重要提示:Kubernetes Operator 会跟踪该 ConfigMap 的任何更改并协调 |
|
| 字符串 |
|
|
| 整型 | 此集群中的成员数。 |
|
| 集合 | 可选。 为多 Kubernetes集群MongoDB 部署中集群的每个 StatefulSet 提供 StatefulSet 覆盖的配置。如果在 | 请参阅示例。 |
| 集合 | 可选。如果已指定,则为存储数据的持久卷提供基于每个集群的针对 VolumeClaim 模板默认存储大小的覆盖。 | 请参阅示例。 |
字符串 | 您创建的 Secret 名称,其将作为 Ops Manager API 身份验证凭证,以便 Kubernetes Operator 与 Ops Manager 进行通信。 持有凭证的Ops Manager Kubernetes Secret对象必须与要创建的资源位于同一命名空间中。 重要提示:Kubernetes Operator 会跟踪该 Secret 的任何更改并协调 |
| |
字符串 | 要创建的 |
|
为 MongoDBMultiCluster资源部署添加任何其他可接受的设置。
您还可以在对象规范中添加任何可选设置。请参阅多 Kubernetes 集群资源规范。
验证每个成员集群的外部连接。
检查所有成员集群的外部服务状态:
kubectl get services Kubernetes 应返回为所有成员集群中副本集的每个 Pod 创建的一个外部服务。
验证每个外部服务是否已向外部公开且可访问。 运行与以下示例类似的命令:
mongosh mongodb://my-replica-set-0-0.cluster-0.example.com:27017 \ -tls -tlsCAFile "issuer-ca.pem" 连接到
my-replica-set-0-0.cluster-0.example.com:27017应将客户端流量定向到名为my-replica-set-0-0-svc-external的外部服务,而该服务又将流量定向到mongod进程。为指定的外部域配置DNS区域,使其指向相应的外部服务。 此配置取决于您的环境或您使用的云提供商。
跟踪多 Kubernetes 集群 MongoDB 部署的状态。
要检查 MongoDBMultiCluster资源的状态,请在中央集群上使用以下命令:
kubectl get mdbmc <resource-name> -o yaml -w
设置 -w (观看) 标志后,当配置更改时,输出将立即刷新,直到状态阶段达到 Running 状态。要了解有关资源部署状态的详情,请参阅 Kubernetes Operator 故障排除。