Kubernetes必备知识:PersistentVolume

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: PersistentVolume(PV)用于为用户和管理员提供如何提供和消费存储的API,PV由管理员在集群中提供的存储。它就像Node一样是集群中的一种资源。PersistentVolume 也是和存储卷一样的一种插件,但其有着自己独立的生命周期。PersistentVolumeClaim (PVC)是用户对存储的请求,类似于Pod消费Node资源,PVC消费PV资源。Pod能够请求特定的资源(CPU和内存),声明请求特定的存储大小和访问模式。PV是一个系统的资源,因此没有所属的命名空间。

所属技术领域:

K8s

|名词定义|

PersistentVolume(PV)用于为用户和管理员提供如何提供和消费存储的API,PV由管理员在集群中提供的存储。它就像Node一样是集群中的一种资源。PersistentVolume 也是和存储卷一样的一种插件,但其有着自己独立的生命周期。PersistentVolumeClaim (PVC)是用户对存储的请求,类似于Pod消费Node资源,PVC消费PV资源。Pod能够请求特定的资源(CPU和内存),声明请求特定的存储大小和访问模式。PV是一个系统的资源,因此没有所属的命名空间。

|技术特点|

 为什么又要引入 PV 呢?
我们知道 pod 中声明的 volume 生命周期与 pod 是相同的,以下有几种常见的场景:
1.pod 销毁重建(如Deployment管理的Pod镜像升级)
2.宿主机故障迁移(如StatefulSet管理的Pod带远程volume迁移)
3.多个 pod共享一个数据volume
4.数据volume snapshot,resize等功能的扩展实现
以上场景中,通过 Pod Volumes 很难准确地表达它的复用/共享语义,对它的扩展也比较困难。因此 K8s 中又引入了 Persistent Volumes 概念,它可以将存储和计算分离,通过不同的组件来管理存储资源和计算资源,然后解耦 pod 和 Volume 之间生命周期的关联。这样,当把 pod 删除之后,它使用的 PV 仍然存在,还可以被新建的 pod 复用。
 PV对象的产生
1.Static Volume Provisioning
静态 Provisioning:由集群管理员事先去规划这个集群中的用户会怎样使用存储,它会先预分配一些存储,也就是预先创建一些 PV;然后用户在提交自己的存储需求(也就是 PVC)的时候,K8s 内部相关组件会帮助它把 PVC 和 PV 做绑定;之后用户再通过 pod 去使用存储的时候,就可以通过 PVC 找到相应的 PV,它就可以使用了。
2.Dynamic Volume Provisioning
动态供给是什么意思呢?就是说现在集群管理员不预分配 PV,他写了一个模板文件,这个模板文件是用来表示创建某一类型存储(块存储,文件存储等)所需的一些参数,这些参数是用户不关心的,给存储本身实现有关的参数。用户只需要提交自身的存储需求,也就是 PVC 文件,并在 PVC 中指定使用的存储模板(StorageClass)。
 PV Spec 重要字段解析
Capacity:存储总空间;
AccessModes:也是用户需要关心的,就是说我使用这个 PV 的方式。它有三种使用方式。
 ReadWriteOnce只允许单 node 访问;
 ReadOnlyMany允许多个node只读访问
 ReadWriteMany允许多node读写访问
一个PV可以设置多个访问策略,PVC与PV bound时,PV Controller会优先找到AccessModes列表最短并且匹配PVC AccessModes列表的PV集合,然后从该集合中找到Capacity最小且最符合PVC size需求的PV对象。
PersistentVolumeReclaimPolicy:PV被release之后(与之bound的PVC被删除)回收再利用策略
 Recycle(已废弃)
 Delete:volume被released之后直接delete,需要volume plugin支持
 Retain:默认策略,由系统管理员来手动管理该volume
StorageClassName:PVC可通过该字段找到相同值的字段的PV(静态provisioning),也可通过该字段对应的storageclass从而动态provisioning新PV对象PVC
NodeAffinity:限制可以访问该volume的nodes,对使用该volume的pod的调度有影响(因为使用该volume的pod只能调度能访问该PV的node上才能正常工作)

|资料来源|

