Kubernetes必备知识: PersistentVolumeClaim

简介: PersistentVolumeClaim(简称PVC)是用户存储的请求,PVC消耗PV的资源,可以请求特定的大小和访问模式,需要指定归属于某个Namespace,在同一个Namespace的Pod才可以指定对应的PVC。当需要不同性质的PV来满足存储需求时,可以使用StorageClass来实现。每个 PVC 中都包含一个 spec 规格字段和一个 status 声明状态字段。

所属技术领域:

K8s

|名词定义|

PersistentVolumeClaim(简称PVC)是用户存储的请求,PVC消耗PV的资源,可以请求特定的大小和访问模式,需要指定归属于某个Namespace,在同一个Namespace的Pod才可以指定对应的PVC。
当需要不同性质的PV来满足存储需求时,可以使用StorageClass来实现。
每个 PVC 中都包含一个 spec 规格字段和一个 status 声明状态字段。

|技术特点|

 有了PV,为什么又设计了PVC?
1.职责分离,PVC中只用声明自己需要的存储size、access mode(单node独占还是多node共享?只读还是读写访问?)等业务真正关心的存储需求(不用关心存储实现细节),PV和其对应的后端存储信息则由交给cluster admin统一运维和管控,安全访问策略更容易控制。
2.PVC简化了User对存储的需求,PV才是存储的实际信息的承载体,通过kube-controller-manager中的persistentVolumeController将PVC与合适的PV bound到一起,从而满足User 对存储的实际需求。
3.PVC像是面向对对象编程中抽象出来的接口,PV是接口对应的实现。
 创建PVC
图片.png

PVC 的文件里存储的大小、访问模式是不变的。现在需要新加一个字段,叫 StorageClassName,它的意思是指定动态创建 PV 的模板文件的名字,这里 StorageClassName 填的就是上面声明的 csi-disk。

在提交完 PVC之后,K8s 集群中的相关组件就会根据 PVC 以及对应的 StorageClass 动态生成这块 PV 给这个 PVC 做一个绑定,之后用户在提交自己的 yaml 时,用法和接下来的流程和前面的静态使用方式是一样的,通过 PVC 找到我们动态创建的 PV,然后把它挂载到相应的容器中就可以使用了。
 PVC 的 yaml
图片.png

写的是我需要的大小以及我需要的 accessModes。提交完之后,它就与我们集群中已经存在的 PV 做匹配,匹配成功之后,它就会做 bound。
 PVC 的处理流程
图片.png

csi 是什么?csi 的全称是 container storage interface,它是 K8s 社区后面对存储插件实现 ( out of tree ) 的官方推荐方式。
接下来看一下,当用户提交 yaml 之后,k8s 内部的处理流程。用户在提交 PVCyaml 的时候,首先会在集群中生成一个 PVC 对象,然后 PVC 对象会被 csi-provisioner controller watch 到,csi-provisioner 会结合 PVC 对象以及 PVC 对象中声明的 storageClass,通过 GRPC 调用 csi-controller-server,然后,到云存储服务这边去创建真正的存储,并最终创建出来 PV 对象。最后,由集群中的 PV controller 将 PVC 和 PV 对象做 bound 之后,这个 PV 就可以被使用了。

用户在提交 pod 之后,首先会被调度器调度选中某一个合适的node,之后该 node 上面的 kubelet 在创建 pod 流程中会通过首先 csi-node-server 将我们之前创建的 PV 挂载到我们 pod 可以使用的路径,然后 kubelet 开始 create && start pod 中的所有 container。

|资料来源|

名词定义:https://blog.csdn.net/huwh_/article/details/96016049

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
7月前
|
存储 Kubernetes 监控
【云原生】Kubernetes----PersistentVolume(PV)与PersistentVolumeClaim(PVC)详解
【云原生】Kubernetes----PersistentVolume(PV)与PersistentVolumeClaim(PVC)详解
|
Kubernetes 网络协议 应用服务中间件
Kubernetes必备知识: Kubernetes资源模型limits
Limits 是 Pod 能使用的资源上限,是实际配置到内核 cgroups 里面的配置数据。对于内存来说,会直接转换成 docker run 命令行的--memory大小,最终会配置到 cgroups 对应任务的/sys/fs/cgroup/memory/……/memory.limit_in_bytes 文件中。
1269 0
Kubernetes必备知识: Kubernetes资源模型limits
|
canal Kubernetes 负载均衡
Kubernetes必备知识: 主流网络方案
常见的容器网络方案可以从协议栈层级、穿越形态、隔离方式这三种形式进行划分。 协议栈层级: 第一种:协议栈二层。 第二种:协议栈三层(纯路由转发)。 第三种:协议栈二层加三层。
1098 0
Kubernetes必备知识: 主流网络方案
|
Kubernetes 算法 容灾
Kubernetes必备知识: 调度流程
scheduler 是k8s master的一部分,作为插件存在于k8s生态体系。
926 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
738 0
Kubernetes必备知识: 容器接口CRI
|
Kubernetes 算法 API
Kubernetes必备知识: 配置调度器
Kubernetes调度程序是一项策略丰富,可感知拓扑,特定于工作负载的功能,会显着显著影响可用性,性能和容量。调度程序需要考虑单个和集体的资源需求,服务质量需求,硬件/软件/策略约束,亲和力和反亲和力规范,数据位置,工作负载间的干扰,期限等。特定于工作负载的需求将在必要时通过API公开。
612 0
Kubernetes必备知识: 配置调度器
|
数据采集 缓存 Kubernetes
Kubernetes必备知识: 扩展调度器
Kubernetes 自带了一个默认调度器kube-scheduler,其内置了很多节点预选和优选的调度算法,一般调度场景下可以满足要求。但是在一些特殊场景下,默认调度器不能满足我们复杂的调度需求。我们就需要对调度器进行扩展,以达到调度适合业务场景的目的。
1006 0
Kubernetes必备知识: 扩展调度器
|
存储 Kubernetes 容器
Kubernetes必备知识: StorageClass
StorageClass提供了一种描述存储类(class)的方法,不同的class可能会映射到不同的服务质量等级和备份策略或其他策略等。 StorageClass 对象中包含 provisioner、parameters 和 reclaimPolicy 字段,当需要动态分配 PersistentVolume 时会使用到。当创建 StorageClass 对象时,设置名称和其他参数,一旦创建了对象就不能再对其更新。也可以为没有申请绑定到特定 class 的 PVC 指定一个默认的 StorageClass 。
1991 0
Kubernetes必备知识: StorageClass
|
存储 Kubernetes 网络协议
Kubernetes必备知识: StatefulSet
StatefulSet是为了解决有状态服务的问题(对应Deployments和ReplicaSets是为无状态服务而设计),其应用场景包括  稳定的持久化存储,即Pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现  稳定的网络标志,即Pod重新调度后其PodName和HostName不变,基于Headless Service(即没有Cluster IP的Service)来实现  有序部署,有序扩展,即Pod是有顺序的
723 0
Kubernetes必备知识: StatefulSet
|
Kubernetes 网络协议 安全
Kubernetes必备知识: pod网络模型
k8s对Pods之间如何进行组网通信提出了要求,k8s对集群的网络有以下要求: • 所有的Pods之间可以在不使用NAT网络地址转换的情况下相互通信 • 所有的Nodes之间可以在不使用NAT网络地址转换的情况下相互通信 • 每个Pod自己看到的自己的ip和其他Pod看到的一致
3853 0
Kubernetes必备知识: pod网络模型
下一篇
DataWorks