在这里插入图片描述

名词解释

  • Persistent :adj 持久的、持续的
  • Volume : n 卷、容积
  • Claim: v 认领、宣称、声明
  • Storage: n 存储、保管

在这里插入图片描述

PersistentVolumeClaim(PVC)介绍

PersistentVolumeClaim(持久化卷声明,简称PVC)是Kubernetes中的一种资源对象,它代表了用户对存储资源的请求。以下是对PVC的详细介绍:

一、PVC的基本概念

PVC是用户对存储资源的一种声明或请求,它属于一个Namespace中的资源。通过PVC,用户可以请求特定大小、特定访问模式的存储资源,而无需关心底层存储的具体实现细节。PVC与Pod有相似之处,Pod消耗的是Node节点的计算资源(如CPU和内存),而PVC则消耗的是PersistentVolume(持久化卷,简称PV)的存储资源。

二、PVC的作用

  1. 存储资源请求:PVC允许用户指定所需的存储资源和访问模式,如读写权限、是否允许多节点挂载等。
  2. 与PV绑定:PVC会与PV进行绑定,PV是实际存储资源的抽象,包含了存储的具体参数和配置。一旦PVC与PV绑定,PVC就可以使用PV提供的存储资源。
  3. 生命周期管理:PVC有自己的生命周期,独立于任何使用它的容器组。即使容器组被删除或重新调度,PVC及其绑定的PV仍然存在,保证了数据的持久性。

三、PVC的创建与使用

  1. 定义PVC:用户需要创建一个PVC定义文件,指定所需的存储特性(如容量、访问模式等)和所属的StorageClass(存储类)。
  2. 提交PVC请求:使用kubectl命令将PVC定义文件提交到Kubernetes集群中,Kubernetes会根据PVC的请求为其匹配一个合适的PV。
  3. PVC与PV绑定:Kubernetes会为PVC找到一个满足其要求的PV,并将其与PVC绑定。绑定后,PVC就可以使用PV提供的存储资源了。
  4. 在Pod中使用PVC:用户可以在Pod的定义文件中通过volumeMounts和volumes字段将PVC挂载到Pod中的容器上,从而使用PVC提供的存储资源。

四、PVC的回收策略

PVC的回收策略与PV的回收策略相关。PV的回收策略有以下几种:

  1. Retain(保留):保留数据,需要由管理员手动清理。
  2. Recycle(回收):删除数据,即删除目录下的所有文件。但需要注意的是,目前只有NFS和HostPath支持此策略。
  3. Delete(删除):删除存储资源。但此策略仅支持部分云存储系统,如AWS EBS、GCE PD、Azure磁盘和Cinder卷等。

当PVC被删除时,其绑定的PV会根据PV的回收策略进行相应的处理。如果回收策略为Retain,则PV仍然存在,并需要管理员手动清理;如果回收策略为Recycle或Delete,则PV中的数据会被删除或存储资源会被释放。

PVC是Kubernetes中用于请求和管理存储资源的重要对象。通过PVC,用户可以方便地获取所需的存储资源,并保证数据的持久性和可靠性。


在这里插入图片描述

PersistentVolume(PV)介绍

PersistentVolume(持久卷,简称PV)是Kubernetes集群中的一块存储空间,用于提供持久化存储。以下是对PV的详细介绍:

一、PV的基本概念

PV是集群中的一种资源,与节点(Node)一样,它属于集群级别资源,不属于任何Namespace。PV是由集群管理员创建和管理的,它抽象了底层存储系统的细节,为用户提供了一个统一的存储接口。用户通过PersistentVolumeClaim(PVC)来申请和使用PV资源。

二、PV的作用

  1. 提供持久化存储:PV用于存储持久化数据,即使Pod被删除或重新调度,PV中的数据仍然存在。
  2. 抽象存储细节:PV屏蔽了底层存储系统的实现细节,为用户提供了一个简单的存储接口。用户无需关心存储系统的具体类型、配置和位置等信息。
  3. 动态供给:基于StorageClass,Kubernetes可以动态地为PVC创建PV,从而满足用户的存储需求。这大大简化了存储资源的管理和配置工作。

三、PV的创建与配置

  1. 定义PV:管理员需要创建一个PV定义文件,指定存储的类型、容量、访问模式、回收策略等参数。
  2. 提交PV请求:使用kubectl命令将PV定义文件提交到Kubernetes集群中。
  3. 配置访问模式和回收策略:PV的访问模式决定了Pod如何访问存储资源,包括ReadWriteOnce(单节点读写)、ReadOnlyMany(多节点只读)和ReadWriteMany(多节点读写)等。回收策略则决定了当PV被释放时如何处理存储资源,包括Retain(保留)、Recycle(回收,但当前版本已废弃)和Delete(删除)等。

