华为云云原生钻石课程04:Kubernetes存储架构原理深度剖析(上)

成长的小咘咘 举人 2022-05-23 09:14:25

学完本课程后,您将能够:

  1. 了解Kubernetes容器存储发展历程
  2. 了解Kubernetes持久化存储原理
  3. 了解PV/PVC的工作原理
  4. 了解华为云CCE云原生存储解决方案Everest的架构

1.Kubernetes容器存储发展历程

1.1 简介

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

  1. 临时数据:经过程序处理生成的中间态数据,不需要保留:
  2. 结果数据:经过程序处理生成的最终态数据,需要永久保留。k8s初期为存算分离所做的解调设计Volume,采用强耦合、灵活性差的in-tree模式,虽然已经让用户专注于业务功能设计。但这类存储卷的生命周期是跟随pod的,只能用作存储临时数据,无法做为最终数据使用。

随着k8s的不断成熟,为支持更多的应用场景,提供了一种脱离P0d生命周期的、用户可管理的存储抽象设计低耦合、灵话性更强的PersistentVolume,/PersistentVolumeClaim。
在这里插入图片描述

1.2 Kubernetes容器存储能力简介

在这里插入图片描述

2.Kubernetes持久化存储体系

2.1 简介

k8s持久化存储体系包括:

  1. PersistentVolume:简称pv,持久化存储,是k8s为云原生应用提供一种拥有独立生命周期的、用户可管理的存储抽象设计。
  2. PersistentVolumeClaim:简称pvc,持久化存储声明,是K8S为解耦云原生应用和数据存储而设计的,通过PVC可以让资源管控更细更灵活、团队职责分离、应用模板更通用,进一步解除了用户被云平台锁定的顾虑。
  3. StorageClass:简称sc,存储类,是K8S平台为存储提供商提供存储接入的一种声明,通过sc和相应的存储插件(csi)为容器应用提供动态分配存储卷的能力。
  4. Driver Plugin:存储驱驱动插件,由存储提供商提供,能够对接网络存储,并管理持久存储卷的生命周期。

在这里插入图片描述

2.2 持久化存储优势分析

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

  1. 每个存储卷可以拥有独立的生命周期,不再跟随pod创建和销毁;
  2. 使能计算+数据的迁移,也即:存储卷中的数据可以随pod在集群中迁移;
  3. 多个不同的pod可以共享同一个存储卷(存储卷支持共享);

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

  1. 资源管控更加灵活,可适应资源管控严格、宽松的不同场景;
  2. 团队职责更加明确,开发人员只需考虑存储需求(O、容量、访问模式等),不需要关注存储类型,甚至品牌;
  3. 灵活的扩展一些增强功能,比如:扩容、快照能力;
  4. 应用模板更加通用,可通过参数配置,适应不同类型的k8s平台;
  5. 进一步消除用户被存储提供商、云平台锁定的顾虑。

在这里插入图片描述

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

3.1 图示两种pv/pvc的分配方式

其中volume为存储中的数据卷,通过pv/pvc绑定即可为用户提供存储服务。
在这里插入图片描述

3.2 静态卷

volume静态卷与pv/pvc绑定后,部署pod应用后即可使用数据卷,如果pvc删除后,pv通过操作变更为retain、recycle等状态。

3.2.1 pvc状态转换

当pv绑定volume时,处于Avaliable状态。
当pvc为绑定pv时,处于Pending状态。
当pvc绑定pv时,处于Bound状态。
当pvc绑定pv被删除,处于lost状态。
当pvc再次绑定pv,处于Bound。
在这里插入图片描述

3.2.2 pv的状态转换

在这里插入图片描述

3.3 pv/pvc绑定原理分析

pvc刷选pv的流程(findBestMatchForClaim)

  1. 通过size刷选恰当的pv;
  2. 通过volumeMode刷选一致的pv;
  3. 通过Label刷选合适的pv;
  4. 通过sc刷选符合的pv;
  5. 通过AccessMode刷选符合条件的pv;
  6. 返回并绑定符合pvc条件,且size最小的pv。

在这里插入图片描述

3.4 pvc绑定pv流程解读

在这里插入图片描述

3.5 Kubernetes中pv/pvc相关的代码

Kubernetes中pv/pvc相关的代码在下图位置,如果有兴趣请自行查阅。
在这里插入图片描述

3.6 pv/pvc使用场景示例

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

  1. 开发人员向集群管理员申请存储需求;
  2. 存储管理员按需求分配存储;
  3. 集群管理员按照分配的存储创建pv;
  4. 开发人员创建pvc,pvc关联合适的pv;
  5. 开发人员创建pod,并且pod使用pvc。

在这里插入图片描述

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

4.1 Everest架构介绍

  1. 部署在系统命名空间下(kube-system)
  2. Everest管理面:Everest-csi-controller
    1. Csi-external-provisioner:负责云存储卷的创建
    2. Csi-external-resizer:负责云存储卷的扩容
    3. Csi-externa-attacher:负责云盘的挂卷/卸卷
    4. Csi-external-snapshotter:负责云盘的快照
  3. Everest数据面:Everest-csi-driver(agent)
    1. EvS-csi-driver:负责将云盘格式化,并挂给pod使用
    2. Sfs-csi-driver:负责将文件存储卷挂给pod使用
    3. Sfsturbo-csi-driver:负责将极速文件系统挂给pod使用使用
    4. Obs-csi-driver:负责将对象存储的并行文件系统准备好,并给pod使用

在这里插入图片描述

4.2 云原生应用使用存储的推荐方案

在这里插入图片描述
在这里插入图片描述

4.3 部署使用static pv的有状态应用etcd

在这里插入图片描述
在这里插入图片描述

...全文
1455 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

68,758

社区成员

发帖
与我相关
我的任务
社区描述
汇集数据库的爱好者和关注者,大家共同学习、探索、分享数据库前沿知识和技术,像松鼠一样剥开科学的坚果;交流Gauss及其他数据库的使用心得和经验,互助解决问题,共建数据库技术交流圈。
数据库数据仓库 企业社区 北京·海淀区
社区管理员
  • Gauss松鼠会
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

欢迎大家同时关注Gauss松鼠会专家酷哥。

https://www.zhihu.com/people/ku-ge-78-98

试试用AI创作助手写篇文章吧