暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

在Kubernetes中运行MongoDB:解决方案、优点和缺点

原创 eternity 2022-08-18
1548

在Kubernetes中运行MongoDB已成为常态。在Kubernetes中运行数据库的最常见用例是:

  • 创建专用数据库即服务(DBaaS)。
  • 维护一致的基础设施,使数据库和应用程序在同一平台上运行。
  • 避免供应商锁定,并能够利用Kubernetes和容器的强大功能在任何地方运行其数据库。
    有多种解决方案允许您在Kubernetes中运行MongoDB,在本文中,我们将比较这些解决方案,并回顾它们各自的优缺点。
    我们将审查的解决方案包括:
  • Bitnami Helm图表
  • KubeDB
  • MongoDB社区运营商
  • MongoDB的Percona操作员
    摘要和比较表可在我们的文档中找到。

Bitnami Helm图表

Bitnami于2019年被VMWare收购,以在Kubernetes部署各种应用程序而闻名。这里的关键词是部署,因为此解决方案中没有管理功能。
所有Bitnami Helm图表都在Apache 2.0许可证下,纯开源。Bitnami周围的社区相当大,非常活跃。

部署

安装通常分为两步:添加Helm存储库,然后部署图表。
添加存储库:

$ helm repo add bitnami https://charts.bitnami.com/bitnami

您可以通过值调整图表安装。我决定试用它,并部署一个副本集,而不是默认的独立设置:

$ helm install my-mongo bitnami/mongodb --set architecture="replicaset" --set replicaCount=2

此命令部署一个MongoDB副本集,其中包含两个节点和一个仲裁器。
值得注意的是,Github自述并不是唯一的文档,但是官方的Bitnami文档中有更多的示例和细节。

特征

管理功能不是此解决方案的主要部分,但可以水平扩展复制集(向其添加更多节点)和垂直扩展复制集中(向节点添加更多资源)。
mongodb exporter将监控表示为一个sidecar。度量参数部分对此进行了描述。这是一种简单的方法,对于大多数用例来说已经足够了。
我喜欢所有Bitnami Helm图表的地方在于,它们为您提供了很多灵活性,可以调整Kubernetes原语和组件:标签、注释、图像、资源等等。
如果我们研究该解决方案中与MongoDB相关的功能,有几个值得注意:
1.在数据库资源调配期间创建用户和数据库。这有点奇怪,您无法立即创建角色并分配它们。但这是一个不错的举动。
2.隐藏节点––在本文的任何其他解决方案中都找不到它。
3.TLS––您可以加密副本集节点之间的流量。很好的移动,但由于某些原因,它在默认情况下被禁用。
我没有找到任何关于支持的MongoDB版本的信息。最新的Helm chart版本部署了MongoDB 5.0。
您可以部署分片集群,但它是一个单独的掌舵图——MongoDB分片。但是,您仍然无法轻松将其与企业解决方案集成——比如LDAP或Hashicorp vault。至少这不会是一个简单的集成。

KubeDB

由AppsCode创建的KubeDB是一家瑞士军刀运营商,负责在Kubernetes部署各种数据库,包括MongoDB。
此解决方案遵循开放核心模型,在该模型中,免费提供有限的功能,但在购买许可证后会有一些好东西。在这里,您可以找到社区版本与企业版本的比较。
我们的审查重点将放在社区版本上,但我们将提到企业版本中提供的功能。

部署

我发现部署有点麻烦,因为它需要先下载许可证,即使对于社区版本也是如此。
添加Helm repo:

$ helm repo add appscode https://charts.appscode.com/stable/

安装操作器:

$ helm install kubedb appscode/kubedb \
 --version v2022.05.24 \
 --namespace kubedb --create-namespace \
 --set-file global.license=/path/to/the/license.txt

使用下面的命令部署数据库。值得一提的是,使用社区版本,您只能在演示名称空间中部署数据库。

Shell
$ kubectl create -f https://github.com/kubedb/docs/raw/v2022.05.24/docs/examples/mongodb/clustering/mongo-sharding.yaml

这将部署一个分片集群。您可以在github中找到大量示例。

特征

社区版几乎没有管理功能。您可以添加和删除资源和节点,因此只需执行基本的缩放,而无需执行其他操作。
备份、恢复、升级、加密等都仅在企业版中提供。
对于监控,KubeDB采用与Bitnami相同的方法,允许您将mongodb导出器容器部署为sidecar。在这里阅读更多。
当然,社区版的功能有限,不足以在生产中运行。同时,还有一些有趣的功能:

  • 一个操作员,多个数据库。我喜欢这种方法,因为如果您运行各种数据库风格,它可以简化您的操作环境。
  • 选择您的MongoDB版本。您可以轻松找到各种受支持的MongoDB版本,并通过自定义资源选择所需的版本:
