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

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: 如今,越来越多的应用部署在 Kubernetes 上的容器中,因此 Kubernetes 也被称为「云端的 Linux」。尽管在应用层(application layer)的容器化有了大量增长,但数据层(data layer)在容器化方面得到的关注并不多。

云栖号资讯:【点击查看更多行业资讯
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!

如今,越来越多的应用部署在 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)可能会被提交到主要数据库,而不会提交到次要数据库。因此,一定要明确是否会产生数据丢失,以及在自己的应用程序中,有多少数据丢失是可以接受的。
在评估了以上这些方面后,你最终会得到一个类似于这样的决策树。

b55bcd0a699eff4fdab9dbfe229582e2

如何在 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

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
JSON Kubernetes Shell
【Azure K8S | AKS】在不丢失文件/不影响POD运行的情况下增加PVC的大小
【Azure K8S | AKS】在不丢失文件/不影响POD运行的情况下增加PVC的大小
278 0
|
12月前
|
存储 缓存 监控
【YashanDB数据库】数据库运行正常,日志出现大量错误metadata changed
数据库运行正常,日志出现大量错误metadata changed
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
针对本地存储和 PVC 这两种容器存储使用方式,我们对 ACK 的容器存储监控功能进行了全新升级。此次更新完善了对集群中不同存储类型的监控能力,不仅对之前已有的监控大盘进行了优化,还针对不同的云存储类型,上线了全新的监控大盘,确保用户能够更好地理解和管理容器业务应用的存储资源。
719 265
|
12月前
|
SQL 数据库 Docker
【赵渝强老师】在Docker中运行达梦数据库
本文介绍了在Docker容器中部署达梦数据库(DM 8)的具体步骤,包括创建文件夹、下载安装包、导入镜像、启动容器、登录数据库及查看状态等操作。同时,通过视频讲解辅助理解。文中还分析了将数据库服务容器化的潜在问题,如数据安全性、硬件资源争用、网络带宽占用和额外隔离带来的挑战,指出数据库服务在生产环境中可能不适合容器化的原因。
1338 4
【赵渝强老师】在Docker中运行达梦数据库
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
360 0
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
281 1
|
存储 监控 对象存储
ACK容器监控存储全面更新:让您的应用运行更稳定、更透明
介绍升级之后的ACK容器监控体系,包括各大盘界面展示和概要介绍。
|
Kubernetes 监控 Cloud Native
|
存储 Kubernetes Cloud Native
Kubernetes上的数据库
【10月更文挑战第16天】数据库在Kubernetes上的应用日益普及,超过72%的组织已在Kubernetes上运行数据库。这得益于Kubernetes的声明式特性和标准化部署,能够加速开发、降低成本、减少复杂性,并提高系统的弹性和正常运行时间。Kubernetes为数据管理提供了自动化操作、环境一致性、数据可移植性和自助服务功能,特别适合现代云原生应用。然而,引入数据库到Kubernetes时需考虑团队技能、自动化支持及存储配置等问题。
141 1
|
NoSQL 前端开发 MongoDB
前端的全栈之路Meteor篇(三):运行在浏览器端的NoSQL数据库副本-MiniMongo介绍及其前后端数据实时同步示例
MiniMongo 是 Meteor 框架中的客户端数据库组件,模拟了 MongoDB 的核心功能,允许前端开发者使用类似 MongoDB 的 API 进行数据操作。通过 Meteor 的数据同步机制,MiniMongo 与服务器端的 MongoDB 实现实时数据同步,确保数据一致性,支持发布/订阅模型和响应式数据源,适用于实时聊天、项目管理和协作工具等应用场景。
444 0

推荐镜像

更多