Docs 菜单
Docs 主页
/
MongoDB Enterprise Kubernetes Operator
/

在没有服务网格的多 Kubernetes 集群中部署副本集

在此页面上

  • 开始之前
  • Overview
  • 在没有服务网格的情况下部署 MongoDBMultiCluster资源

使用此过程在多 Kubernetes 集群 MongoDB 部署中部署副本集,无需使用服务网格在成员 Kubernetes 集群之间建立外部连接。

作为使用此过程的替代方法,您可以使用多 Kubernetes 集群快速入门,其中使用了服务网格。

  • 了解多 Kubernetes 集群部署。

  • 查看多 Kubernetes 集群服务和工具列表。

  • 完成先决条件,但不设置服务网格。 相反,请决定是否需要服务网格。 如果选择在没有服务网格的情况下进行部署,请使用外部域并配置 DNS 以启用外部连接。

  • 作为完成先决条件的一部分,为 TLS加密生成有效证书。 要了解更多信息,请参阅准备 TLS 加密连接。

  • 部署MongoDB Ops Manager资源。

  • 在多 Kubernetes集群MongoDB 部署中安装Kubernetes Operator。 请参阅多 Kubernetes 集群快速入门。

在没有服务网格的多 Kubernetes 集群 MongoDB 部署中,使用以下 MongoDBMultiCluster资源设置:

以下过程将在副本集中的 MongoDB 主机之间以及客户端应用程序与 MongoDB 部署之间建立TLS加密连接。

1

运行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

2

运行kubectl命令将CA链接到MongoDBMultiCluster资源。 为MongoDBMultiCluster资源指定必须始终命名为ca-pemCA证书文件:

kubectl --context $MDB_CENTRAL_CLUSTER_FULL_NAME \
--namespace=<metadata.namespace> \
create configmap custom-ca -from-file=ca-pem=<your-custom-ca-file>
3

如果尚未执行此操作,请运行以下命令,以便在默认命名空间中的中央集群上运行所有kubectl命令。

kubectl config use-context $MDB_CENTRAL_CLUSTER_FULL_NAME
kubectl config set-context $(kubectl config current-context) \
--namespace=mongodb
4
  1. 复制示例副本集YAML文件并将其粘贴到新的文本文件中。

  2. 更改文件的设置以匹配所需的副本集配置。

1# Provides statefulSet override per cluster
2
3apiVersion: mongodb.com/v1
4kind: MongoDBMultiCluster
5metadata:
6 name: multi-replica-set
7spec:
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...
5

使用spec.externalAccess 属性指定会影响多 Kubernetes集群MongoDB 部署中所有集群的全局值 设置和特定于集群的覆盖(使用spec.clusterSpecList.externalAccess.externalService 设置。

当您在MongoDBMultiCluster资源规范中提供这些设置时,Kubernetes 操作符会为所有 Kubernetes 集群中的每个 Pod 创建外部服务。然后,您可以使用这些服务与部署中的所有mongod进程建立外部连接。

6

使用spec.clusterSpecList.externalAccess.externalDomain为每个成员集群定义一个外部域 设置。

因此,Kubernetes 操作符根据以下约定在主机名下注册 Kubernetes 集群中的所有mongod进程:

<pod-name>.<externalDomain>

例如, mongod进程可能具有以下主机名: my-replica-set-0-0.cluster-1.example.com

7
类型
说明
例子

字符串

MongoDBMultiCluster资源的标签。

资源名称必须少于或等于 44 个字符。

另请参阅Kubernetes文档中的 metadata.name 名称 。

multi-replica-set

字符串

MongoDBMultiCluster资源应运行的 MongoDB 版本。

Community 版的格式应为 X.Y.Z,Enterprise 版的格式应为 X.Y.Z-ent

重要提示:确保选择兼容的MongoDB Server版本。 兼容版本因MongoDB 数据库资源使用的基础映像而异。

要了解有关 MongoDB 版本控制的更多信息,请参阅 MongoDB 手册中的 MongoDB 版本控制

6.0.0-ent

spec
.opsManager
.configMapRef

字符串

ConfigMap 的名称MongoDB Ops Manager 连接配置。spec.cloudManager.configMapRef.name设置是此设置的别名,可以用来代替它。

此值必须与待创建的资源位于同一命名空间。

重要提示:Kubernetes Operator 会跟踪该 ConfigMap 的任何更改并协调 MongoDB 资源的状态。

<my-project>

spec
.clusterSpecList
.clusterName

字符串

MongoDBMultiCluster资源中集群的名称。

cluster1.example.com

spec
.clusterSpecList
.members

整型

此集群中的成员数。

2

spec
.clusterSpecList
.statefulSet
.spec

集合

可选。

StatefulSet 提供配置 覆盖多 Kubernetes集群MongoDB 部署中集群的每个 StatefulSet。如果在clusterSpecList下的单个集群级别指定,则覆盖整个多 Kubernetes集群MongoDB 部署的 StatefulSet 的全局配置。 请参阅 多 Kubernetes 集群资源规范 StatefulSet v1 apps Kubernetes文档。

请参阅示例。

spec
.clusterSpecList
.statefulSet
.spec
.volumeClaimTemplates
.spec

集合

可选。 如果已指定,则为每个集群覆盖 卷 声明模板 的默认存储大小 ,用于存储数据的持久卷。

请参阅示例。

字符串

创建的 Secret 名称,其将作为 Ops Manager API 身份验证凭证,以便 Kubernetes Operator 与 Ops Manager 进行通信。

持有凭证的 Ops Manager Kubernetes Secret 对象必须与您要创建的资源位于同一个命名空间中。

重要提示:Kubernetes Operator 会跟踪该 Secret 的任何更改并协调 MongoDB 资源的状态。

<mycredentials>

字符串

要创建的MongoDB资源的类型。 此字段唯一支持的值为ReplicaSet 。 请参阅限制。

ReplicaSet

8

您还可以为 对象 添加任何可选设置 规范。请参阅多 Kubernetes 集群资源规范。

9
10

在任意目录中,调用以下 Kubernetes 命令来创建副本集:

kubectl apply -f <replica-set-conf>.yaml
11
  1. 检查所有成员集群的外部服务状态:

    kubectl get services

    Kubernetes 应返回为所有成员集群中副本集的每个 Pod 创建的一个外部服务。

  2. 验证每个外部服务是否已向外部公开且可访问。 运行与以下示例类似的命令:

    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进程。

  3. 为指定的外部域配置DNS区域,使其指向相应的外部服务。 此配置取决于您的环境或您使用的云提供商。

12

要检查MongoDBMultiCluster资源的状态,请在中央集群上使用以下命令:

kubectl get mdbmc <resource-name> -o yaml -w

设置 -w (观看) 标志后,当配置更改时,输出将立即刷新,直到状态阶段达到 Running 状态。要了解有关资源部署状态的详情,请参阅 Kubernetes Operator 故障排除

后退

部署资源