在没有服务网格的多 Kubernetes 集群中部署副本集
使用此过程在多 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加密连接。
为 资源的 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
。
复制并粘贴示例资源。
复制示例副本集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: 6.0.0-ent 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
。
根据您的偏好更改设置的值。
键 | 类型 | 说明 | 例子 |
---|---|---|---|
字符串 | multi-replica-set | ||
字符串 | 此 Community 版的格式应为 重要提示:确保选择兼容的MongoDB Server版本。 兼容版本因MongoDB 数据库资源使用的基础映像而异。 要了解有关 MongoDB 版本控制的更多信息,请参阅 MongoDB 手册中的 MongoDB 版本控制。 | 6.0.0-ent | |
字符串 | ConfigMap 的名称MongoDB Ops Manager 连接配置。 此值必须与待创建的资源位于同一命名空间。 重要提示:Kubernetes Operator 会跟踪该 ConfigMap 的任何更改并协调 | <my-project> | |
spec .clusterSpecList .clusterName | 字符串 | MongoDBMultiCluster 资源中集群的名称。 | cluster1.example.com |
spec .clusterSpecList .members | 整型 | 此集群中的成员数。 | 2 |
spec .clusterSpecList .statefulSet .spec | 集合 | 可选。 为 StatefulSet 提供配置 覆盖多 Kubernetes集群MongoDB 部署中集群的每个 StatefulSet。如果在 | 请参阅示例。 |
spec .clusterSpecList .statefulSet .spec .volumeClaimTemplates .spec | 集合 | 可选。 如果已指定,则为每个集群覆盖 卷 声明模板 的默认存储大小 ,用于存储数据的持久卷。 | 请参阅示例。 |
字符串 | 您创建的 Secret 名称,其将作为 Ops Manager API 身份验证凭证,以便 Kubernetes Operator 与 Ops Manager 进行通信。 持有凭证的 Ops Manager Kubernetes Secret 对象必须与您要创建的资源位于同一个命名空间中。 重要提示:Kubernetes Operator 会跟踪该 Secret 的任何更改并协调 | <mycredentials> | |
字符串 | ReplicaSet |
为MongoDBMultiCluster
资源部署添加任何其他已接受的设置。
您还可以为 对象 添加任何可选设置 规范。请参阅多 Kubernetes 集群资源规范。
启动副本集部署。
在任意目录中,调用以下 Kubernetes 命令来创建副本集:
kubectl apply -f <replica-set-conf>.yaml
验证每个成员集群的外部连接。
检查所有成员集群的外部服务状态:
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 故障排除。