共享存储原理
1、pv详解
pv作为存储资源,主要包括:存储能力、访问模式、存储类型、回收策略、后端存储类型等关键信息的设置。pv的关键配置参数如下:
- 存储能力 capacity:storage=5Gi
- 访问模式 access modes:RWO、ROX、RWX
- 存储类别 class: storageclassname
- 回收策略 reclaim policy:保留retain、回收recycle、删除delete
2、pvc详解
pvc作为用户对存储资源的需求申请,主要包括:存储空间申请、访问模式、pv选择条件和存储类别等信息。pvc的关键配置参数如下:
- 资源请求resources:对存储资源请求,目前仅支持存储空间大小。
- 访问模式access modes:三种模式与pv相同,RWO、ROX、RWX
- 存储类别 class:
注意:pvc和pv都受限与namespcae,只有相同namespace的pv才能与pvc绑定。
3、pv和pvc的生命周期,以下是生命周期的各个阶段
- 1、资源供应 provisioning
- 2、 资源绑定 binding
- 3、 资源使用 using
- 4、资源释放 releasing
- 5、资源回收 reclaiming
4、storageclass详解
storageclass的定义主要包括名称、后端存储提供者provisioner、后端存储相关参数配置。
- 提供者provisioner:描述后端资源的提供者,后端存储驱动。
- 参数parameters:后端资源提供者的参数设置,
storageclass动态供应模式相对于静态供应模式的优点:
- 管理员无需预先创建大量的PV作为存储资源
用户申请PVC时无法保证容量与预制pv的完全匹配。
5、glusterFS 部署
- 安装glusterfs客户端,在需要使用glusterfs的node节点上
- 安装glusterfs服务端,以容器的形式运行在每个node节点上,使用daemonset的方式进行部署
- 部署Heketi服务:提供RESTful API管理 glusterFS卷,
- 定义storageclass,提供者为glusterFS,配置hiketi服务地址,即可使用
通过storageclass创建pvc的模板:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
annotations:
pv.kubernetes.io/bind-completed: "yes"
pv.kubernetes.io/bound-by-controller: "yes"
volume.beta.kubernetes.io/storage-provisioner: kubernetes.io/glusterfs
labels:
app: postgresql-persistent
name: postgres-dev
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: gluster-dyn