四、PV的状态与生命周期

PV有以下几种状态:

  1. Available:表示PV是空闲的,尚未被PVC绑定。
  2. Bound:表示PV已经与某个PVC绑定,正在被使用。
  3. Released:表示与PV绑定的PVC已经被删除,但PV本身仍然存在,只是数据已经被“释放”或不再被该PVC使用。此时,PV可能需要根据回收策略进行处理。
  4. Failed:表示PV处于故障状态,可能是由于删除PVC时自动回收卷失败等原因导致的。

PV的生命周期包括创建、绑定、使用和释放等阶段。一旦PV被创建并配置好,它就可以被PVC申请和使用。当PVC被删除时,PV会根据回收策略进行相应的处理。

五、PV的类型与插件

PV的类型是通过插件机制实现的,目前Kubernetes支持多种存储插件,包括但不限于:

  • NFS:网络文件系统,一种常用的共享存储解决方案。
  • CephFS、RBD:Ceph存储系统的两种不同接口,提供了高性能和可扩展的存储服务。
  • iSCSI、FC:基于块存储的接口,适用于需要高性能和低延迟的应用场景。
  • AWS Elastic Block Store(EBS)、Google Compute Engine Persistent Disk(GCE PD)、Azure Disk:云提供商提供的块存储服务。
  • GlusterFS、Flocker等:其他开源或商业的共享存储解决方案。

管理员可以根据实际需求选择合适的存储插件,并配置相应的PV来满足用户的存储需求。

PV是Kubernetes集群中提供持久化存储的重要资源。通过合理的配置和管理,PV可以满足用户的各种存储需求,并保证数据的持久性和可靠性。


在这里插入图片描述

StorageClass(SC)介绍

StorageClass是Kubernetes中用于定义持久卷(Persistent Volume,简称PV)的类型和行为的对象。以下是对StorageClass的详细介绍:

一、基本概念

  • 定义:StorageClass是Kubernetes中用于抽象存储资源的定义,它允许管理员设置PVC(Persistent Volume Claim)的后端存储细节,简化用户操作,并自动处理PV的创建和绑定。
  • 功能:通过StorageClass,管理员可以实现存储资源的动态供应和灵活管理,同时满足不同应用程序的存储需求。

二、主要组成

  • 名称:StorageClass的唯一标识符,用于在Kubernetes中区分不同的StorageClass。
  • Provisioner:定义了用于创建和管理存储卷的后端存储系统。Provisioner可以是自定义的后端存储提供者,也可以是Kubernetes内置支持的存储系统提供者,如AWSElasticBlockStore、AzureDisk、GCEPersistentDisk等。
  • 参数配置:根据所选的Provisioner,管理员可以配置不同的参数来定义存储卷的属性和行为。这些参数通常包括存储类型、容量、性能等。
  • 回收策略:定义了当存储卷不再需要时如何处理。常见的回收策略包括Delete(删除)和Retain(保留)。
  • 挂载选项:指定在挂载持久卷时传递给底层存储的挂载选项。不是所有PV类型都支持挂载选项,如果PV不支持但StorageClass设置了该字段,则PV将会创建失败。
  • 绑定模式:定义了持久卷的绑定模式。目前支持的绑定模式包括Immediate(立即绑定)和WaitForFirstConsumer(延迟绑定)。

三、工作原理

  • 当用户创建一个PVC时,可以指定所需的StorageClass。
  • Kubernetes会根据指定的StorageClass动态地创建一个符合要求的PV,并将其绑定到PVC上。
  • 这样,用户就可以通过PVC来使用PV提供的持久化存储了。

四、优势与特点

  • 动态资源供应:通过StorageClass,可以实现存储资源的动态供应,无需手动预先创建PV。
  • 存储多样性管理:使用不同的StorageClass,可以为每个应用选择最适合的存储类型,满足多样化的存储需求。
  • 简化管理:StorageClass抽象了存储资源的细节,简化了管理员的管理工作。

五、示例

以下是一个关于NFS的StorageClass示例:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-sc
provisioner: nfs-subdir-external-provisioner # NFS provisioner的名称
reclaimPolicy: Retain

在创建了这个StorageClass之后,用户可以创建一个PVC,并指定使用这个StorageClass:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  storageClassName: nfs-sc
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: "5Gi"

Kubernetes会根据StorageClass的定义,动态地创建一个5Gi大小的PV,并将其绑定到PVC上,从而实现持久化存储。

StorageClass是Kubernetes中用于定义和管理持久卷的重要对象。通过合理使用StorageClass,可以实现存储资源的动态供应、多样化管理和简化管理等工作。

在这里插入图片描述

PVC与SC的关系