名词定义:https://blog.csdn.net/bbwangj/article/details/82355337

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
存储 Kubernetes 安全
Kubernetes必备知识: PersistentVolumeClaim
PersistentVolumeClaim(简称PVC)是用户存储的请求,PVC消耗PV的资源,可以请求特定的大小和访问模式,需要指定归属于某个Namespace,在同一个Namespace的Pod才可以指定对应的PVC。 当需要不同性质的PV来满足存储需求时,可以使用StorageClass来实现。 每个 PVC 中都包含一个 spec 规格字段和一个 status 声明状态字段。
3722 0
Kubernetes必备知识: PersistentVolumeClaim
|
canal Kubernetes 负载均衡
Kubernetes必备知识: 主流网络方案
常见的容器网络方案可以从协议栈层级、穿越形态、隔离方式这三种形式进行划分。 协议栈层级: 第一种:协议栈二层。 第二种:协议栈三层(纯路由转发)。 第三种:协议栈二层加三层。
1087 0
Kubernetes必备知识: 主流网络方案
|
Kubernetes 算法 容灾
Kubernetes必备知识: 调度流程
scheduler 是k8s master的一部分,作为插件存在于k8s生态体系。
917 0
Kubernetes必备知识: 调度流程
|
存储 Kubernetes Linux
Kubernetes必备知识: 容器接口CRI
每种容器运行时各有所长,许多用户都希望Kubernetes支持更多的运行时。在Kubernetes 1.5发布版里,我们引入了CRI–一个能让kubelet无需编译就可以支持多种容器运行时的插件接口。CRI包含了一组protocol buffers,gRPC API,相关的库,以及在活跃开发下的额外规范和工具。CRI目前是Alpha版本。 支持可替换的容器运行时在Kubernetes中概念中并非首次。在1.3发布版里,我们介绍了rktnetes项目,它可以让rkt容器引擎作为Docker容器运行时的一个备选。然而,不管是Docker还是Rkt都需要通过内部、不太稳定的接口直接集成到kubele
729 0
Kubernetes必备知识: 容器接口CRI
|
Kubernetes 算法 API
Kubernetes必备知识: 配置调度器
Kubernetes调度程序是一项策略丰富,可感知拓扑,特定于工作负载的功能,会显着显著影响可用性,性能和容量。调度程序需要考虑单个和集体的资源需求,服务质量需求,硬件/软件/策略约束,亲和力和反亲和力规范,数据位置,工作负载间的干扰,期限等。特定于工作负载的需求将在必要时通过API公开。
603 0
Kubernetes必备知识: 配置调度器
|
数据采集 缓存 Kubernetes
Kubernetes必备知识: 扩展调度器
Kubernetes 自带了一个默认调度器kube-scheduler,其内置了很多节点预选和优选的调度算法,一般调度场景下可以满足要求。但是在一些特殊场景下,默认调度器不能满足我们复杂的调度需求。我们就需要对调度器进行扩展,以达到调度适合业务场景的目的。
987 0
Kubernetes必备知识: 扩展调度器
|
存储 Kubernetes 容器
Kubernetes必备知识: StorageClass
StorageClass提供了一种描述存储类(class)的方法,不同的class可能会映射到不同的服务质量等级和备份策略或其他策略等。 StorageClass 对象中包含 provisioner、parameters 和 reclaimPolicy 字段,当需要动态分配 PersistentVolume 时会使用到。当创建 StorageClass 对象时,设置名称和其他参数,一旦创建了对象就不能再对其更新。也可以为没有申请绑定到特定 class 的 PVC 指定一个默认的 StorageClass 。
1965 0
Kubernetes必备知识: StorageClass
|
存储 Kubernetes 网络协议
Kubernetes必备知识: StatefulSet
StatefulSet是为了解决有状态服务的问题(对应Deployments和ReplicaSets是为无状态服务而设计),其应用场景包括  稳定的持久化存储,即Pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现  稳定的网络标志,即Pod重新调度后其PodName和HostName不变,基于Headless Service(即没有Cluster IP的Service)来实现  有序部署,有序扩展,即Pod是有顺序的
709 0
Kubernetes必备知识: StatefulSet
|
Kubernetes 网络协议 安全
Kubernetes必备知识: pod网络模型
k8s对Pods之间如何进行组网通信提出了要求,k8s对集群的网络有以下要求: • 所有的Pods之间可以在不使用NAT网络地址转换的情况下相互通信 • 所有的Nodes之间可以在不使用NAT网络地址转换的情况下相互通信 • 每个Pod自己看到的自己的ip和其他Pod看到的一致
3769 0
Kubernetes必备知识: pod网络模型

推荐镜像

更多