2019独角兽企业重金招聘Python工程师标准>>>

PersistentVolume(简称PV)和PersistentVolumeClaim(简称PVC)

PersistentVolume(持久卷,简称PV)是集群内,由管理员提供的网络存储的一部分。就像集群中的节点一 样,PV也是集群中的一种资源。它也像Volume一样,是一种volume插件,但是它的生命周期却是和使用它的Pod相互独立的。PV这个API对 象,捕获了诸如NFS、ISCSI、或其他云存储系统的实现细节。
PersistentVolumeClaim(持久卷声明,简称PVC)是用户的一种存储请求。它和Pod类似,Pod消耗Node资源,而PVC消耗PV资源。Pod能够请求特定的资源(如CPU和内存)。PVC能够请求指定的大小和访问的模式(可以被映射为一次读写或者多次只读)。
PVC允许用户消耗抽象的存储资源,用户也经常需要各种属性(如性能)的PV。集群管理员需要提供各种各样、不同大小、不同访问模式的PV,而不用向用户暴露这些volume如何实现的细节。因为这种需求,就催生出一种StorageClass资源。
StorageClass提供了一种方式,使得管理员能够描述他提供的存储的等级。集群管理员可以将不同的等级映射到不同的服务等级、不同的后端策略。

供给
PV是集群中的资源,PVC是对这些资源的请求,同时也是这些资源的“提取证”。PV和PVC的交互遵循以下生命周期:

有两种PV提供的方式:静态和动态。

静态
集群管理员创建多个PV,它们携带着真实存储的详细信息,这些存储对于集群用户是可用的。它们存在于Kubernetes API中,并可用于存储使用。
apiVersion: v1
kind: PersistentVolume
metadata:
    name: pv01
    namespace: sit
spec:
    capacity:
      storage: 100Gi
    accessModes:
      - ReadWriteOnce
    persistentVolumeReclaimPolicy: Recycle
    nfs:
        server: 10.42.0.55
        path: "/opt/public"
动态
当管理员创建的静态PV都不匹配用户的PVC时,集群可能会尝试专门地供给volume给PVC。这种供给基于StorageClass:PVC必须请求这样一个等级,而管理员必须已经创建和配置过这样一个等级,以备发生这种动态供给的情况。请求等级配置为“”的PVC,有效地禁用了它自身的动态供给功能。
Kubernetes 1.4 中加入了一个 新的 API 对象 StorageClass,可以定义多个 StorageClass 对象,并可以分别指定存储插件、设置参数,用于提供不同的存储卷。这样的设计让集群管理员能够在同一个集群内,定义和提供不同类型的、不同参数的卷(相同或者不同的存储系统)。这样的设计还确保了最终用户在无需了解太多的情况下,有能力选择不同的存储选项。
这种场景比较常见的是使用在高级的私有云分布式存储或者公有云存储情况下,大多数是集成第三方的
举例:创建一个slow,另外一个fast的盘在谷歌云上
kind: StorageClass
apiVersion: storage.k8s.io/v1beta1
metadata:
  name: slow
provisioner: kubernetes.io/gce-pd
parameters:
  type: pd-standard

kind: StorageClass
apiVersion: storage.k8s.io/v1beta1
metadata:
  name: fast
provisioner: kubernetes.io/gce-pd
parameters:
  type: pd-ssd

绑定
用户创建一个PVC(或者之前就已经就为动态供给创建了),指定要求存储的大小和访问模式。master中有一个控制回路用于监控新的PVC, 查找匹配的PV(如果有),并把PVC和PV绑定在一起。如果一个PV曾经动态供给到了一个新的PVC,那么这个回路会一直绑定这个PV和PVC。另外, 用户总是至少能得到它们所要求的存储,但是volume可能超过它们的请求。一旦绑定了,PVC绑定就是专属的,无论它们的绑定模式是什么。
如果没找到匹配的PV,那么PVC会无限期得处于unbound未绑定状态,一旦PV可用了,PVC就会又变成绑定状态。比如,如果一个供给了很多50G的PV集群,不会匹配要求100G的PVC。直到100G的PV添加到该集群时,PVC才会被绑定。
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: pvc-test01
  namespace:
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 100Gi
使用
Pod使用PVC就像使用volume一样。集群检查PVC,查找绑定的PV,并映射PV给Pod。对于支持多种访问模式的PV,用户可以指定想用的模式。
一旦用户拥有了一个PVC,并且PVC被绑定,那么只要用户还需要,PV就一直属于这个用户。用户调度Pod,通过在Pod的volume块中包含PVC来访问PV。
kind: Pod
apiVersion: v1
metadata:
  name: task-pv-pod
spec:
  volumes:
    - name: task-pv-storage
      persistentVolumeClaim:
       claimName: pvc-test01
  containers:
    - name: task-pv-container
      image: nginx
      ports:
        - containerPort: 80
          name: "http-server"
      volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: task-pv-storage

释放
当用户使用PV完毕后,他们可以通过API来删除PVC对象。当PVC被删除后,对应的PV就被认为是已经是“released”了,但还不能再给另外一个PVC使用。前一个PVC的属于还存在于该PV中,必须根据策略来处理掉。

回收
PV的回收策略告诉集群,在PV被释放之后集群应该如何处理该PV。当前,PV可以被Retained(保留)、 Recycled(再利用)或者Deleted(删除)。保留允许手动地再次声明资源。对于支持删除操作的PV卷,删除操作会从Kubernetes中移 除PV对象,还有对应的外部存储(如AWS EBS,GCE PD,Azure Disk,或者Cinder volume)。动态供给的卷总是会被删除。