$ kubectl get mongodbversions
NAME             VERSION   DISTRIBUTION   DB_IMAGE                                 DEPRECATED   AGE
3.4.17-v1        3.4.17    Official       mongo:3.4.17                                          20m
3.4.22-v1        3.4.22    Official       mongo:3.4.22                                          20m
3.6.13-v1        3.6.13    Official       mongo:3.6.13                                          20m
3.6.8-v1         3.6.8     Official       mongo:3.6.8                                           20m
4.0.11-v1        4.0.11    Official       mongo:4.0.11                                          20m
4.0.3-v1         4.0.3     Official       mongo:4.0.3                                           20m
4.0.5-v3         4.0.5     Official       mongo:4.0.5                                           20m
4.1.13-v1        4.1.13    Official       mongo:4.1.13                                          20m
4.1.4-v1         4.1.4     Official       mongo:4.1.4                                           20m
4.1.7-v3         4.1.7     Official       mongo:4.1.7                                           20m
4.2.3            4.2.3     Official       mongo:4.2.3                                           20m
4.4.6            4.4.6     Official       mongo:4.4.6                                           20m
5.0.2            5.0.2     Official       mongo:5.0.2                                           20m
5.0.3            5.0.3     Official       mongo:5.0.3                                           20m
percona-3.6.18   3.6.18    Percona        percona/percona-server-mongodb:3.6.18                 20m
percona-4.0.10   4.0.10    Percona        percona/percona-server-mongodb:4.0.10                 20m
percona-4.2.7    4.2.7     Percona        percona/percona-server-mongodb:4.2.7-7                20m
percona-4.4.10   4.4.10    Percona        percona/percona-server-mongodb:4.4.10                 20m

如您所见,它甚至支持用于MongoDB的Percona服务器。
分片。我喜欢社区版附带切分支持,因为它有助于试验和了解此解决方案未来是否适合您的环境。

MongoDB社区运营商

与KubeDB类似,MongoDB Corp遵循开放核心模式。运营商的社区版是免费的,还有一个企业版(MongoDB enterprise Kubernetes Operator),功能更丰富。

部署

Helm chart可用于此操作员,但同时,没有Helm Chard可用于部署自定义资源本身。这使得入职更加复杂。
添加存储库:

$ helm repo add mongodb https://mongodb.github.io/helm-charts

安装操作器:

Shell
$ helm install community-operator mongodb/community-operator

要部署数据库,需要修改此示例并设置密码。完成后,应用它部署三个节点的副本集:

$ kubectl apply -f mongodb.com_v1_mongodbcommunity_cr.yaml

特征

由于MongoDB Community Operator缺乏基本功能:备份和恢复、分片、升级等,因此预计不会有人在生产中运行MongoDB community Oprator。但与此同时,仍然有一些有趣的想法值得一提:

  • 用户配置。如这里所述。您可以创建一个MongoDB数据库用户,使用SCRAM对您的MongoDB副本集进行身份验证。创建Secret对象并列出用户及其相应角色。
  • 机密中的连接字符串。创建集群后,您就可以获得连接字符串,而无需找出服务端点或获取用户凭据。
  "connectionString.standard": "mongodb://my-user:mySupaPass@example-mongodb-0.example-mongodb-svc.default.svc.cluster.local:27017,example-mongodb-1.example-mongodb-svc.default.svc.cluster.local:27017,example-mongodb-2.example-mongodb-svc.default.svc.cluster.local:27017/admin?replicaSet=example-mongodb&ssl=false",
  "connectionString.standardSrv": "mongodb+srv://my-user:mySupaPass@example-mongodb-svc.default.svc.cluster.local/admin?replicaSet=example-mongodb&ssl=false",
  "password": "mySupaPass",
  "username": "my-user"

MongoDB的Percona操作员

最后但并非最不重要的一点是我们的解决方案列表——MongoDB的完全开源Percona操作符。它创建于2018年,经过了多个阶段的改进,于2020年达到GA。最新版本于2022年5月发布。
如果您是Percona客户,您将获得运营商及其部署集群的全天候支持。

部署

部署Percona操作符有多种方法,其中之一就是通过Helm charts。一个用于操作员的图表,另一个用于数据库。
添加存储库:

$ helm repo add percona https://percona.github.io/percona-helm-charts/

部署操作员:

$ helm install my-operator percona/psmdb-operator

部署群集:

$ helm install my-db percona/psmdb-db

特征

运营商利用Percona发行版为MongoDB提供服务,这将立即解锁各种企业功能。运营商本身功能丰富,为用户提供了各种功能,可以简化从常规MongoDB部署到Kubernetes的迁移:分片、仲裁器、备份和恢复等。
我想提及的一些关键特征:

  • 自动升级。您可以设置升级时间表,运营商将自动升级MongoDB集群的次要版本,而无需停机操作。
  • 时间点恢复。Percona Backup for MongoDB是我们发行版的一部分,在我们的运营商中提供备份和恢复功能,其中包括在您选择的对象存储上存储oplog的能力。在我们的文档中了解更多信息。
  • 多集群部署。Percona Operator支持具有跨集群复制能力的复杂拓扑。最常见的用例是灾难恢复和迁移。

结论

选择部署和管理MongoDB的解决方案是一项重要的技术决策,这可能会影响未来的各种业务指标。在这篇博客文章中,我们总结并强调了在Kubernetes中运行MongoDB的各种开源解决方案的优缺点。
需要记住的一点是,您选择的解决方案不仅应该提供一种部署数据库的方法,还应该使您的团队能够执行各种管理和维护任务,而不会淹没在MongoDB的复杂性中。

原文标题:在Kubernetes中运行MongoDB:解决方案、优点和缺点
原文作者:Sergey Pronin
原文链接:https://www.percona.com/blog/run-mongodb-in-kubernetes-solutions-pros-and-cons

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论