这个文档描述当前在k8s中PersistentVolumes的使用。 我们建议和volume一起进行了解
 
Introduction 
 
 管理存储和管理计算是截然不同的问题。 持久存储子系统对用户和管理者提供了API, 通过这API, 你可以了解存储是如何提供的,是如何消耗的,为了达到这样的效果,我们将介绍两个新的API:PersistenVolume和PersistenVolumeClaim
 
 
一个 PersistenVolume(PV)是一块在集群中被管理员划定好的网络存储,它就和node的一样,都是cluster的一个资源。 PV相当前Volume的扩展, 只不过有一个独立于任何使用PV的Pod个体的生命周期。这个API捕捉了一个存储实施的细节,这个存储可以是NFS,ISCSI或者cloud-provider-specfifc存储系统
 
一个PersistentVolumeClaim(PVC) 是一个由用户发起的存储请求, 它类似于一个Pod,Pod占用节点资源,PVC消费PV资源。
Pod可以请求不同级别的资源(CPU和内存). Claims可以请求一个特殊的大小和access modes(例如可以挂载一次读写,或者多次只读)的资源
 
 
Lifecycle of a volume and claim
 
PV占用集群资源。 PVC是请求这些资源并充当这些资源的一个提取证,在一个生命周期中,PV和PVC是相互作用的
 
Provisioning
 
一个集群的管理者会创建一些PV,这些PV关注的是能被集群用户使用的真实存储的细节。这些PV存在k8s的API,可以被有效的使用。
 
Binding
 
因为一个指明大小的,有指定access modes的存储请求 , 一个用户会创建一个PersistentVolumeClaim。在master中,使用循环来监视,这样就能发现新的PVC,并且找到一个相匹配的PV(如果可以的话), 然后把他们绑定到一块。用户将总是能得到他们所要求的最少的东西,但是得到的存储可能超过他所要求的。 一旦绑定, 不论什么模式被用来绑定他们,PersistentVolumeClaim的绑定是独有的。
 
如果没有volume可以匹配上的,则Claims会一直保持未绑定状态。当匹配到的volume是有效的时候,Claim将会变为绑定的。 例如,一个集群提供了50G的PV将不会被一个请求100G的PVC所匹配。 当集群提供一个100G的PV的时候,这个PVC将会被绑定。
 
Using
 
Pod把claims当作存储卷。 集群检测claim来发现相绑定的存储卷和pod存储卷的挂载点( mounts that volume for a pod)。 对于支持多种access modes的volume来说, 当用户把claim做为一个pod的volume的时候需要指出想要的mode
 
一旦用户有一个claim并且claim处于绑定状态,这个绑定的PV在用户不解除绑定的时候一直属于该用户。  Users schedule Pods and access their claimed PVs by including a persistentVolumeClaim in their Pod’s volumes block.See below for syntax details. 用户通过在他们的Pod的存储块中包含一个PVC来调度Pod和使用它们请求到的PV
 
Releasing
 
当一个用户使用完了他volume, 可以通过API来删除对应的PVC,这样允许回收资源。 当claim被删除后,这个volume可以被认为是“release"状态, 但是它对其他的claim来说是不可用的。 前一个claim产生的数据会一直在volume中,这必须根据你们的策略进行处理
 
Reclaiming
 
