Kubernetes运行有状态应用程序的注意事项

Kubernetes是一个开放编排平台,旨在用于部署,管理容器化的应用程序。

在Kubernetes的早期,该平台主要支持和运行无状态应用程序。无状态应用程序,被认为在重新启动容器时不需要保留从上一个会话到下一个会话的数据的应用程序。

这就造成了误解,认为Kubernetes仅适用于无状态应用程序。但是,随着Kubernetes的普及,它已经发展成为各种类型的应用程序的编排平台之一,包括可伸缩和高度可用的有状态应用程序的部署和管理。

但是,即使为状态应用程序提供了完整的业务流程支持,Kubernetes仍存在各种不足,尤其是与存储相关的不足。Kubernetes有意留给供应商填补。

越来越多用户使用Kubernetes的有状态应用程序,推动了云原生存储解决方案的发展,该解决方案可以提供有状态应用程序所需的可用性和弹性。

Kubernetes存储演进

最初,Kubernetes提供了基本支持,使用GFS和AWS等特定云提供商的共享存储驱动器(例如NFS和ISCSI)将存储卷静态附加到Pod。但是向Kubernetes添加任何新的存储解决方案都需要将代码提交到Kubernetes核心代码库中,从而使存储过程变得复杂。

DiamantiKubernetes贡献了FlexVolume插件,从而在Kubernetes中开启了存储卷配置的新时代。它使存储供应商可以创建自定义存储插件,而无需将其添加到Kubernetes存储库中。

反过来,这为Kubernetes用户提供了更好的管理和数据服务的存储解决方案。多年来,Kubernetes社区引入了多种功能丰富的存储,例如:

FlexVolume插件为容器存储接口(CSI)的存储插件铺平了道路。该插件提供了Kubernetes与第三方存储集成的标准化解决方案,并为Kubernetes内部的数据服务提供支持。

Kubernetes运行有状态应用程序的注意事项

即使有了如上的改进,组织在Kubernetes中使用有状态应用程序时仍然面临与存储相关的挑战。随着组织采用包含重要知识产权的容器化数据库和其他应用程序,他们意识到需要提供一套更高级的存储功能。其中一些包括:

1. 易于使用的持久存储

Kubernetes为持久存储卷和有状态应用程序提供全面支持。 但是,组织仍需要使用第三方CSI插件,来提供程序执行存储卷的实际配置。

例如,大多数公共云将Kubernetes与他们现有的存储架构集成在一起,以向用户提供此功能,但是这些架构通常在选择和性能上受到限制。

当谈到私有云时,有很多第三方选项可用,但是很难找到一个提供丰富功能,最佳性能并且具有成本效益的存储解决方案。

最重要的是,市场上许多现有的存储解决方案–都旨在支持虚拟化工作负载,然而,事实证明,在裸机上运行容器具有更高的可伸缩性和性能,并减少了不必要的抽象层。但是,很难找到一种适用于裸机容器的好的存储解决方案。

2. 高可用性选项

有状态应用程序的性质,决定了需要更多地考虑应用程序如何从不同的故障模式中恢复,但并非所有第三方Kubernetes存储解决方案都是高度可用的。

为了解决此问题,许多供应商提供了共享存储,但是这些解决方案通常性能不高和缺乏可管理性。

存储可用性服务( Storage availability services ),通常使用恢复点目标(RPO)和恢复时间目标(RTO)进行衡量。RTO衡量恢复数据所需的时间,RPO衡量恢复过去多久的数据。

下表演示了有状态应用程序必不可少的各种数据服务。

