kubernetes学习笔记18:动态pv和静态pv,PVC
使用volumns字段声明卷的名字和类型,本地卷包含emptydir和hostpath,一个随着pod删除也删除,一个是不会删除。
使用的时候用volumnmounts,name字段表示使用哪个卷,subpath:在多个容器共享一个卷的时候,为了隔离数据。
声明静态PV需要关注三个字段,capacity和Accessmode,recalimpolicy就在及PVC被删除时,pv的回收策略,另一个字段nodeaffinity就是创建出来的pv能被哪个node挂载,需要限制。使用静态pv方法:创建PVC对象,指定storage和Accessmode就可以使用了。
动态pv:上面说过系统管理员不再创建pv,只是创建模板叫storageclass,需要关注字段provisioner(用哪个存储插件来创建),让后就是创建PVC对象,其他参数不变,需要添加storageclassname,来指定创建pv模板的名字。
pv状态有pending(创建),available(创建完成),bound(跟PVC结合),released(被删除)。被删除的pv不能回到available状态,可以在删除pod的时候不删除PVC,这样下次创建pod的时候可以通过PVC复用,k8s中statefulset管理的pod带存储的迁移就是通过这种方式。
persistent volumn解决了销毁重建,如deployment管理的镜像升级,解决了宿主机故障迁移,解决了多个pod共享卷,解决了volumn snapshot,resize等功能扩展问题。
PVC相当于接口,不需关心实现细节,pv是对pvc的实现,相当于Java中的接口和实现类。
pv,PVC以及通过csi(container storage interface,它是k8s对存储插件OUT-of-tree官方推荐)使用存储流程,首先创建阶段,主要创建存储,然后attach阶段,主要将存储挂载到node上面,最后mount阶段,将存储进一步挂载到pod可以使用的路径。