Kubernetes(K8s)基本概念:共享存储原理

Kubernetes(K8s)基本概念:共享存储原理

一、共享存储机制概述

K8s对于有状态的容器应用或者对数据需要持久化的应用,不仅需要将容器内的目录挂载到宿主机的目录或者emptyDir临时存储卷,而且需要更加可靠的存储来保存应用产生的重要数据,以便容器应用在重建之后,依然可以使用之前的数据。

PersistentVolume(PV)是对底层网络共享存储的抽象,将共享存储定义为一种资源,比如节点(Node)是一种容器应用可以消费的资源。PV由管理员进行创建和配置,通过插件式的机制完成与共享存储的对接,以供应用访问和使用,共享存储有ClusterFS、iSCSI、RBD或GCE/AWS公有云。

PersistentVolumeClaim(PVC)则是用户对于存储资源的一个申请。就像Pod消费Node的资源一样,PVC会消费PV资源。PVC可以申请特定的存储空间和访问模式。

使用PVC申请到一定的存储空间仍然不足以满足应用对于存储设备的各种需求,通常应用程序都会对存储设备的特性和性能有不同的要求,包括读写速度、并发性能、数据冗余等更高的要求。K8s引入新的资源对象StorageClass,用于标记存储资源的特性和性能,完善动态资源供应机制,实现了存储资源的按需创建和共享存储的自动化管理。

通过StorageClass的定义,管理员可以将存储资源定义为某种类别(Class),类似存储设备对于自身的配置描述(Profile),例如快速存储、慢速存储、有数据冗余、无数据冗余等。用户根据StorageClass的描述就能够直观得知各种存储资源的特性,就可以根据应用对存储资源的需求去申请存储资源了。

二、PV详解

PV作为存储资源,主要包括存储能力、访问模式、存储类型、回收策略、后端存储类型等关键信息的设置。

下面的例子声明的PV具有如下属性:5Gi存储空间、访问模式为"ReadWriteOnce",存储类型为"slow"(要求系统中已存在名为slow的StorageClass),回收策略为"Recycle",并且后端存储类型为"nfs"(设置了NFS Server的IP地址和路径)。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv1
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recyle
  storageClassName: slow
  nfs:
    path: /tmp
    server: 172.17.0.2

1.PV的关键配置参数
1)存储能力(Capacity)
描述存储设备具备的能力,支持对存储空间的设置(storage=xx)。

2)访问模式(Access Modees)
对PV进行访问模式的设置,用于描述用户应用对于存储资源的访问的权限。PV在挂载时只能使用一种访问模式。
访问模式如下:

  • ReadWriteOnce(RWO):读写权限,并且只能被单个Node挂载。
  • ReadOnlyMany(ROX):只读权限,允许被多个Node挂载。
  • ReadWriteMany(RWX):读写权限,允许被多个Node挂载。

不同的存储提供者支持的访问模式:

Volume Plugin ReadWriteOnce ReadOnlyMany ReadWriteMany
AWSElasticBlockStore 支持 - -
AzureFile 支持 支持 支持
HostPath 支持 - -
NFS 支持 支持 支持

3)存储类别(Class)
PV可以设定其存储的类别(Class),通过storageClassName参数指定一个StorageClass资源对象的名称。具有特定类别的PV只能与请求了该类别的PVC进行绑定。未设定类别的PV则只能与不请求任何类别的PVC进行绑定。

4)回收策略(Reclaim Policy)
目前支持如下三种回收策略。

  • 保留(Retain):保留数据,需要手工处理。
  • 回收空间(Recycle):简单清除文件的操作(例如执行rm -rf /volume/*命令)。
  • 删除(Delete):与PV相连的后端存储完成volume的删除操作(如AWS EBS、GCE PD等设备的内部volume清理)。

目前,只有NFS和HostPath两种类型的存储支持"Recyle"策略:AWS EBS,GCE PD支持Delete策略。

2.PV生命周期的各个阶段(Phase)
某个PV在生命周期中,可能处于以下4个阶段之一:

  • Available:可用状态,还未与某个PVC绑定
  • Bound:已与某个PVC绑定
  • Released:绑定的PVC已经删除,资源已释放,但没有被集群回收
  • Failed:自动资源回收失败

三、PVC详解

PVC作为用户对存储资源的需求申请,主要包括存储空间请求、访问模式、PV选择条件和存储类别等信息的设置。

下面的例子声明的PVC具有如下属性:申请8Gi存储空间,访问模式为"ReadWriteOnce",PV选择条件为包含标签"release=stable"并且包含条件为"environment in [dev]“的标签,存储类别为"slow”(要求系统中已存在名为slow的StorageClass):

猜你喜欢

转载自blog.csdn.net/zhengzaifeidelushang/article/details/113823008