这个文档描述当前在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. Thinkphp各大支付平台在线支付集成源码

    用Thinkphp给客户开发网站的时候需要用到各大平台付款功能,下面就免费分享给大家,此类是个成熟类,网上down下来的,经过修改测试了(可以直接拿来使用,附带使用方法,有需要的朋友请拿走.),如果有 ...

  2. A simple script to get all pictures

    #-*- coding:utf-8 -*- import shutil import os from Tkinter import * import time import re def get_al ...

  3. HTML中使背景图片自适应浏览器大小

    由于<body>标签的图片不能够拉伸, 解决办法: 1.图片不够大,又background属性不能拉伸图片: 2.只能用个div,把其z-index值设为负,并使这个div大小为整个bod ...

  4. MarkDown常用语法记录

    目录 1. 斜体和粗体 2. 分级标题 3. 超链接 3.1 行内式(推荐) 3.2 行外式 3.3 自动链接 4. 锚点 5. 列表 5.1无序列表 5.2有序列表 6. 引用 7. 插入图像 8. ...

  5. ps中的位图,矢量图,颜色模式

    什么是位图?什么是矢量图? 位图是由像素组成的图像,在缩放和旋转的时候容易失真,同时文件容量较大 矢量图是根据几何特性来绘制的图形,通过数学公式计算获得的,不易制作色彩变化太多的图象 颜色模式 RGB ...

  6. 重写toString()方法来描述一个类

    package com.zch.test; /* toString方法以及重写toString方法 toString方法是一个自我描述方法 方法本身返回的是该对象的实现类的 类名 + @ + hash ...

  7. apache虚拟主机访问原理

    www.a.com www.b.org www.c.net 都放在10.0.0.10这个服务器上 那么客户访问这三个域名 服务器是怎么分辨访问的是哪个目录呢 GET http://download.m ...

  8. IRLS(迭代加权最小二乘)

    IRLS用于解决这种目标函数的优化问题(实际上是用2范数来近似替代p范数,特殊的如1范数). 可将其等价变形为加权的线性最小二乘问题: 其中W(t)可看成对角矩阵,每步的w可用下面的序列代替 如果 p ...

  9. UGUI text image 等加Shadow OutLine等

    Text,文本控件,同NGUI中的Label.支持动态字库.大小调节.富文本(基本的html标签格式)等等.描边.阴影等需要Effect组件支持.Add Component-->UI--> ...

  10. 用Broadcast广播在activity之间、fragment之间、activity和fragment之间相互传数据

    例如:A界面要收到B界面的更变信息 一.A界面注册广播 private static final String INTENT_BROADCAST = "android.intent.acti ...