目录
- 持久化存储机制
- PV 详解
- PV 关键配置参数
- PV 生命周期的各个阶段
- PVC 详解
- PVC 关键配置参数
- PV 和 PVC 的生命周期
- StorageClass 详解
- StorageClass 关键配置参数
- 设置默认的 StorageClass
持久化存储机制
k8s 对于有状态的容器应用或对数据需要持久化的应用,不仅需要容器内的目录挂载到宿主机的目录或者 emptyDir 临时存储卷,而且需要更加可靠的存储来保存应用产生的重要数据,以便容器应用在重建之后仍然可以使用之前的数据。
k8s 1.0 版本引入了 PersistentVolume(PV)和 PersistentVolumeClaim(PVC)两个资源对象来实现对存储的管理子系统。
PV 是底层网络共享存储的抽象,将共享存储定义为一种“资源”,类比 Node 是一种容器应用可以“消费”的资源。PVC 则是用户对存储资源的一个“申请”。就像 Pod “消费” Node的资源一样,PVC 能够“消费” PV 资源。PVC 可以申请特定的存储空间和访问模式。
通常应用程序都会对存储设备的特性和性能有不同的要求,包括读写速度、并发性能、数据冗余等更高的要求,k8s 从1.4版本开始引入了一个新的资源对象 StorageClass,用于标记存储资源的特性和性能。到1.6版本时,StorageClass 和动态资源供应的机制得到了完善,实现了存储卷的按需创建,在共享存储的自动化管理进程中实现了重要的一步。
通过 StorageClass 的定义,管理员可以将存储资源定义为某种类别(Class),正如存储设备对于自身的配置描述(Profile),例如“快速存储”“慢速存储”“有数据冗余”“无数据冗余”等。用户根据 StorageClass 的描述就能够直观地得知各种存储资源的特性,就可以根据应用对存储资源的需求去申请存储资源了。
PV 详解
PV 作为存储资源,主要包括存储能力、访问模式、存储类型、回收策略、后端存储类型等信息的设置。
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv1
spec:
capacity:
storage: 5Gi # 存储能力
accessModes: # 访问模式
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle # 回收策略
storageClassName: slow # 存储类别
nfs: # PV类型:网络文件系统
path: /tmp
server: 172.17.0.2
PV 关键配置参数
- 存储能力(Capacity):storage=xx
- 存储卷模式(Volume Mode):volumeMode=xxx,Filesystem(文件系统)和Block(块设备),默认值为Filesystem
- 访问模式(Access Modes):1. ReadWriteOnce(RWO):读写权限,并且只能被单个Node挂载;2. ReadOnlyMany(ROX):只读权限,允许被多个Node挂载;3. ReadWriteMany(RWX):读写权限,允许被多个Node挂载
- 存储类别(Class):storageClassName=xxx
- 回收策略(Reclaim Policy):persistentVolumeReclaimPolicy=xxx
- 挂载参数(Mount Options):在将 PV 挂载到一个 Node 上时,根据后端存储的特点,可能需要设置额外的挂载参数,可以根据 PV 定义中的 mountOptions 字段进行设置
- 节点亲和性(Node Affinity):限制只能通过某些Node访问Volume,可以在PV定义中的nodeAffinity字段进行设置。这个参数仅用于Local存储卷。
PV 生命周期的各个阶段
- Available:可用状态,还未与某个PVC绑定
- Bound:已与某个PVC绑定
- Released:绑定的PVC已经删除,资源已释放,但没有被集群回收
- Failed:自动资源回收失败
PVC 详解
PVC 作为用户对存储资源的需求申请,主要包括存储空间请求、访问模式、PV 选择条件和存储类别等信息的设置。
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: myclaim
spec:
accessModes: # 访问模式
- ReadWriteOnce
resources:
requests:
storage: 8Gi
storageClassName: slow
selector: # PV 条件选择
matchLabels:
release: "stable"
matchExpressions:
- {key: environment, operator: In, values: [dev]}
PVC 关键配置参数
- 资源请求(Resources):描述对存储资源的请求,目前仅支持 request.storage 的设置,即存储空间大小
- 访问模式(Access Modes):PVC 也可以设置访问模式,用于描述用户应用对存储资源的访问权限。其三种访问模式的设置与 PV 的设置相同
- 存储卷模式(Volume Modes):PVC 也可以设置存储卷模式,用于描述希望使用的 PV 存储卷模式,包括文件系统和块设备
- PV 选择条件(Selector):通过对Label Selector的设置,可使PVC对于系统中已存在的各种PV进行筛选。
- 存储类别(Class): PVC 在定义时可以设定需要的后端存储的类别(通过 storageClassName 字段指定),以减少对后端存储特性的详细信息的依赖。只有设置了该 Class 的 PV 才能被系统选出,并与该 PVC 进行绑定。
注意,PVC 和 PV 都受限于 Namespace,PVC 在选择 PV 时受到 Namespace 的限制,只有相同 Namespace 中的 PV 才可能与 PVC 绑定。Pod 在引用 PVC 时同样受 Namespace 的限制,只有相同 Namespace 中的 PVC 才能挂载到 Pod 内。
PV 和 PVC 的生命周期
- 资源供应:静态模式(Static,手工创建)和动态模式(Dynamic,通过StorageClass设置)。资源供应的结果就是创建好的PV。
- 资源绑定:根据 PVC 对存储资源的请求(存储空间和访问模式)在已存在的 PV 中选择一个,如果没有,PVC 则会无限期处于 Pending状态。PV 一旦绑定到某个 PVC 上,就会被这个 PVC 独占,不能再与其他 PVC 进行绑定了。
- 资源使用:Pod 使用 Volume 的定义,将 PVC 挂载到容器内的某个路径进行使用。在容器应用挂载了一个 PVC 后,就能被持续独占使用。不过,多个 Pod 可以挂载同一个 PVC,应用程序需要考虑多个实例共同访问一块存储空间的问题。
- 资源释放:删除 PVC,与该 PVC 绑定的 PV 将会被标记为“已释放”,但还不能立刻与其他 PVC 进行绑定。通过之前 PVC 写入的数据可能还被留在存储设备上,只有在清除之后该 PV 才能再次使用。
- 资源回收:对于 PV,管理员可以设定回收策略,用于设置与之绑定的 PVC 释放资源之后如何处理遗留数据的问题。只有 PV 的存储空间完成回收,才能供新的 PVC 绑定和使用。
StorageClass 详解
StorageClass 作为对存储资源的抽象定义,由系统自动完成 PV 的创建和绑定,实现了动态的资源供应。基于 StorageClass 的动态资源供应模式将逐步成为云平台的标准存储配置模式。
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: standard
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
StorageClass 关键配置参数
- 提供者(Provisioner):描述存储资源的提供者,也可以看作后端存储驱动。
- 参数(Parameters):后端存储资源提供者的参数设置,不同的Provisioner包括不同的参数设置。
设置默认的 StorageClass
要在系统中设置一个默认的 StorageClass,则首先需要启用名为 DefaultStorageClass的admission controller,即在 kube-apiserver 的命令行参数 --admission-control 中增加:
--admission-control=...,DefaultStorageClass
在 StorageClass 的定义中设置一个 annotation:
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: gold
annotations: storageclass.beta.kubernetes.io/is-default-class="true"
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-ssd
通过 kubectl create 创建,查看:
kubectl get sc
# NAME TYPE
# gold (default) kubernetes.io/gce-pd