k8s存储模块(PV,PVC)
k8s存储模块(PV,PVC)
目录
Volumns
Pod Volumns
Pod Volumns的生命周期和Pod一样,主要以下有两种挂载方式
1.emptyDir卷
无需指定宿主机上的目录文件,可以理解为在Pod上创建了一个空的卷,当Pod生命周期结束后,文件内容随即消失,Pod中的容器可以通过这个卷来实现临时存储以及共享,实际使用的空间可以指定为硬盘或者内存。
2.hostPath卷
需要指定宿主机上的目录文件,当Pod生命周期结束后,宿主机中仍然可以保留文件内容。
PV(Persistent Volumes)
如果使用普通的Volumns挂载,可能出现以下问题:
1.版本升级时,Deployment对旧版本的Pod进行删除重建,此时旧版本的数据便无法复用
2.当某个Node宕机后,RS将其在其他Node中重建后,原先挂载的卷也会丢失
3,、多个Pod想要共享数据时,使用普通的Volumns很难实现
而PV的出现就解决了这些问题
PV也是K8s中的一种资源,与Pod相互独立,不依赖于Pod而存在,做到了解耦。把 pod 删除之后,它使用的PV仍然存在,还可以被新建的 pod 复用
新创建的PV在经历一小段的pending时间后,进入到available(空闲)状态,当于PVC绑定后进入到bound(绑定)状态,当绑定的PVC删除后进入到released(释放)状态,此时的PV无法再与PVC进行绑定
PVC(PersistentVolumeClaim)
通过PVC实现用户和实现细节的解耦,简化了用户的使用方式,用户在使用存储时只需声明所需的存储大小以及访问模式即可。
PV的产生方式
静态
由管理员提前预创建一些指定大小的PV,当用户提交自己的PVC后,K8s相关组件将会自动匹配到相应的PV进行绑定。但是也正是因为是管理员提前创建的,很难预测到用户的真实需求,所以可能时常无法满足用户PVC的需求。
动态
由管理员提前根据存储类型等信息创建存储模板(StorageClass),并指定好使用的volumn plugin。用户提交PVC时只需要指定相应的存储模板,K8s相关组件便会动态生成相应的PV并于PVC进行绑定
StatefulSet
StatefulSet为面向有状态应用管理的控制器,具有如下特性
1.每个 Pod 会有 Order 序号,会按照序号来创建,删除和更新 Pod;
2.通过配置一个 headless Service,使每个 Pod 有一个唯一的网络标识 (hostname);
3.通过配置 pvc 模板,就是 pvc template,使每个 Pod 有一块或者多块 pv 存储盘;
4.支持一定数量的灰度发布
通过使用StatefulSet,每个 Pod 独享 PVC、有一个唯一网络标识,而且当进行版本升级时会按照倒序的顺序来逐渐把 Pod 升级为新版本,同时还可以复用之前的 PVC 和网络标识。
CSI
CSI主要分为两部分:一部分为k8s社区实现的通用部分,另一部分为第三方云服务对于存储的具体实现。
当用户声明PVC后,csi-provisioner controller通过watch检测到后,会根据PVC的策略以及storageClasee的信息调用第三方云服务创建真正的存储,创建PV完毕后,由集群中的PV Controller将PVC和PV进行绑定,之后就可以使用了
更多推荐
所有评论(0)