选择PersistentVolume还

本文目录

存储卷和持久卷简介

静态pv

动态pv和StorageClass

一、存储卷作用

Container中的文件在磁盘上是临时存放的,当容器崩溃时,kubelet会重新启动容器,但容器会以干净的状态重启造成文件数据丢失;

同一个pod运行多个容器需要共享数据文件或同一个控制器下的多个pod需要共享文件数据;

二、Volume和PersistenVolume区别

Volume可以实现本地存储和网络存储;

1.本地存储

emptyDir:实现一个pod内部多个容器数据共享;

hostpath:可以把Node文件系统的文件或者目录挂载到Pod中的容器;

2.网络存储

例如nfs:

pod是临时的,pod调度到其他node节点的时候依然可以使用挂载卷的数据;

保证所有pod获取数据一致性;

pod挂了不会影响数据,保证数据安全性;

在宿主机器可以随便修改pod内的数据;

3.Volume实现的网络存储缺点

nfs存储地址需要写进应用的配置文件,暴露网络存储的ip信息,相对不安全;如下例子是部署某个应用配置的网络存储信息,应用部署yaml文件直接使用nfsIP:

4.PersistentVolume优点

PersistenVolume(PV)是对存储资源创建和使用的抽象,使得存储作为集群中的资源管理;

在应用部署文件中,不需要写nfs地址IP,而是把这块单独抽离出来,在应用配置文件使用这个资源名称;

PVC定义使用存储的信息,如访问方式、申请的存储大小;

应用直接引用pvc的名称,既可以使用所需要的存储;

pvc让应用不需要关系pv实现细节就能直接使用存储;

三、静态PV

1.pv和pvc的关系

pv是数据卷定义,定义存储的类型例如nfs、ceph、IP、数据卷大小、访问策略等等;

pv作为k8s集群的一种全局资源存在;

pvc让用户不需要知道pv定义细节,定义业务应用需要存储大小、访问策略即可;

简单来说,pv是提供者者,pvc是消费者,这个使用过程叫做绑定(binding)绑定后这个pv就不能被其他pvc使用

2.静态pv使用过程

所谓的pv静态,pv持久卷的生成需要手动创建,一个pv资源对应一个pvc资源;

静态pv--pvc--应用

应用:配置指定使用pvc-name

pvc:定义使用存储的信息,如访问方式、申请的存储大小;

pv:是数据卷定义,定义存储的类型例如nfs、ceph、IP、数据卷大小、访问策略等等;

3.pvc和pv是怎么绑定

pvc和pv,访问模式和容量一样才能匹配成功,然后绑定

accessModes:-ReadWriteManyresources:requests:storage:5Gi

4.注意

默认情况下,静态pv,pvc删除后与它绑定过的pv不能再使用了,需要手动删除这个pv,再重新创建(为了数据安全性,保留这个应用的数据)--Retain;

状态:Available--Bound--Released

对于动态配置的PersistentVolumes来说,默认回收策略为“Delete”。这表示当用户删除对应的PersistentVolumeClaim时,动态配置的volume将被自动删除。如果volume包含重要数据时,这种自动行为可能是不合适的,可以通过以下命令修改pv的回收策略:

kubectlpatchpvyour-pv-name-p{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}

5.静态pv使用例子

##创建一个pvapiVersion:v1kind:PersistentVolumemetadata:name:pv-test-jenkinsspec:capacity:storage:GivolumeMode:FilesystemaccessModes:-ReadWriteManypersistentVolumeReclaimPolicy:RetainstorageClassName:nfsmountOptions:-hard-nfsvers=4.0nfs:path:/data/jenkins_home/server:10.6.6.16

###创建pvcapiVersion:v1kind:PersistentVolumeClaimmetadata:name:jenkins-pvc-staticnamespace:jenkinsspec:accessModes:-ReadWriteManyresources:requests:storage:Gi

###部署应用apiVersion:v1kind:Podmetadata:name:jenkins-testnamespace:jenkinsspec:containers:-name:Jenkinsimage:Jenkins/Jenkins:1.14ports:-containerPort:80volumeMounts:-name:datamountPath:/var/lib/datavolumes:-name:datapersistentVolumeClaim:claimName:jenkins-pvc-static

部署成功后查看pv和PVC,此时你会发现pv的状态是bound

四、动态PV

1.静态pv缺点

pv需要手动创建,当大规模使用力不从心了。几个应用还可以一个个去创建pv;

要准备各种大小的数据卷容量,费心;

pvc匹配不上pv,应用就创建不了;

2.pv动态供给(storageClass)

DynamicProvisioning[动态供给]机制工作的核心在于StorageClass的API对象;

StorageClass声明存储插件,用于自动创建PV;

在静态pv中,创建pv指定的存储插件是手动填写的,在动态pv中是通过StorageClass自动声明存储插件;

2.1首先定义一个StorageClass资源

nfs默认不支持动态供给,k8s本身支持动态插件列表:



转载请注明地址:http://www.sanbaicaoasb.com/scry/8482.html
  • 上一篇文章:
  • 下一篇文章:
  • 热点文章

    • 没有热点文章

    推荐文章

    • 没有推荐文章