PersistentVolume的回收策略告诉集群,当volume从他所属的claim中被释放后,集群可以对volume做什么。 当前,volume可以保留,回收和删除。 保留允许手动再利用资源。AWS EBS, GCE PD或者Cinder volume这些volume插件支持在k8s中删除PersistenVolume和其关联的在外部基础设施中的存储。(  For those volume plugins that support it, deletion removes both the PersistentVolume object from Kubernetes as well as deletes associated storage asset in external infrastructure such as AWS EBS, GCE PD or Cinder volume.)。 如果有合适的volume插件支持,那么会对volume循环的执行一个基本的擦除命令(rm -rf /tenvoluem/*)来使得他对新的claim变得可用。
 
Tpyes of Persistent Volumes
 
PersistenVolume类型是作为插件(plugin)实现的。k8s当前支持下面这种产检(plugin):
  • GCEPersistentDisk
  • AWSElasticBlockStore
  • AzureFile
  • FC (Fibre Channel)
  • NFS
  • iSCSI
  • RBD (Ceph Block Device)
  • CephFS
  • Cinder (OpenStack block storage)
  • Glusterfs
  • VsphereVolume
  • HostPath (single node testing only – local storage is not supported in any way and WILL NOT WORK in a multi-node cluster)
Persistent Volumes
 
每一个PV都包含一个spec和status,它是volume的规格和status
 
  apiVersion: v1
  kind: PersistentVolume
  metadata:
    name: pv0003
  spec:
    capacity:
      storage: 5Gi
    accessModes:
      - ReadWriteOnce
    persistentVolumeReclaimPolicy: Recycle
    nfs:
      path: /tmp
      server: 172.17.0.2
 
Capacity
 
一个PV都会有一个特定的存储能力,使用PV的capacity来设置。可以参考k8s   Resource Model 来了解capacity想达到的效果( See the Kubernetes Resource Model to understand the units expected by capacity
当前只有存储的大小可以被设置或者被请求,未来可能包括IOPS,throughput等等
 
Access Modes
 
一个PersistentVolume可以被挂在一个主机上通过任何被资源提供者支持的方式。就像下表列出来的一样,提供者有不同的能力,每一个PV的access mode被设置成指定volume所支持的特定的mode。例如,NFS可以支持多次读写的客户端( NFS can support multiple read/write clients),但是一个NFS的PV可能在server上被到处作为只读的。每一个PV通过它自己的access mode设置来描述自己特别的能力
 
access modes的类别为:
  • ReadWriteOnce – the volume can be mounted as read-write by a single node
  • ReadOnlyMany – the volume can be mounted read-only by many nodes
  • ReadWriteMany – the volume can be mounted as read-write by many nodes
缩写为:
  • RWO - ReadWriteOnce
  • ROX - ReadOnlyMany
  • RWX - ReadWriteMany
重要的:一个volume在同一时间,只能使用一种access mode被挂载,即使他支持多个。例如:一个GCEPersistenDisk可以在一个node中作为ReadWriteOnce被挂载或者使用ReadOnlyMany被多个node挂载,但是这两种方式不能同时存在
Volume Plugin ReadWriteOnce ReadOnlyMany ReadWriteMany
AWSElasticBlockStore x - -
AzureFile x x x
CephFS x x x
Cinder x - -
FC x x -
FlexVolume x x -
GCEPersistentDisk x x -
Glusterfs x x x
HostPath x - -
iSCSI x x -
NFS x x x
RDB x x -
VsphereVolume x - -
Recycling Policy
 
当前的回收策略是:
  • Retain – manual reclamation 手工回收
  • Recycle – basic scrub (“rm -rf /thevolume/*”)  基础擦除
  • Delete – associated storage asset such as AWS EBS, GCE PD or OpenStack Cinder volume is deleted
当前,只有NFS和HostPath支持Recycle 。 AWS EBS, GCE PD和Cinder存储卷支持删除
 
Phase
 
一个volumn将是下面状态中的一种
  1. Avaliable - 一个空闲的资源,还没有和claim绑定
  2. Bound - volume已经和claim绑定
  3. Released - 对应的claim已经被删除。但是资源没有被集群回收
  4. Failed --这个volume自动回收失败
The CLI will show the name of the PVC bound to the PV
 
PersistentVolumeClaims
 
每一个PVC都包括一个spec和status, 他是claim的规格和status
 
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: myclaim
spec:

  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 8Gi
  selector:
    matchLabels:
      release: "stable"
    matchExpressions:

      - {key: environment, operator: In, values: [dev]}
Access Modes
 
参照PV access mode
 
Resources
 
Claims和pod一样,可以请求指定数量的资源。这个请求是针对存储的,  resource model 同样适用于volumes和claims
 
Selector
 
Claims可以指定一个label选择器来进一步的过滤设置的volumes。只有通过labels匹配上选择器的volumes才可以和claim绑定
选择器由两部分组成:
  1. matchLabels - volume必须有一个这个样值的label
  2. matchExpressions - values和operator把列出的key和操作符关联起来( a list of requirements made by specifying key, list of values, and operator that relates the key and values),有效的操作符包括In, NotIn,Esxists和DoesNotExist
matchLabels和matchExpressions需要同时匹配( All of the requirements, from both matchLabels and matchExpressions are ANDed together – they must all be satisfied in order to match)
 
Claims As Volumes
 
Pod通过把claim当作volume来使用存储。当Pod使用claim,Claim必须和Pod存在于相同的命名空间。集群在Pod的命名空间查找claim,并使用它得到claim的PersistentVolume( uses it to get the PersistentVolume backing the claim.)
kind: Pod
apiVersion: v1
metadata:
  name: mypod
spec:
  containers:
    - name: myfrontend
      image: dockerfile/nginx
      volumeMounts:
      - mountPath: "/var/www/html"
        name: mypd
  volumes:
    - name: mypd
      persistentVolumeClaim:

        claimName: myclaim
A Note on NameSpaces
  PersistentVolumes的绑定是特殊的,因为PersistentVolumeClaims在一个命名空间下,只有在同一个命名空间下的挂载请求,才能请求相同的ROX RWX( mounting claims with “Many” modes (ROXRWX) is only possible within one namespace.)
 
 
本人翻译是个渣..

k8s pv的更多相关文章

  1. k8s pv,pvc无法删除问题

    一般删除步骤为:先删pod再删pvc最后删pv 但是遇到pv始终处于“Terminating”状态,而且delete不掉.如下图: 解决方法: 直接删除k8s中的记录: 1 kubectl patch ...

  2. k8s pv无法删除问题

    一般删除步骤为:先删pod再删pvc最后删pv 但是遇到pv始终处于“Terminating”状态,而且delete不掉.如下图: 解决方法: 直接删除k8s中的记录: kubectl patch p ...

  3. 【k8s】k8s pv、pvc无法删除问题。

    一般删除步骤为:先删除pod再删除pvc最后删除pv 遇到的问题 但是遇到pv使用处于"Terminating"状态,而且删不掉.如下图: 解决办法 直接删除k8s中的记录: ku ...

  4. K8s PV and PVC and StorageClass

    PVC和PV之间没有依靠ID.名称或者label匹配,而是靠容量和访问模式,PVC的容量和访问模式需要是某个PV的子集才能自动匹配上.注意:PVC和PV是一对一的,也即一个PV被一个PVC自动匹配后, ...

  5. k8s pv 的三种挂载模式

    ReadWriteOnce:可读可写,只能被一个Node节点挂载 ReadWriteMany:可读可写,可以被多个Node节点挂载 ReadOnlyMany:只读,能被多个Node节点挂载

  6. K8S 使用NFS 创建PV和PVC的例子 学习From https://blog.csdn.net/xts_huangxin/article/details/51494472

    1. 获取资料 网址: https://blog.csdn.net/xts_huangxin/article/details/51494472  感谢原作者 这里面 按照自己的机器情况进行了学习模仿 ...

  7. 从零开始入门 K8s | 应用存储和持久化数据卷:存储快照与拓扑调度

    作者 | 至天 阿里巴巴高级研发工程师 一.基本知识 存储快照产生背景 在使用存储时,为了提高数据操作的容错性,我们通常有需要对线上数据进行 snapshot ,以及能快速 restore 的能力.另 ...

  8. k8s使用Glusterfs动态生成pv

    一.环境介绍 [root@k8s-m ~]# cat /etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4 ...

  9. k8s的持久化存储PV&&PVC

    1.PV和PVC的引入 Volume 提供了非常好的数据持久化方案,不过在可管理性上还有不足. 拿前面 AWS EBS 的例子来说,要使用 Volume,Pod 必须事先知道如下信息: 当前 Volu ...

随机推荐

  1. Oracle(创建index)

    概念: 1. 类似书的目录结构 2. Oracle 的“索引”对象,与表关联的可选对象,提高SQL查询语句的速度 3. 索引直接指向包含所查询值的行的位置,减少磁盘I/O 4. 与所索引的表是相互独立 ...

  2. 【树莓派】【转】利用USB网卡配置树莓派为无线热点

    由于Wifi很慢,基本不可用:树莓派有无线网卡,恰好看到有文章用树莓派来做无线热点,利用树莓派来共享无线网络.比较有用,转发后续尝试. 本文转自:https://www.embbnux.com/201 ...

  3. Android高级控件--AdapterView与Adapter

    在J2EE中提供过一种非常好的框架--MVC框架,实现原理:数据模型M(Model)存放数据,利用控制器C(Controller)将数据显示在视图V(View)上.在Android中有这样一种高级控件 ...

  4. C++ STL vector容器学习

    STL(Standard Template Library)标准模板库是C++最重要的组成部分,它提供了一组表示容器.迭代器.函数对象和算法的模板.其中容器是存储类型相同的数据的结构(如vector, ...

  5. UITableView使用

    @多组数据和多组cell 1根数组内含数组时,只可以开启一组cell,内含多个数组时,可以开启多组cell 2多个数组开启多个cell时,既可以竖向开启,也可以横向里层开启,就好比猜题的模式 @注意点 ...

  6. PHPCMS V9 非超级管理员批量移动权限

    第一步:确实存在这个问题,修改方法是在后台->扩展->菜单管理里面,管理内容里面添加子菜单, 第二步:在操作完以上步骤后,再在角色权限管理里面再重新赋权限就可以了

  7. Sql Server如何新建计划任务

    打开Sql Server数据库,在管理中找到维护计划功能,右击维护计划选择维护计划向导.如图所示: 打开维护计划向导后,在第一个步骤下输入计划名称. 输入完计划名称后,点击右下角的更改按钮,这里是配置 ...

  8. MVC5 Entity Framework学习之Entity Framework高级功能(转)

    在之前的文章中,你已经学习了如何实现每个层次结构一个表继承.本节中你将学习使用Entity Framework Code First来开发ASP.NET web应用程序时可以利用的高级功能. 在本节中 ...

  9. sql语句查询服务器的数据库,数据库的全部表和表的全部列

    下面是数据库的结构: 数据库名是:edushi_zixunok;表名是infoArticle --获取所有用户名 SELECT * FROM sys.sysusers --获取所有用户数据库 SELE ...

  10. TEA,XXTEA介绍,对称加密

    总结:在使用加密的时候,我们可以加入随机数,这样相同的明文,每次加密后得到不同的密文,同时可以在密文中加入密文有效期,控制密文的有效时间长度. 针对有的功能扩展使用,很好的思想. TEA对 64 位数 ...