StorageClass用于对PV进行分类,并可以根据PVC的请求动态创建PV。如果PVC指定了一个StorageClass,则Kubernetes会根据该StorageClass的定义为其动态创建一个满足要求的PV,并将其与PVC绑定。这样,用户就无需手动创建和配置PV了,大大简化了存储资源的管理。

在这里插入图片描述

PVC与PV的关系

在Kubernetes中,PersistentVolumeClaim(PVC)和PersistentVolume(PV)之间存在着紧密且特定的关系。这种关系主要体现在资源的请求与分配、绑定与解绑,以及生命周期的管理上。

请求与分配

  1. PVC的请求:当用户需要为Pod提供持久化存储时,他们会创建一个PVC。PVC中详细描述了所需的存储资源,包括容量、访问模式(如ReadWriteOnce、ReadOnlyMany或ReadWriteMany)等。

  2. PV的分配:集群管理员或动态存储提供者会根据PVC的请求,在集群中查找或创建一个符合条件的PV。这个PV将提供PVC所请求的存储资源。

绑定与解绑

  1. 绑定过程:一旦找到合适的PV,Kubernetes会将PVC与该PV进行绑定。这种绑定是双向的,意味着PVC将引用特定的PV,而PV也将被标记为已被某个PVC使用。

  2. 解绑条件:当PVC被删除或不再需要时,它与其绑定的PV之间的关联将被解除。然而,这并不意味着PV本身会被立即删除。PV的删除取决于其回收策略(如Retain、Delete等)。

生命周期管理

  1. PVC的生命周期:PVC从创建到绑定、使用,再到最终的删除,都受到Kubernetes生命周期管理机制的监控。PVC的状态会随着其生命周期的进展而发生变化,如Pending(等待绑定)、Bound(已绑定)和Released(已释放,但PV仍保留)等。

  2. PV的生命周期:与PVC类似,PV也有其自己的生命周期。从创建到被PVC绑定、提供存储资源,再到PVC解绑后可能的删除或保留,PV的状态也会随着其生命周期的进展而发生变化。

注意事项

  • 唯一性与匹配性:每个PVC在集群中都是唯一的,并且只能与一个PV进行绑定。同样地,每个PV也只能被一个PVC使用(尽管某些PV类型可能支持多个PVC的只读访问)。
  • 动态分配:在Kubernetes中,通过StorageClass和动态存储提供者,可以实现PV的动态分配。这意味着当PVC被创建时,如果没有现成的PV可用,动态存储提供者可以根据PVC的请求自动创建一个新的PV。
  • 访问控制与安全性:PVC和PV之间的绑定关系还涉及到访问控制和安全性问题。例如,PVC可以指定所需的访问模式(如读写或只读),而PV则可以根据这些要求来配置存储资源的访问权限。

PVC与PV之间的关系是Kubernetes持久化存储管理的核心。通过精心设计和配置PVC和PV,用户可以确保Pod获得所需的持久化存储资源,同时实现存储资源的灵活管理和高效利用。

在这里插入图片描述

PV与SC关系

在Kubernetes中,PersistentVolume(PV)与StorageClass(SC)之间的关系主要体现在存储资源的定义、动态分配与管理上。以下是对PV与SC关系的详细分析:

一. 定义与功能

  • PV(PersistentVolume)

    • 是Kubernetes集群中的一块持久存储资源。
    • 可以是实际的存储设备,如磁盘或云存储卷,也可以是集群中的网络存储服务,如NFS、iSCSI等。
    • 独立于Pod存在,可以在不同的Pod之间共享和重用。
    • 包含了存储设备的详细信息,如类型、访问模式、容量大小等。
  • SC(StorageClass)

    • 是用于定义动态存储的一种资源类型。
    • 充当了存储供应商和应用之间的中间层,定义了存储的属性和行为。
    • 允许管理员定义存储的类型(如快速SSD、普通磁盘等)、提供商(如AWS、Azure、GCP等)、复制策略、备份策略等。

二. 动态分配与管理

  • 基于SC的PV动态创建

    • 当Pod需要持久化存储时,通常通过PersistentVolumeClaim(PVC)来请求。
    • PVC可以引用SC来请求动态分配的PV。
    • Kubernetes会根据PVC中指定的SC配置,自动创建一个符合要求的PV,并将其分配给PVC。
  • PV与SC的绑定

    • 在动态分配过程中,PV的创建是基于SC的配置进行的。
    • 一旦PV被创建,它就会被标记为与特定的SC相关联。
    • 这种绑定关系确保了PV能够满足PVC根据SC提出的存储需求。

