Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs 菜单
Docs 主页
/
Enterprise Kubernetes Operator
/

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

使用此过程在多 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

字符串

具有MongoDB Ops Manager连接配置的 ConfigMap 的名称。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

集合

可选。

为多 Kubernetes集群MongoDB 部署中集群的每个 StatefulSet 提供 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 故障排除

后退

部署资源

在此页面上