存储服务 RPO RTO 详情
Backup(备份) 几小时~几天 几小时~几天 备份是备份数据的最古老的方法之一。即使备份是可靠的,备份和恢复数据也可能需要几天的时间,特别是如果备份存储在异地。如今,硬盘驱动器或光盘驱动器的情况越来越普遍,备份到云,但如果需要完全恢复工作负载,这可能需要几个小时(或几天)。
Snapshots(快照) 几分钟~几小时 几分钟到~几小时 与备份相比,快照的频率更高,从而降低了RPO。快照的恢复时间取决于存储结构以及还原过程中是否涉及数据复制。另外,由于快照通常是本地快照,因此有利于恢复数据,但不利于保持数据安全。
Replication(复写) 几秒~几分钟 几分钟 复制(异步)发生在存储卷级别或应用程序级别。它可以帮助你在几分钟甚至几秒钟内用RPO和RTO恢复数据。
Mirroring(镜像) 0 0 镜像是跨存储设备的同步存储卷复制,这些存储设备可以存在于同一集群或不同的可用域中。
DR Replication(DR复制) 几分钟~几小时 几分钟 灾难恢复(Disaster Recovery,DR)存储卷复制,有助于在DR集群上异步复制存储卷,以防止主站点故障,便于故障发生时轻松将应用程序移至DR站点,实现快速故障转移。

3. 混合云数据的可移植性

在当今的云原生世界中,越来越多的组织采用混合云方法,来结合公共云和私有云的优势。虽然可以轻松地跨多个云迁移无状态应用程序,但是很难将数据从一个云迁移到其他云。

4. 性能

市场上的大多数存储解决方案,都缺乏数据密集型应用程序所需的性能,这使存储设备成为应用程序性能的主要瓶颈。

带有固态驱动器的新存储技术 ,如NVMe (Non-Volatile Memory Express) 的出现意味着存储不再是瓶颈。因此,在选择存储供应商时,除了吞吐量之外,还要考虑最坏情况的延迟。

5. 服务质量(QoS)的保证

Kubernetes为容器本身预留了CPU和内存。但是,Kubernetes不支持存储或网络带宽预留,这仍然是一个问题。

为了保护重要的有状态应用程序免受此缺点的影响,为存储资源提供QoS级别保证很重要。

6. 用于存储和数据的共享网络

大多数传统存储解决方案都依赖于主机网络来存储数据流量。此数据流量与常规网络流量竞争,并带来安全风险。寻找隔离存储和容器流量的解决方案,有时是必要的。

7. 安全性/加密

考虑存储解决方案的安全性和加密方面。大多数企业都需要安全协议,例如自加密磁盘,存储卷级加密和密钥管理等,以保护自己免受数据丢失和安全漏洞的侵害。

独特的存储方式:Diamanti

一个良好的云原生存储环境,需要满足以上所有条件:

  • 使用简单
  • 高度可用
  • 混合云就绪
  • 高性能
  • 一致的表现
  • 安全
  • 而且它还必须具有成本效益,并为Kubernetes构建。

Diamanti是一个裸机,超融合的Kubernetes平台,能够提供容器运行所需的一切,包括优化后的基于NVMe的SSD存储。

Diamanti通过FlexVolume插件率先推出了Kubernetes的存储功能,并通过支持备份,DR,快照和镜像在这一领域进行了不断创新。

低延迟架构支持跨节点,区域甚至数据中心的集群扩展。其获得专利的I / O卸载架构还有助于提供一流的性能,与标准服务器或HCI环境相比,可提高10到30倍。最后,Diamanti还带来了真正的混合云功能,可以在云中迁移有状态应用程序。img

结论

Kubernetes已经发展成为协调有状态应用程序的最佳平台。你可以使用Kubernetes中的StatefulSet和持久存储卷,轻松管理和扩展有状态应用程序。

但是,如果没有基础存储架构,仅利用Kubernetes的全部潜力是不够的。在决定第三方存储供应商时,请牢记这些挑战,并寻找适合你的应用程序部署的存储供应商。

译文链接:https://thenewstack.io/a-guide-to-running-stateful-applications-in-kubernetes/

K8S中文社区微信公众号

评论 抢沙发

登录后评论

立即登录