首页 科技正文

欧博亚洲客户端:K8S-PV和PVC的原理和实践

admin 科技 2020-06-07 40 0

一、什么是PV和PVC?

PV的全称是Persistent Volume,翻译过来为持久化存储卷,是对底层的共享存储的一种抽象,PV由管理员举行建立和设置,主要含存储能力、接见模式、存储类型、接纳计谋、后端存储类型等主要信息,它和详细的底层的共享存储手艺的实现方式有关,好比NFS、Hostpath、RBD等。

PVC的全称是: PersistenVolumeClaim (持久化卷声明),PVC是用户存储的一种声明,PVC和Pod类似,Pod是消耗节点node资源,PVC消耗的是PV资源,Pod可以请求CPU的内存,而PVC可以请求特定的存储空间和接见模式。

二、PV和PVC的使用场景

 

 

 配图来自K8S权威指南第四版

 

 存储工程师把分布式存储系统上的总空间划分成一个一个小的存储块,K8S的集群管理员将存储块和PV举行一一对应,用户通过PVC对对存储举行申请,好比可以指定详细容量的巨细,接见模式或者存储类型,这样的利益是用户不需要体贴底层的存储实现细节,只需要直接申请使用PVC即可,若申请的PVC所对应的PV不能知足用户的要求,不会生效,直到有合适的PV天生,PVC会自动与PV完成绑定,存储工程师、K8S管理员,用户之间营业解耦,灵活性更强。

 

三、建立PV

PV支持多种差别类型的存储,如:NFS、hostpath、RBD、ICCSI,本文以hostpath为例先容若何建立PV

第一步:现在宿主机data目录下data/pod/volume1,volume1将作为PV对应的hostpath内陆存储的目录

第二步:通过yaml文件建立PV

 1 [root@k8s-master zhanglei]# cat pv-hostpath.yaml  2 kind: PersistentVolume #指定为PV类型  3 apiVersion: v1  4 metadata:  5   name: pv-statefulset #指定PV的名称  6  labels: #指定PV的标签  7  release: stable  8 spec:  9  capacity: 10     storage: 0.1Gi #指定PV的容量 11  accessModes: 12     - ReadWriteOnce #指定PV的接见模式,简写为RWO,只支持挂在1个Pod的读和写 13  persistentVolumeReclaimPolicy: Recycle #指定PV的接纳计谋,Recycle表示支持接纳,接纳完成后支持再次行使 14  hostPath: #指定PV的存储类型,本文是以hostpath为例 15     path: /data/pod/volume1 #指定PV对应后端存储hostpath的目录

说明:

 accessModes支持多种接见模式

1)ReadWriteOnce(RWO):读写权限,然则只支持挂载在1个Pod

2)ReadOnlyMany(ROX):只读权限,支持挂载在多个Pod

3)ReadWriteMany(RW):读写权限,支持挂载在多个Pod上

persistentVolumeReclaimPolicy的计谋,指的是若是PVC被释放掉后,PV的处置,这里所说的释放,指的是用户删除PVC后,与PVC对应的PV会被释放掉,PVC个PV是一一对应的关系

1)Retain,PV的数据不会清算,会保留volume,若是需要清算,需要手动举行

2)Recycle,会将数据举行清算,即 rm -rf /thevolume/*(只有 NFS 和 HostPath 支持),清算完成后,PV会呈available状态,支持再次的bound

3)Delete,删除存储资源,会删除PV及后端的存储资源,好比删除 AWS EBS 卷(只有 AWS EBS, GCE PD, Azure Disk 和 Cinder 支持)

四、建立PVC

[root@k8s-master zhanglei]# cat pvc-hostpath.yaml 
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mppvc-01                  # 指定PVC的名称
  namespace: default
spec:
 accessModes: ["ReadWriteOnce"]    # 指定PVC的接见模式
 resources:
   requests: 
     storage: 0.05Gi               # PVC申请的容量

说明:

1)PVC声明晰accessModes接见类型为ReadWriteOnce,建立后,系统会自动去找能够支持ReadWriteOnce接见类型的PV,若无相符条件的PV,则不会举行绑定,

2)PVC声明晰storage的巨细为0.05Gi,建立后,系统会自动去找能够支持此容量的PV,通常PV的容量至少要大于或者即是0.05Gi才会去举行绑定

从这里来看,对于用户来说,即只需要声明接见类型、容量、另外还可通过StorageClass声明详细的PV类型即可完成对持久化存储卷的申请,而不需要去维护和关注后端存储

五、查询PV和PVC的

经由前面的步骤我们建立了PV和PVC,现在来看下两者是否已经完成了绑定,在PV的建立已经指定了其名称为pv-statefulset,PVC的名称为mppvc-01

 

 

[root@k8s-master zhanglei]# kubectl get pv |grep pv-statefulset
pv-statefulset      107374182400m   RWO            Recycle          Bound    default/mppvc-01 

 

[root@k8s-master zhanglei]# kubectl get pvc |grep mppvc-01
mppvc-01                            Bound    pv-statefulset      107374182400m   RWO                           13d

可以看到pv-statefulset这个PV已经和mppvc-01的PVC举行了绑定(Bound),RWO和Recycle也是之前PV和PVC声明的状态,说明绑定乐成

  
[root@k8s-master zhanglei]# kubectl describe pv pv-statefulset
Name:            pv-statefulset
Labels:          release=stable
Annotations:     pv.kubernetes.io/bound-by-controller: yes
Finalizers:      [kubernetes.io/pv-protection]
StorageClass:    
Status:          Bound
Claim:           default/mppvc-01
Reclaim Policy:  Recycle
Access Modes:    RWO
VolumeMode:      Filesystem
Capacity:        107374182400m
Node Affinity:   <none>
Message:         
Source:
    Type:          HostPath (bare host directory volume)
    Path:          /data/pod/volume1
    HostPathType:  
Events:            <none>
[root@k8s-master zhanglei]# kubectl describe pvc mppvc-01
Name:          mppvc-01
Namespace:     default
StorageClass:  
Status:        Bound
Volume:        pv-statefulset
Labels:        <none>
Annotations:   pv.kubernetes.io/bind-completed: yes
               pv.kubernetes.io/bound-by-controller: yes
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:      107374182400m
Access Modes:  RWO
VolumeMode:    Filesystem
Mounted By:    <none>
Events:        <none>

再来看下PV的详细(describe)信息,可以看到type是hostpath类型,显示了数据卷在宿主机的/data/pod/volume1的目录。

 

六、总结

建立PV和PVC分为二步:

第一步:建立PV,支持自定义差别的存储巨细和接见模式(RWX,RWO)、存放路径、后端服务server(如hostpath、或NAS盘的数据盘的挂载点)

第二步:建立PVC,绑定到PV。建立PVC的时刻可以指定PVC的request storage,即申请的存储的容量,会凭据申请的storage和接见模式自动匹配相符要求的PV

建立完PV和PVC主要是为了使用它来到达实现持久化存储的目的,若何举行使用请看本作者后续与statufulset有关的文章,谢谢阅读~

 

作者简介:云盘算容器\K8S偏向产物司理,学点手艺,为更好地设计产物。

,

欧博开户

www.antaijc.com欢迎进入欧博开户平台(Allbet Game),欧博开户平台开放欧博会员开户、欧博代理开户、欧博电脑客户端下载、欧博手机版下载等业务。

版权声明

本文仅代表作者观点,
不代表本站AllbetGaming的立场。
本文系作者授权发表,未经许可,不得转载。

评论