目录

Volumns

Pod Volumns

PV(Persistent Volumes)

PVC(PersistentVolumeClaim)

PV的产生方式

静态 

动态

StatefulSet

CSI


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进行绑定,之后就可以使用了

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