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

举报
小鲍侃java 发表于 2022/02/23 15:33:10 2022/02/23
【摘要】 从上节课程中我们了解了高级调度器的原理。K8s为适应不同需求的调度能力,提供了一套调度框架。在生产环境中,存储也是种类繁杂多样的,如:不同存储提供商的产品存在差异性、不同磁盘(SATA、SAS.PCIE)的性能存在差异性、不同存储池所服务的地域不同等。面对复杂存储环境,k8s是如何应对的呢?这就是我们将要讨论的云原生存储体系。

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

  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

在这里插入图片描述
在这里插入图片描述
本文整理自华为云社区【内容共创】活动第13期。
https://bbs.huaweicloud.com/blogs/330939
任务21.华为云云原生钻石课程04:Kubernetes存储架构原理深度剖析(上)

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。