华为云云原生钻石集训营 第四课:Kubernetes存储架构原理深度剖析(上)

课程目标:

1.了解Kubernetes容器存储发展历程

2.了解Kubernetes持久化存储原理

3.了解PV/PVC的工作原理

4.了解华为云CCE云原生存储解决方案Everest的架构


目录:

1. Kubernetes容器存储发展历程

2. Kubernetes持久化存储体系

3. PV/PVC的工作原理剖析

4.华为云CCE云原生存储解决方案Everest的架构介绍


在生产环境中,存储也是种类繁杂多样的:

1.存储产品:不同存储提供商的产品存在差异性;

2.存储性能:不同磁盘(SATA、SAS、PCIE)的性能存在差异性;

3.存储类型:本地盘、块存储、文件存储、对象存储;

4.存储网络:IP、FC等

5.存储地域:不同存储池所服务的地域不同

6。。。。。。

面对复杂存储环境,k8s是如何应对的呢?

这就是我们要将讨论的云原生存储体系。


一、Kubernetes容器存储发展历程

应用程序生成的数据可简单分为两类:

       1.临时数据:经过程序处理生成的中间态数据,不需要保留;

       2.结果数据:经过程序处理生成的最终态数据,需要永久保留。

k8s初期为存算分离所做的解耦设计Volume,采用强耦合、灵活性差的in-tree模式,虽然已经让用户专注于业务功能设计。但这类存储卷的生命周期是跟随pod的,只能用作存储临时数据,无法做为最终数据使用。

随着k8s的不断成熟,为支持更多的应用场景,提供了一种脱离pod生命周期的、用户可管理的存储抽象设计低耦合、灵活性更强的PersistentVolume/PersistentVolumeClaim。

二、Kubernetes持久化存储体系

1. PersistentVolume:简称pv,持久化存储,是k8s为云原生应用提供一种拥有独立生命周期的、用户可管理的存储抽象设计

2. PersistentVolumeClaim:简称pvc,持久化存储声明,是K8S为解耦云原生应用和数据存储而设计的,通过PVC可以让资源管控更细更灵活、团队职责分离、应用模板更通用,进一步解除了用户被云平台锁定的顾虑。

3. StorageClass: 简称sc,存储类,是K8S平台为存储提供商提供存储接入的一种声明,通过sc和相应的存储插件(csi)为容器应用提供动态分配存储卷的能力;

4.Driver Plugin:存储驱驱动插件,由存储提供商提供,能够对接网络存储,并管理持久存储卷的生命周期。

持久化存储优势分析

与临时存储相比,PV具有:

1.每个存储卷可以拥有独立的生命周期,不再跟随pod创建和销毁;

2.使能计算+数据的迁移,也即:存储卷中的数据可以随pod在集群中迁移;

3.多个不同的pod可以共享同一个存储卷(存储卷支持共享);

引入PVC/SC后,带来更大的收益:

1.资源管控更加灵活,可适应资源管控严格、宽松的不同场景;

2.团队职责更加明确,开发人员只需考虑存储需求(IO、容量、访问模式等),不需要关注存储类型,甚至品牌;

3.灵活的扩展一些增强功能,比如:扩容、快照能力;

4.应用模板更加通用,可通过参数配置,适应不同类型的k8s平台;

5.进一步消除用户被存储提供商、云平台锁定的顾虑.

三、PV/PVC的工作原理剖析

pv/pvc绑定原理分析

pvc刷选pv的流程(findBestMatchForClaim) :

1.通过size刷选恰当的pv;

2通过volumeMode刷选一致的pv;

3.通过Label刷选合适的pv;

4.通过sc刷选符合的pv;

5.通过AccessMode刷选符合条件的pv;

6.返回并绑定符合pvc条件,且size最小的pv。

静态卷:pv/pvc使用场景示例

pv/pvc适合在资源管理比较严格的场景:

1.开发人员向集群管理员申请存储需求;

2.存储管理员按需求分配存储;

3.集群管理员按照分配的存储创建pv;

4.开发人员创建pvc, pvc关联合适的pv;

5.开发人员创建pod,并且pod使用pvc.

四、华为云CCE云原生存储解决方案Everest的架构介绍

Everest架构介绍

1.部署在系统命名空间下(kube-system)

2.Everest管理面:Everest-csi-controller

①Csi-external-provisioner:负责云存储卷的创建

②Csi-external-resizer:负责云存储卷的扩容

③Csi-external-attacher:负责云盘的挂卷/卸卷

④Csi-external-snapshotter:负责云盘的快照

3.Everest数据面:Everest-csi-driver (agent)

①Evs-csi-driver:负责将云盘格式化,并挂给pod使用;

②Sfs-csi-driver:负责将文件存储卷挂给pod使用

③Sfsturbo-csi-driver:负责将极速文件系统挂给pod使用使用;

④Obs-csi-driver:负责将对象存储的并行文件系统准备好,并给pod使用;

本课总结:

StatefulSet:简称sts,有状态应用,一种k8s为用户提供一组具有有序、唯一、稳定的应用实例集合。

Volume:卷,k8s为存算分离所做的解耦设计,让用户更加专注于业务功能设计。它在k8s中是依托于pod而使用的。

PersistentVolume:简称pv,持久化存储,是k8s为云原生应用提供一种拥有独立生命周期的、用户可管理的存储抽象设计。

PersistentVolumeClaim:简称pvc,持久化存储声明,是K8S为解耦云原生应用和数据存储而设计的,通过PVC可以让资源管控更细更灵活、团队职责分离应用模板更通用,进一步解除了用户被云平台锁定的顾虑。

StorageClass:简称sc,存储类,是K8S平台为存储提供商提供存储接入的一种声明,通过sc和相应的存储插件(csi/flexvolume)为容器应用提供动态分配存储卷的能力。

参考链接:

1.相关内容的华为云官网链接: https://support.huaweicloud.com/usermanual-cce/cce 01_0042.html

2.CCE云容器引擎官方首页: https://www.huaweicloud.com/product/cce.html

3. Kubernetes官方文档:

StatefulSet: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/

Storage: https://kubernetes.io/docs/concepts/storagel/

(完)