一些刚接触 Kubernetes 的公司尝试使用传统环境中运行数据库的方法在 Kubernetes 中运行数据库。但是,不建议这样做。因为这可能会导致数据丢失,并且也不建议这样管理生产工作负载。为什么这样做很危险?又如何解决这个问题?
在考虑将数据库迁移到 Kubernetes 之前,请确保应用程序的其余部分是云原生的,并可以使用 Kubernetes。 如果您已经开始对数据库进行垂直弹性伸缩和水平弹性伸缩,并需要编排数据库来控制成本,将其迁移至 Kubernetes 上就是个不错的选择。
将数据库工作负载转移到 Kubernetes 上有两个理想的使用场景: 微服务和统一抽象层。
庞大的单一数据集可能会阻碍发挥 Kubernetes 的一些优点:自修复和高可用性。这可能是一个问题,因为在加入数据库集群时,需要耗费时间将数据物理传输到新 Pod 实例上。如果数据集太大,由于物理限制,这个过程会很慢,并影响性能和数据库的可用性。而微服务就非常合适,因为它的数据集相对较小,使得 Kubernetes 能很好地进行自动化处理。
希望充分利用云原生应用程序和数据库的公司也非常适合 Kubernetes。如果想利用统一抽象层在任何地方部署和运行数据库,Kubernetes 是一个很好的选择。可以将数据库移动到任何运行着 Kubernetes 的地方。
我们对大型非分片数据集以及 Kubernetes 在处理这些数据集时的局限性进行了讨论,但我们还应该看看什么样的工作负载更适合传统平台。对吞吐量比较敏感的应用程序在 Kubernetes 上表现可能没有那么好,或者不是很划算。Kubernetes 基本是为容器编排而设计的,而不是为需要极低延迟的高性能数据库而设计的。也许这能够实现,但代价是什么呢?对于高性能的分布式数据库也同样如此。
Pets 和 Cattle 是 DevOps 中的一对概念。Pets 表示在出现问题时需要关注单个服务器的部署方式,Cattle 表示在出现问题时用副本替换服务器的能力。在 Kubernetes 的运作方式中,当出现应用程序无法控制的因素时,可以在任何时候销毁、创建或移动 Pod。Kubernetes 使用一个调度程序(scheduler),它可以销毁和重建 Pod,以满足您的 Kubernetes 集群配置需求。
这对于无状态应用程序非常有用,因为应用程序中的任何失败都将导致包含应用程序的 Pod 被销毁和重新创建,而不需要人工交互,并极大地加快了问题的解决。这对于数据库来说并不理想,因为我们不希望数据库突然停止工作,并造成数据丢失或损坏。Kubernetes 可以使用 StatefulSet 提供持久标识符来帮助解决这个问题。这有利于管理有状态工作负载,但是要如何发挥高可用性和利用 Kubernetes 的自动化优势呢?
根据设计,数据库需要维护其身份、信息,最重要的是,数据始终是安全的和可访问的。数据库是应用程序的主干,因为它们是应用程序正常运行所依赖的真正数据源。数据库操作中的任何错误都会迅速阻止应用程序运行。简单地说,数据库非常重要。
[En]
By design, the database needs to maintain its identity, information, and most importantly, the data is secure and accessible at all times. Databases are the backbone of the application because they are the real data sources on which the application depends for normal operation. Any error in the database operation will quickly prevent the application from running. * simply put, the database is very important. *
我们如何在 Kubernetes 中安全地运行数据库,并确保数据库部署是高可用的?
通过使用 StatefulSet 和持久卷(Persistent Volume),可以保持数据的完整性,但是我们还需要另外的工具来承担数据库管理任务,例如确保故障转移、恢复数据库成员、重新加入高可用架构以及其他特定技术功能。幸运的是,Kubernetes 是可扩展的,并且拥有 Operator,用于自动执行管理服务的关键任务。
我们了解了在 Kubernetes 中安全运行数据库的复杂性,以及一些用来帮助弥合自动化和传统人工在功能之间差距的概念。在一些数据库 Operator 的帮助下,我们可以按照预期的方式安全地运行数据库。这些 Operator 能够将一些通常由数据库管理员完成的任务自动化执行,例如:
- 自动部署、严格一致性、无单点故障
[En]
automatic deployment, strict consistency, no single point of failure*
- 自动伸缩,通过更改 size 参数添加或删除集群或 ReplicaSet 成员
- 自动备份和恢复
- 自动修复,从单个集群或 ReplicaSet 成员的故障中自动恢复
- 自动管理密码轮换系统用户
[En]
automatically manage password rotation system users*
- 简化更新
由于运行数据库环境的复杂性和对高可用的要求,以及动态 Kubernetes 环境带来的风险,强烈建议在 Kubernetes 中部署数据库时,使用 Operator 来实现。
欢迎使用 RadonDB MySQL Kubernetes 一款高可用 MySQL 集群 Operator!
Original: https://www.cnblogs.com/radondb/p/16616503.html
Author: RadonDB
Title: 翻译 | Kubernetes Operator 对数据库的重要性
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/504956/
转载文章受原作者版权保护。转载请注明原作者出处!