迁移到Kubernetes的好处之一是,你的应用程序可以在高度可伸缩的环境中运行。如果你突然需要更多的容量,你可以快速添加额外的pod,然后在不再需要它们的时候把它们扔掉。
在无状态应用程序世界中终止容器时,随着资源的释放,容器中的所有内容都会被销毁。但是,如果你正在运行一个有状态应用程序呢?在这种情况下,需要专用存储来支持事务历史记录。
为了提供对有状态应用程序的支持,Kubernetes提供了卷。在规划和执行到Kubernetes环境的迁移时,了解如何在Kubernetes部署中使用和管理卷的技术细节非常重要。
Kubernetes的第一批采用者使用它来部署无状态应用程序。最初,容器被构建成无状态的,因为这适合于它们的便携性和灵活性。但随着容器的广泛使用,人们开始将现有的有状态应用程序进行容器化(为了从容器中运行而重新设计和打包)。这给了他们使用容器的灵活性和速度,但是要考虑到有状态的存储和上下文。
例如,现在许多组织将Kubernetes集群部署到其内部数据中心、公共和私有云提供商和/或混合环境中。它在边缘计算中也变得很流行,因为在边缘部署一个轻量级的应用程序可以让供应商享受到云的便利性,并通过将处理过程靠近使用者来提高性能。
随着部署Kubernete方式的增加,提供事务存储的需求也随之增加。如何将临时容器与持久性存储结合起来是一个复杂的问题,业界已经提出、测试和改进了各种解决方案。
一个原因是持久数据存储的要求因应用程序而异。有些存储是为了长期使用,这意味着它可以慢一些。例如,在存取时间不重要的情况下,用于存档科研成果的长期存储。其他存储需要高性能的响应时间。例如,实时零售客户数据库事务。
还有一种存储需要高度的弹性,例如金融机构的灾难恢复存储。这些不同的存储需求在Kubernetes中产生了一种通用解决方案的需求,这种解决方案允许访问这些存储类型中的每一种,而不会引入使其无法工作的复杂性级别。
持久性存储解决方案的核心是PersistentVolumes(PV)和PersistentVolumeClaims(PVC)的概念。PV定义集群中的存储单元。它是一个具有可配置特性的API对象,与Kubernetes生态系统的其余部分没有什么不同。PVC是对已定义的存储类的访问请求。集群管理员定义PV,这些PV随后作为集群中的静态资源提供。如果PVC请求的资源类型不可用,集群可以动态地提供一个持久卷来满足需要。
最近,Kubernetes增加了对容器存储接口(CSI)的支持,它建立在PV/PCS模型之上。CSI是一个插件,它增加了将集群与块和文件存储系统连接的能力。它是一个可扩展的接口,可以连接Kubernetes集群资源和存储资源。使用CSI,Kubernetes可以访问AWS EFS、AWS EBS、Azure Disk、Azure File、IBM Block存储和其他类似的资源。
让我们探讨一下如何满足这些需求。
高可用性
当我们谈到可用性时,我们指的是在需要时准备好存储资源——这也意味着即使支持高可用性存储的某些基础设施出现故障,也需要高可用性存储。我们还考虑了数据持久性和灾难恢复,以及允许你从更大范围的停机和灾难中恢复的备份过程。
确保传输速度的可扩展性
传输速度与可伸缩性密切相关。随着应用程序的扩展,它产生和使用的数据量也随之增加。如果你的存储无法与应用程序一起扩展,你很快就会发现这将妨碍你充分发挥潜力和提供高质量的用户体验。
数据安全
数据的安全性也许是最重要的,但安全性是一把双刃剑。你希望授权用户和资源能够有效地访问他们所需的资源,同时防止未经授权的访问。身份管理系统可能非常复杂,它们需要在保证广泛系统的每个组件安全的粒度和易于管理和实现的简单性之间取得平衡。
无论你的存储位于何处,一流存储提供商的功能都是相似的。原生云存储也不例外。你的存储解决方案需要在应用程序需要时可用,能够以应用程序所需的速度传输数据,并保护来自组织内外的潜在威胁。