Kubernetes 上是否运转数据库,取决于哪些因素?

云栖号资讯:【点击检查更多职业资讯】
在这里您能够找到不同职业的第一手的上云资讯,还在等什么,快来!

现在,越来越多的运用布置在 Kubernetes 上的容器中,因而 Kubernetes 也被称为「云端的 Linux」。尽管在运用层(application layer)的容器化有了许多增加,但数据层(data layer)在容器化方面得到的重视并不多。这很正常,由于容器化作业流原本就需求满足的弹性,才干应对重启、扩展、虚拟化和其他约束。所以处理数据库的可耐久化、对运用程序其他层的高可用性和数据库的冗余等方面,有十分详细的要求。这就使得数据库在分布式环境中运转起来很有挑战性。

可是,数据层得到更多重视,是由于许多开发者想要像处理 运用层技能栈相同,处理数据层根底架构。运维人员期望运用的相同的东西来运维数据库和运用程序,并且数据层和运用层能到达相同的收益:跨不同环境的快速发动和可重复主动完结。在这篇文章中,咱们将讨论什么时候,以及哪些类型的数据库能够在 Kubernetes 上有用运转。

在深化讨论 Kubernetes 上运转数据库的注意事项之前,咱们先简略回忆一下 Google Cloud 渠道(GCP)上运转数据库都有哪些选项,以及这些数据库的最佳用法。

  • 彻底保管的数据库。包含 Cloud Spanner、Cloud Bigtable 和 Cloud SQL 等。这些都是低运维本钱的选则,由于 Google Cloud 会承当许多日常保护的作业,如备份、补丁和扩展等。开发者或运维人员无需人为干涉,只需创立一个数据库,构建自己的 APP,然后交给 Google Cloud 进行扩展。这也意味着你或许无法运用到自己想要的数据库版别、扩展或某种类型的数据库。
  • 在虚拟机上自行操作的数据库。也可称为「全运维选项」,构建数据库、扩展数据库、办理可靠性、装备备份等统统需求自行设定。这尽管工程量巨大,但一切的功用和数据库类型的挑选都在自己的把握之中。
  • 在 Kubernetes 上运转的数据库。在 Kubernetes 上运转数据库更接近于全运维选项,可是能够从 Kubernetes 供给的主动化功用中,享用一些优点,以支撑数据库运用程序的运转。话虽如此,但需求记住的是,Pods(数据库运用容器)是瞬时性的,所以数据库运用重启或毛病切换的或许性较大。此外,由于容器化后增加了笼统功用,一些数据库办理使命,如备份、缩放、调优等,都是不相同的。

在 Kubernetes 上运转数据库的技巧

假如挑选走 Kubernetes 道路,你需求考虑运转哪些数据库,以及当通盘考虑前文讲到权衡时数据库运转状况。由于 Pods 至关重要,因而发作毛病搬运事情的或许性,比传统布置或彻底保管的数据库要高。假如这个数据库内置支撑分片(sharding)、毛病推举(failover election)和仿制等规划(例如 ElasticSearch、Cassandra 或 MongoDB),那么在 Kubernetes 上运转会更简略。一些开源项目供给自定义资源和控制器,来协助办理容器化的数据库。

接下来,考虑数据库在 运用 和业务的上下游中起到的效果。存储更多暂时的和缓存层的数据库更合适 Kubernetes。这种类型的数据层通常在运用中更有弹性,全体体会更好。

终究,保证你了解数据库中可用的仿制形式。异步传输形式或许会呈现数据丢掉,由于数据库业务(transaction)或许会被提交到首要数据库,而不会提交到非必须数据库。因而,一定要清晰是否会发生数据丢掉,以及在自己的运用程序中,有多少数据丢掉是能够承受的。
在评价了以上这些方面后,你终究会得到一个类似于这样的决策树。

Kubernetes 上是否运转数据库,取决于哪些因素?

如安在 Kubernetes 上布置数据库?

现在,让咱们深化了解一下怎么运用 StatefulSets 在 Kubernetes 上布置数据库。凭借 StatefulSet,你的数据能够存储在 Persistent Volume 上,将数据库运用程序与耐久化存储解耦,因而当从头创立一个 pod(如数据库运用程序)时,一切的数据仍然存在。此外,当在 StatefulSet 中从头创立一个 pod 时,它将坚持相同的称号,所以你会有一个共同的端点来衔接。耐久数据和共同的命名是 StatefulSets 最大的两个特色。你能够检查 Kubernetes 文档了解更多细节。
假如你要运转一个不彻底合适 Kubernetes 承载的数据库类型(如 MySQL 或 PostgreSQL),能够考虑运用 Kubernetes Operators 或包含其他改善特性的数据库项目,使得数据库合适容器化环境运转。Operator 会协助你发动这些数据库,并履行数据库保护使命,如备份和仿制。特别是关于 MySQL 来说,能够参阅 Oracle MySQL Operator 和 Crunchy Data for PostgreSQL
Operator 凭借自定义资源和控制器,经过 Kubernetes API 来露出 特定操作。例如,运用 Crunchy Data 履行备份,只需履行 pgo backup [cluster_name] 即可。要增加一个 Postgres 副本,运用 pgo scale cluster [cluster_name]。
还有一些其他项目你或许会感兴趣,比方 PostgreSQL 的 Patroni。这些项目进一步用到了 Operator。它们围绕着各自的数据库构建了许多东西,然后能够在 Kubernetes 内部进行操作。或许包含的弥补功用是,如分片、主从推举,以及毛病搬运功用,这些功用都是在 Kubernetes 中成功布置 MySQL 或 PostgreSQL 所需的。。
尽管在 Kubernetes 中运转数据库获得了越来越多的重视,但它远不是一门准确的科学。在这个范畴还有许多作业要做,跟着技能和东西的开展,在 Kubernetes 中运转数据库将成为常态。
假如你预备好了,能够拜访 GCP Marketplace,它供给了易于布置的 SaaS、虚拟机和容器化数据库解决方案和 Operators,能够在任何地方布置到 GCP 或 Kubernetes 集群。

【云栖号在线讲堂】每天都有产品技能专家共享
课程地址:https://yqh.aliyun.com/zhibo

当即参加社群,与专家面对面,及时了解课程最新动态!
【云栖号在线讲堂 社群】https://c.tb.cn/F3.Z8gvnK

原文发布时刻:2020-05-19
本文作者:Benjamin Good
本文来自:“InfoQ”,了解相关信息能够重视“InfoQ”