参考:

https://kubernetes.io/blog/2017/03/dynamic-provisioning-and-storage-classes-kubernetes

https://kubernetes.io/docs/tasks/configure-pod-container/configure-persistent-volume-storage/

转载于:https://my.oschina.net/gibsonxue/blog/1793110

Kubernetes PV/PVC/StroageClass 持久化存储简介相关推荐

  1. [Kubernetes]PV,PVC,StorageClass实战----|||

    第一篇: [Kubernetes]PV,PVC,StorageClass实战----| 第二篇: [Kubernetes]PV,PVC,StorageClass实战----|| 官网 Storage ...

  2. k8s-----(| 三 |)存储Volume卷,PV / PVC,nfs持久化

    文章目录 一. 存储Volume 卷 1. emptyDir本地临时卷 2. hostPath 本地卷 二 . PV/PVC 1. 概念 2. PV 一些概念 (1)PV 的类型(插件) (2)访问模 ...

  3. k8s mysql pv_k8s+mysql+pv+pvc+NFS实现mysql容器编排

    k8s+mysql+pv+pvc+NFS实现mysql容器编排 首先需要介绍概念:pv和pvc PV 是集群提供的一种存储资源,是实际可用的磁盘.和挂 PV 的 Pod 有着独立的生命周期,Pod 销 ...

  4. k8s-应用编排和持久化存储

    第六章.应用编排与管理(Deployment) 6.1.引入 背景:我们可以直接管理集群中所有的Pod吗? 如果这样做,以下的问题有什么方式来解决? 1)如何保证集群内可用Pod的数量 2)如何为所有 ...

  5. mysql在k8s集群中的搭建并且实现持久化存储

    文章目录 前言 一.准备工作 环境搭建 编写yaml文件 1.创建PV 2.创建PVC 3.创建mysql-pod 4.创建SVC 使用Navicat测试连接 测试数据是否会丢失 1.手动删除节点上的 ...

  6. Kubernetes持久化存储PV、PVC和StorageClass介绍

    PV和PVC Kubernetes Volume提供了非常好的数据持久化方案,不过对于大型Kubernetes集群来说管理上还有不方便之处.Volume方案需要创建Pod或者Deployment的管理 ...

  7. 02.Kubernetes 和 KubeSphere 集群安装配置持久化存储(nfs)并通过StatefulSet动态为pod生成pv挂载

    Kubernetes 和 KubeSphere 集群安装配置持久化存储(nfs)并通过StatefulSet动态为pod生成pv挂载 简介 1. 安装配置前置环境 1.1 安装nfs文件系统 1.1. ...

  8. k8s学习-持久化存储(Volumes、hostPath、emptyDir、PV、PVC)详解与实战

    目录 概念 Volumes ConfigMap && Secret hostPath 模版 emptyDir 模版 PV 模版 PVC 模版 实战 volumes - hostPath ...

  9. 【k8s的持久化存储】PV、PVC、StorageClass讲解

    一.PV和PVC的引入 Volume 提供了非常好的数据持久化方案,不过在可管理性上还有不足. Pod 通常是由应用的开发人员维护,而 Volume 则通常是由存储系统的管理员维护.开发人员要获得上面 ...

最新文章

  1. ajax hapi上传文件,javascript – hapi.js Cors Pre-flight不返回Access-Control-Allow-Origin标头...
  2. 服务器更改文件夹权限,云服务器如何修改文件权限
  3. iOS之NSString类中compare方法的陷阱
  4. iOS提交应用至App Store流程及真机调试 一,证书、配置文件
  5. 剑指offer--剪绳子
  6. python 发送邮件不显示附件_python3发送邮件(无附件)
  7. 如何离线安装chrome插件
  8. python自定义函数参数_python自定义函数的参数之四种表现形式
  9. node.js 程序_如何不使用外部程序包创建Node.js Web应用程序
  10. LVS+Heartbeat+Ipvsadm+Ldirectord安装 (一)
  11. TkMybatis 笔记
  12. 解决element el-pagination分页最后一页数据清空了页码显示正确,但是列表为空
  13. Let 's watch TV
  14. 工具-常识-证件照使用底色的RGB,红白蓝底色,护眼色
  15. Jetty插件运行报500错误
  16. 友价源码怎么样主动提交链接给百度?
  17. css中的z-index层级问题
  18. 有哪些比较好用的wordpress白标后台的插件
  19. 网站白天or黑夜切换在重新加载时闪烁白色背景的解决思路
  20. VC 怎么获取windows7系统管理员权限

热门文章

  1. android studio service directory path,Android Studio User目录缓存搬移到指定目录
  2. db2数据库日期减一天_DB2 日期时间函数
  3. 为什么input中的maxlength属性失效了
  4. JPA的单向一对多关联(oneToMany)实现示例(基于Spring Boot + JPA +MySQL,表自动维护)
  5. php 破解加密帖子,某PHP加密文件解密过程初探 · 浮萍’s Blog
  6. python中的装饰器、装饰器模式_浅析Python装饰器以及装饰器模式
  7. qq手机电脑消息同步_手机与电脑间如何实现文件自动同步?
  8. 挑选回文串(二进制枚举)
  9. CentOS:linux开放指定端口命令
  10. mysql自主增长键_mysql中关于自增长主键的获取