三. 生命周期管理

  • PV的生命周期

    • PV的生命周期由SC(在一定程度上)和Kubernetes集群共同管理。
    • 当PVC被创建并引用SC时,Kubernetes会根据SC的配置动态创建PV。
    • 当PVC被删除时,与其绑定的PV也会根据回收策略被处理(如删除或保留)。
  • SC的持久性

    • SC作为集群级别的资源,其定义是持久的,不会因为PVC或PV的删除而消失。
    • 这使得管理员可以定义一组通用的存储配置模板,供不同的PVC在需要时引用。

四. 灵活性与可扩展性

  • 灵活性

    • 通过SC,管理员可以灵活地定义多种存储配置,以满足不同应用程序的存储需求。
    • 用户可以根据PVC的特定需求选择合适的SC进行引用。
  • 可扩展性

    • Kubernetes支持通过插件机制扩展存储功能。
    • 新的存储类型和提供商可以通过实现相应的SC provisioner来集成到Kubernetes中。

PV与SC在Kubernetes中共同构成了持久化存储管理的核心组件。通过定义SC,管理员可以灵活地配置和管理存储资源;而PV则作为具体的存储实体,根据PVC的请求和SC的配置进行动态创建和分配。这种机制使得Kubernetes能够高效地满足Pod的持久化存储需求,同时提供了良好的扩展性和灵活性。

拓展

Nas介绍

NAS(Network Attached Storage)即网络附属存储,是一种专用数据存储服务器。以下是对NAS的详细介绍:

一、定义与功能

NAS被定义为一种特殊的专用数据存储服务器,它通过网络直接连接磁盘储存阵列,从而提供数据和文件服务。NAS将存储设备与服务器彻底分离,集中管理数据,以数据为中心。其内置有存储设备(例如磁盘阵列、CD/DVD驱动器、磁带驱动器或可移动的存储介质)和内嵌系统软件,可支持跨平台文件共享功能。

二、技术特点

  1. 连接性:NAS通常在一个LAN上占有自己的节点,无需应用服务器的干预,允许用户在网络上存取数据。
  2. 协议支持:NAS能够支持多种协议,如NFS、CIFS、FTP、HTTP等,并且能支持各种操作系统。
  3. 简化管理:通过任何一台工作站,采用IE或Netscape浏览器就可以对NAS设备进行直观方便的管理。
  4. 专用操作系统:NAS不依赖通用的操作系统,而是采用一个面向用户设计的、专门用于数据存储的简化操作系统。

三、类型与扩展性

NAS可以根据不同的需求和规模进行分类,如电器型服务器、工作组NAS、中型NAS和大型NAS。这些分类有助于满足不同存储需求和环境。此外,NAS具有一定的扩展性,虽然增加额外的NAS设备容易,但将多个NAS设备的存储空间无缝合并可能相对复杂。

四、应用与优势

NAS在教育、医疗、制造业等多个领域都有广泛的应用。其优势包括:

  1. 数据共享:NAS适用于那些需要通过网络将文件数据传送到多台客户机上的用户,尤其是在数据必须长距离传送的环境中。
  2. 易于部署:NAS设备可以广泛分布在整个企业的网络环境中,易于部署和管理。
  3. 文件级整合:NAS提供可靠的文件级数据整合,因为文件锁定是由设备自身来处理的。
  4. 高效的文件共享:不同的主机与客户端通过文件共享协定存取NAS上的资料,实现文件共享功能。

五、局限性与注意事项

尽管NAS具有诸多优势,但也存在一些局限性:

  1. 网络带宽占用:NAS设备与客户机通过企业网进行连接,数据备份或存储过程中会占用网络的带宽,可能影响其他网络应用。
  2. 可扩展性限制:虽然增加另一台NAS设备容易,但无缝合并存储空间并不容易。
  3. 文件级访问:NAS访问需要经过文件系统格式转换,因此是以文件级来访问的,不适合Block级的应用,尤其是要求使用裸设备的数据库系统。

六、数据安全与隐私保护

为了保护NAS上的数据安全与隐私,需要采取一系列措施:

  1. 数据加密:采用文件级加密、共享文件夹加密或全盘加密等方式来保护数据。
  2. 网络安全设置:启用NAS自带的防火墙,限制不必要的端口访问,并更改默认端口。
  3. 权限管理:为每个用户设置不同的访问权限,如只读、读写等,并启用双重身份验证。
  4. 定期备份:按照“3-2-1”法则备份数据,确保数据在意外情况下不会丢失。

NAS作为一种高效、可靠的数据存储解决方案,在多个领域都有广泛的应用。然而,为了充分发挥其优势并保障数据安全与隐私,需要在使用过程中注意上述局限性和保护措施。

其它

【一起来学kubernetes】8、k8s中的Ephemeral-Storage详解

【设计模式-委托模式】

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