数据存储概述

在 Docker 中就有数据卷的概念,当容器删除时,数据也一起会被删除,想要持久化使用数据,需要把主机上的目录挂载到 Docker 中去,在 K8S 中,数据卷是通过 Pod 实现持久化的,如果 Pod 删除,数据卷也会一起删除,k8s 的数据卷是 docker 数据卷的扩展,K8S 适配各种存储系统,包括本地存储 EmptyDir,HostPath,网络存储 NFS,GlusterFS,PV/PVC 等,下面就详细介绍下 K8S 的存储如何实现。

管理存储和管理计算有着明显的不同。PersistentVolume子系统给用户和管理员提供了一套API,从而抽象出存储是如何提供和消耗的细节。在这里,我们介绍两种新的API资源:PersistentVolume(简称PV)和PersistentVolumeClaim(简称PVC)。

Capacity(容量)

一般来说,PV会指定存储的容量,使用PV的 capacity 属性来设置。

当前,存储大小是唯一能被设置或请求的资源。未来可能包含IOPS,吞吐率等属性。

访问模式

PV可以使用存储资源提供商支持的任何方法来映射到host中。如下的表格中所示,提供商有着不同的功能,每个PV的访问模式被设置为卷支持的指定模式。比如,NFS可以支持多个读/写的客户端,但可以在服务器上指定一个只读的NFS PV。每个PV有它自己的访问模式。

访问模式包括:

  • ReadWriteOnce —— 该volume只能被单个节点以读写的方式映射
  • ReadOnlyMany —— 该volume可以被多个节点以只读方式映射
  • ReadWriteMany —— 该volume只能被多个节点以读写的方式映射

在CLI中,访问模式可以简写为:

  • RWO - ReadWriteOnce
  • ROX - ReadOnlyMany
  • RWX - ReadWriteMany
Volume Plugin ReadWriteOnce ReadOnlyMany ReadWriteMany
HostPath - -
NFS
AWSElasticBlockStore - -
AzureFile
AzureDisk - -
CephFS
Cinder - -
FC -
FlexVolume -
Flocker - -
GCEPersistentDisk -
Glusterfs
iSCSI -
PhotonPersistentDisk - -
Quobyte
RBD -
VsphereVolume - -
PortworxVolume -
ScaleIO -

Class

一个PV可以有一种class,通过设置storageClassName属性来选择指定的StorageClass。有指定class的PV只能绑定给请求该class的PVC。没有设置storageClassName属性的PV只能绑定给未请求class的PVC。

回收策略

当前的回收策略有:

  • Retain: 允许用户手动回收
  • Recycle: 删除 PV 上的数据 (“rm -rf /thevolume/*”)
  • Delete: 删除 PV

当前,只有NFS和HostPath支持回收利用,AWS EBS,GCE PD,Azure Disk,or OpenStack Cinder卷支持删除操作。

阶段

一个volume卷处于以下几个阶段之一:

  • Available: 空闲的资源,未绑定给PVC
  • Bound: 绑定给了某个PVC
  • Released: PVC已经删除了,但是PV还没有被集群回收
  • Failed: PV在自动回收中失败了

参考

MIT Licensed | Copyright © 2018-present 滇ICP备16006294号

Design by Quanzaiyu | Power by VuePress