当前位置: 首页 > 网络应用技术

我只想保存文件,为什么这么麻烦?-K8S PV,PVC,Storageclass的关系

时间:2023-03-08 11:52:49 网络应用技术

  当我们使用Docker时,设置数据卷(卷)相对简单。您只需要映射容器中指定卷的路径,然后使用容器中的路径。

  这样的

  为什么要设置卷?当然,因为我们要坚持数据并将数据存储到硬盘中。

  当您到达K8S时,您会发现事情并不是那么简单,并且已经出现了许多概念:

  无论这些复杂的概念如何,我都想保存文档。有一种简单的方法吗?

  是的,让我们首先回顾一下基本概念。

  我们知道容器中的文件暂时存储在磁盘上,并且当容器倒塌时丢失了文件。Kubelet将重新启动容器,但是容器将以干净的状态重新启动。因此,我们希望使用卷来持续数据。

  Docker还具有音量的概念,但是只有一个小而松散的管理。Docker卷是磁盘上的目录或其他容器Docker提供的滚动驱动程序,但其功能非常有限。

  Kubernetes支持多种类型的卷。POD可以使用任何数字的任何类型的音量。

  临时体积类型的生命周期与POD相同,但持久体积可能比POD的生存期更长。当POD不再存在时,Kubernetes也会破坏临时体积。但是,Kubernetes不会破坏持久的卷。对于给定POD中的任何类型的卷,在容器重新启动过程中不会丢失数据。

  卷的核心是可能具有数据的目录,并且POD中的容器可以访问目录中的数据。所采用的特定卷类型将确定目录的形成方式,用于保存数据的哪些介质以及内容存储在目录中。

  使用该卷时,在.spec.volumes字段中POD提供的音量,并在.dc.containers [*]中声明容器中的音量的安装位置。卷卷安装在图像中的指定路径上。卷不能安装在其他卷上,也不能与其他卷卷有硬链路。在Pod配置中,每个容器必须独立指定每个卷的安装位置体积。

  通过上述概念,我们知道音量具有不同的类型,暂时的和长期的,所以让我们首先谈论它,也就是说,解决“我只想保存文档,有没有简单的方法”。

  主机路径卷可以将文件或目录安装在主机节点文件系统上。

  可以简单地通过主机路径解决主机上文件问题的问题。

  但这应该指出:

  主机路径量中有许多安全风险。最好的方法是避免尽可能多地使用主机路径。当必须使用主机路径卷时,其范围应限于所需的文件或目录,并以读取方式安装。

  还有一个限制,可以使用主机路径,即我们的POD不能随便漂移并需要固定为节点。因为一旦它漂移到其他节点,主机上就没有相应的数据。因此供使用。

  空迪尔也是一种相对常见的存储类型。

  主机显示主机的目录。Emptydir类似于隐藏的规格。

  kubernetes将在主机上创建一个临时目录,将来将在容器上声明的卷目录中串起并安装在卷目录中。POD中的容器使用Volumemounts字段来声明您要安装的卷,并使用MountPath字段定义容器中的卷目录

  当POD分布到节点时,会创建空dir卷,并且该卷在节点期间始终存在于吊舱期间。正如其名称的表达一样,该卷最初是空的。尽管Pod中的容器中的路径是可能是相同的或不同的,这些容器可以在空dir卷中读取并写入相同的文件。由于某种原因从节点中删除POD时,空dir卷中的数据将永久删除。

  如果您执行命令查看POD信息,则可以验证我们之前说的内容:“ emptyDir(一个共享POD寿命的tempory目录)”“”“”“”“”“”“”“”“”“”“”“”。

  PV和PVC之间的关系类似于Java中界面与实现之间的关系。

  PVC是用户存储的声明。PVC和POD相似。豆荚会消耗节点。PVC消耗光伏资源。POD可以请求CPU和内存。PVC可以请求特定的存储空间和访问模式。对于真正使用存储的用户,他们不需要关心底部存储的详细信息,他们只需要直接使用PVC即可。

  PV是基础共享存储的抽象。管理员是由管理员创建和配置的。它与特定基础存储技术的实现有关。共享存储的连接。

  让我们看看一个例子:

  例如,操作和维护人员可以定义这种NFS类型PV

  PVC描述了POD想要使用的持久存储的属性。例如,卷存储的大小,可读和写入权限等等。

  如果用户创建的PVC确实由容器真正使用,则必须根据某个PV与特定的PV搭配。

  成功绑定PVC和PV后,POD可以在您自己的YAML文件中使用此PVC,例如常规类型卷(例如HostPath)。

  我们之前使用的主机路径和空dir卷没有“持久性”的特征。它可以通过kubelet清理或“迁移”到其他节点。因此,在大多数情况下,卷的实现通常取决于远程存储服务,例如远程文件存储(例如NFS,GlusterFS),远程块存储(例如公共云提供的远程磁盘)。

  我们手动管理PV的方式称为静态配置。

  一个大型的kubernetes群集可能会有数千个PVC,这意味着操作和维护人员必须提前创建数千个PV,更麻烦的是,随着新的PVC的连续性,运营和维护人员必须进行操作和维护人员继续添加新的PV,可以满足条件,否则新的PV将失败,因为PVC不会绑定到PV。实际操作,几乎没有办法人为地进行。创建PV,即:动态配置。

  动态配置机制的核心是名为Storageclass的API对象。Storageclass对象的作用实际上是用于创建PV的模板。

  具体而言,Storageclass对象将定义以下两个部分:

  有了这两个信息,Kubernetes可以根据用户提交的PVC找到相应的Storageclass.kubernetes,然后调用Storageclass语句声明的存储插头-in以创建所需的PV。

  在下面的示例中,PV是自动创建的。

  StorageClass的作用是PV.的模板,并且只能将属于Storageclass的PV和PVC一起粘合在一起。Storageclass的另一个重要作用是PVISINER这次指定的PV.AT,如果您的存储插头支持动态置换,那么Kubernetes可以自动为您创建PV。

  Kubernetes依靠PV和PVC来实现新功能。此功能的名称是:本地持续卷,即本地PV。

  本地PV的功能与HostPath Plus NodeAffinity非常相似。例如,POD可以声明本地的使用类型实际上是一个主机类型卷。如果与该hostpath相对应的目录是在节点A上提前创建的,那么我只需要添加一个nodeaffinity = nodea = nodea,我可以使用此卷吗?从理论上讲这是可行的,但实际上,我们绝不应该将主机上的目录用作PV,因为本地目录的存储行为完全无法控制。,通常,与本地PV相对应的存储介质是加载主机上主机上的磁盘或块设备。我们可以认为这是“光伏和一个磁盘”。

  本地PV和普通PV之间的最大区别在于,本地PV可以确保可以始终正确安排POD到所需的本地PV的节点。对于普通的PV,Kubernetes首先将POD安排到Pod Toon某个节点,然后将卷目录到节点上的卷目录,然后完成音量目录和容器的绑定和安装,但对于本地PV,可用的磁盘可用在节点上必须提前准备,因为它们已经准备好了,因为它们在不同节点上的安装情况可能完全不同,甚至某些节点也无法具有此磁盘。因此,此时,调度程序必须能够知道所有节点与与本地PV相对应的磁盘之间的关系,然后根据此信息,然后根据此信息,调度POD实际上考虑了计划期间的卷分布。

  例子:

  首先创建与相应本地磁盘相对应的PV

  在:

  再次编写Storageclass文件

  在:

  创建另一个PVC

  您需要在这里注意到的是Storageclassname的名称,要编写我们之前创建的StorageClassName的名称:local-Storage

  应用此文件后,使用命令kubectl get pvc可以看到他的状态正在待处理。尽管目前有一款匹配的PV,但它不会绑定并且仍在等待。

  之后,我们编写一个POD应用程序此PVC

  这样,将本地PV部署在POD上,因此即使POD消失了,它也会再次在该节点上创建。

  如何删除该PV必须遵循该过程,否则将被删除和失败

  在本文中,我们讨论了几种类型的Kubernetes存储。有临时存储,例如:主机路径,Emphdir和真实的持久存储。它还讨论了相关概念,例如:PVC,PV,Storageclass等。摘要: