介绍如何使用 Kubernetes PV 和 Kubernetes PVC 解决有状态容器化应用程序的持久存储需求,这个在使用Kubernetes过程中,是比较常见的需求。
Kubernetes 和容器中的存储处理方式与虚拟机(VM) 或其他类型的基础架构不同。
容器化应用程序通常通过并行运行多个容器实例来扩展。因此,一次运行的容器比虚拟机多得多,而且任何给定容器实例的生命周期通常要短得多——几分钟或几小时。相比之下,运行中的虚拟机可能会持续数周或数月。
本文介绍了如何使用 Kubernetes 持久卷 (PV) 和 Kubernetes 持久卷声明 (PVC) 来解决有状态容器化应用程序的持久存储需求。它还描述了如何静态或动态配置 PV。
有状态的应用程序需要数据在容器实例的生命周期之外持续存在。应用程序通常存储信息以供以后处理或记录更改或事务发生。PV 允许存储卷与容器实例分开。PV 是集群中分配的存储卷,它要么由管理员配置,要么使用存储类动态配置(稍后会详细介绍)。
Kubernetes 支持多种类型的卷,包括文件和块存储。各种存储供应商和云提供商都创建了容器存储接口 (CSI) 驱动程序,使 Kubernetes 能够利用其底层存储产品的功能。确定集群将使用哪种类型的存储是一项重要的管理任务,需要考虑静态/动态配置、服务质量(QoS)、可轻松横向扩展等。
PV 是类似于 Kubernetes 中其他资源的集群资源,例如节点、内存 (RAM) 等。与任何集群资源一样,它可以通过用 YAML 编写的配置文件来创建。
请注意,该定义指定了有关 PV 的多个方面,例如其名称、容量、访问模式等。
思考一个简单的三节点 Kubernetes 集群如何运行有助于理解 PV 的预期。Kubernetes 容器在 Pod 中运行。在正常操作期间,运行在节点 A 上的 Pod X 可能会停止并在节点 C 或节点 B 上重新启动,因此与它关联的任何 PV(下图中的 PV-X)都需要可以从 Pod 可以运行的每个节点访问. 这通常意味着它需要在集群中的所有节点上都可以访问。而且,当然,您需要有创建 PV 的方法以及在 pod 中运行的应用程序容器使用它们的方法。
使用静态配置,Kubernetes 管理员必须提前知道开发人员需要哪些持久卷,并通过创建YAML 文件在底层存储上创建这些卷,如上所示。创建 PV 后,它可以通过 Kubernetes API 访问并可供使用。
持久卷声明 (PVC) 是对 PV 的请求。声明描述了所需的存储,包括特定的名称、大小和访问模式。PVC 可以指定适当 PV 的部分或全部参数。如果 Kubernetes 找到与请求匹配的可用 PV,则 PVC 将绑定到该 PV。PVC 的 YAML 可能如下所示:
建立 PVC 后,您可以在 Deployment 或 Pod 规范中使用该声明:
总之,静态 PV 供应需要以下步骤:
静态配置在某种程度上可以正常工作,但它要么需要管理员进行大量猜测(以便创建应用程序可能需要的 PV),要么需要开发人员和管理员之间的大量来回。随着 Kubernetes 环境的扩展,这可能会成为瓶颈。
动态配置解决了这个问题。管理员定义存储类,而不是 Kubernetes 管理员创建特定的 PV。每个 StorageClass 都有一个特定的存储后端,可以从中自动配置 PV 以满足应用程序的要求。例如,您可能有单独的存储类用于块存储和文件存储。类可以按您希望的那样细化。您可以拥有始终备份或从不备份的慢速、中速和快速块存储或类。
要创建 StorageClass,管理员必须指定一个供应商和适合该供应商的参数。例如,Kubernetes 有一个用于 AWS EBS(块)存储的内部配置器:kubernetes.io/aws-ebs。
Kubernetes 提供了各种内部配置器,在此处的 Kubernetes 文档中进行了描述。外部提供程序也可用或可以创建。
通过动态配置,开发人员可以使用 PVC 请求特定的存储类型并自动配置新的 PV。PVC 必须请求已由管理员在目标集群上创建和配置的 StorageClass,以便动态配置工作。
使用动态配置有几个好处,尤其是随着您的运营增长:
Kubernetes 环境需要跟上集群和应用程序状态的备份,以防止发生灾难。如果您的备份旨在仅备份您知道的 PV,那么迟早您可能会错过一些。Kubernetes 备份应检查集群的状态以查找所有 PV。基于策略的解决方案有助于确保您以正确的时间间隔备份所有 PV,以提供所需的服务级别。
*多学习、多实践、多沉淀*
喜欢的朋友记得给个关注~
留言与评论(共有 0 条评论) “” |