潇湘夜雨移动版

主页 > 系统 > 云计算与云原生 >

k8s存储卷与数据持久化

 
一、存储卷概述
 
Pod 本身具有生命周期,故其内部运行的容器及其相关
数据自身均无法持久存在 Docker 支持配置容器使用存储卷
将数据持久存储于容器自身文件系统之外的存储空间中,它
们可以是节点文件系统或网络文件系统之上的存储空间
应地, Kubernetes 也支持类似的存储卷功能,不过,其存储卷
是与 Pod资源绑定而非容器 简单来说,存储卷是定义在 Pod
资惊之上 可被其内部的所有容器挂载的共享目录,它关联
至某外部的存储设备之上的存储空间,从而独立于容器自身
的文件系统,而数据是否具有持久能力则取决于存储卷自身
是否支持持久机制。
 
1、Kubernetes 支持的存储卷类型
 
Kubernetes 支持非常丰富的存储卷类型, 包括本地存储(节点) 和网络存储系统中
多存储机制,甚至支持 Secret ConfigMap 这样的特殊存储资源,对于 Pod 来说,卷类
型主要是为关联相关的存储系统时提供相关的配置参数,例如 关联节点本地的存储的目录与
关联 GlusterFS 存储系统所需要的配置参数差异巨大,因此指定存储卷类型时也就限定了其
联到的后端存储设备。目前, Kubernetes 支持的存储卷包含以下这些类型
 
emptyDir
hostPath 
nfs 
fc
iscsi 
flecker 
Glusterfs
Orbd 
cephfs 
cinder 
awsE!asticBlockStore
gcePersistentDisk 
azureDisk 
downwardAPI 
ConfigMap
secret
projected 
name 
persistentVolum Claim
downwardAPI 
vsphereVolume 
quobyte 
portworxVolume 
photonPersistentDisk
scaleIO
flex Volume 
azureFile 
storageOS 
gitRepo
local 
上述类型中, emptyDir hostPath属于节点级别的卷类型, emptyDir 的生命周期与
Pod 源相同,而使用了 hostPath 卷的 Pod 一旦被重新调度至其他节点,那么它将无法再
使用此前的数据 因此,这两种类型都不具有持久性。要想使用持久类型的存储卷,就得
使用网络存储系统,如 NFS Ceph GlusterFS ,或者 云端存储,如 gcePersistentDisk
awsE!asticB!ockStore等。
然而,网络存储系统通常都不太容易使用,有的甚至很复杂,以至于对大多数用户来说
它是一个难以逾越的障碍。Kubernetes 为此专门设计了一种集群级别的资源 PersistentVolume 
(简称 PV ),它借由管理员配置存储系统,而后由用户通过"persistentVolumeClaim"(简称
PVC )存储卷直接申请使用的机制大大简化了终端存储用户的配置过程,有效降低了使用难度。
再者, Secret ConfigMap 算得上是两种特殊的卷类型
 
1>Secret 用于向 Pod 传递敏感信息,如密码 、私钥、 证书文件 ,这些信息如果直接
定义在镜像中很容易导致泄露,有了 Secret 资源,用户可以将这些信息存储于集群中而后
Pod 进行挂载,从而实现将敏感数据与系统解耦
2>ConfigMap 资源则用于向 Pod 注入非敏感数据,使用时,用户将数据直接存储于
ConfigMap 中,而后直接在 Pod 中使用 ConfigMap 卷引用它即可,它可以帮助实现容
器配置文件集中化定义和管理
另外, Kubernetes 1.9 起对存储的支持做了进一步的增强,引入了容器存储接
( Container Storage Interface, CSI) 一套 alpha 现版本 ,其能够将插件的安装流程简化至
与创建 Pod 相当,并允许第 方存储供应商在无须修改 Kubernetes 代码库的前提下提供自
己的解决方案 因此, Kubernetes 系统支持的卷存储机制必将进 步增强
 
 
 
2、存储卷的使用万式
Pod 中定义使用存储卷的配置由两部分组成: 是通过 .spec. volumes 宇段定义在
Pod 之上的存储卷列 其支持使 类型的存储卷且配置参数差别很大; 另一个是 (责任编辑:liangzh)