如何进行容器云平台存储架构设计与优化?
本文是2020容器云职业技能大赛架构师岗课程之《容器云平台存储架构设计与优化》的试读。 本次大赛学习平台由上百位来自用户社区及共创厂商的技术专家联手打造,是一场集学习、认证与比赛一体化的产业级学习运动。其中架构师岗课程共24个,完成课程学习+自测,获取岗位结业证书。具体请戳>>>学课程,拿认证!胜任容器云架构师的这些技能,你皆可掌握→
2020 容器云职业技能大赛架构师岗课程系列之——《容器云平台存储架构设计与优化》
课程出品人
顾文俊,某互联网公司金融行业架构师。2008年南京邮电大学电路与系统专业研究生毕业,12+年职业生涯主要从事IT基础设施、云计算、容器、大数据、AI、金融科技相关领域的解决方案工作,twt社区平台特邀作者、2020 容器云职业技能大赛百位专家委员会成员。
本文介绍了容器存储、Kubernetes平台存储发展的情况,容器存储类型,Kubernetes平台存储应用的场景,以及容器云存储设计的重要性。通过这些介绍,大家可以对容器云平台存储建立一个基本的概念,并且知道相关的应用场景在哪里。在今后有容器平台项目的时候, 知道容器云存储这块的设计规划,应该从哪些方面去考虑。以及在项目的设计中,对于数据的重视程度,以及对数据价值的认识达到一个比较高的程度。总体上讲,就是给大家一个初步的容器云存储的概念。也在此基础上,介绍了Kubernetes中几种常见的存储系统以及持久化存储的设计。最后,介绍了金融行业的某保险和基金公司容器化平台存储的设计以及基于CSI开发的容器平台设计。同时,提供了对于容器云存储方面优化的一些建议。
通过对本文的学习,读者可以对容器云存储设计有一个初步的概念,同时对于优化也给出了相应的建议。
1. 容器平台存储概述1.1 容器和 Kubernetes 存储概述1.2 容器存储的类型1.3 Kubernetes 平台中存储的应用场景1.4 容器云存储设计的重要性总结2. Kubernetes 中几种常见的存储系统3. 持久化存储设计4. Kubernetes 存储的设计与基本架构4.1 Persistent Volume与Persistent Volume Claim概念介绍4.2 基础 Kubernetes 存储架构5. 容器平台存储实践5.1 某保险公司 OCP 容器平台存储设计5.2 某基金公司测试环境 Kubernetes 容器平台存储设计5.3 基于 CSI 开发的容器平台存储设计6. 优化建议
试读章节:
1 容器平台存储概述
1.1 容器和Kubernetes存储概述
IT领域的变革日新月异,业务数据的急速增长,云计算的急剧扩张,以及数以百万级的物联网设备的使用正推动我们向着更高效、可靠和可扩展的方向发展。传统的应用架构已经无法满足日益增长的需求,人们正在试图寻找一条解决之路来应对这复杂的场景。容器技术在这个背景之下应运而生。容器支持敏捷设计、开发和部署;支持在生产/开发测试环境中非常容易地扩展,因此它们逐渐成为分布式、云计算的首选解决方案。容器架构提供了更好的方式来构建现代化的应用程序,大多数企业已经开始以容器形式进行生产环境的第三方IT应用托管,尤其在内部应用、融合架构和专用的基础架构领域。
随着容器技术的日趋成熟和稳定,企业顺势而为,推出了容器云平台的产品。容器云平台不仅仅可以用来管理基础设施资源,同时其强烈的业务属性(研运一体化)也逐渐为大家所知。容器云平台和前几年大热的云平台一样,对基础设施资源(计算、存储、网络)的管理技术日趋成熟。存储作为容器平台重要的组成部分,保证着容器数据的安全,在整个系统中具有举足轻重的作用,是我们整个设计的重中之重。
容器中数据的存储是临时性的,当容器消失的时候,数据也会随之消失,后来就有了持久化存储的研究;在Kubernetes平台上,Pod中同时多个容器运行,常常需要这些容器共享数据存储,来保证数据的安全性。Kubernetes抽象出Volume对象来解决存储方面的问题。Docker也有Volume的概念,但对它只有少量且松散的管理。在Docker中,Volume是磁盘上或者另外一个容器内的一个目录。后来新增了Volume生命周期的管理,以及Volume的驱动程序,虽然功能还非常有限。
Kubernetes卷具有明确的生命周期——与包裹它的Pod相同。因此,卷比Pod中运行的任何容器的存活周期都长,在容器重新启动时数据也会得倒保留。当然,当一个Pod不再存在时,卷也将不存在。Kubernetes可以支持许多类型的卷,Pod也能同时使用任意数量的卷。
卷的核心是包含一些数据的目录,Pod中的容器可以访问该目录。特定的卷类型可以决定这个目录如何形成的,并能决定它支持何种介质,以及目录中存放什么内容。使用卷时,Pod声明中需要提供卷的类型(.spec.volumes字段)和卷挂载的位置(.spec.containers.volumeMounts字段)。容器中的进程能看到由它们的Docker镜像和卷组成的文件系统视图。Docker镜像位于文件系统层次结构的根部,并且任何Volume都挂载在镜像内的指定路径上。卷不能挂载到其他卷,也不能与其他卷有硬连接。Pod中的每个容器必须独立地指定每个卷的挂载位置。
1.2 容器存储的类型
容器架构使用到的三种存储:
(1)镜像存储
这个可以利用现有的共享存储,类似于虚拟化环境中虚拟机镜像的分发保护机制。容器镜像的优势在于其存储容量相较于完整的虚拟机镜像小了很多,因为不会复制操作系统代码。此外,容器镜像的运行在设计之初便是固定的,因此可以更高效地存储、共享。但也因此,容器镜像无法存储动态应用程序的数据。
(2)配置数据存储
这些配置数据用来管理容器,可以借助现有的存储来实现,主要是一些配置数据和日志记录等管理数据。
(3)应用数据存储
这些数据是重要的、临时的,也是最难存储下来的。相比虚拟机,容器的设计寿命更短,一旦容器销毁,所有的临时存储都会随之消失。因此,应用真正需要保存的数据,可以写入持久化的Volume数据卷。由于以微服务为主的容器应用多位分布式系统,容器可能在多个节点中动态地启动、停止、伸缩或者迁移。因此,当容器应用具有持久化的数据时,必须确保数据能被不同的节点所访问。另一方面,容器是面向应用的运行环境,数据通常要保存到文件系统中,即存储接口以文件形式更适应应用访问。
数据持久化存储数据量需要提前做好规划,对于容器迁移的支持也同样需要提供存储方面的支持。需要根据业务不同的需求,来提供不同的存储。etcd会存储平台的状态和配置信息,那么对性能、安全、稳定的要求就比较高。
1.3 平台中存储的应用场景
Kubernetes中对于存储的使用主要集中在一下几个方面:
◎ 服务的基本配置文件读取、密码密钥管理等;
◎ 服务的存储状态、数据存储等;
◎ 不同服务或应用程序间共享数据;
在Kubernetes中部署和运行的服务大致分为:
(1)无状态服务
Kubernetes使用ReplicateSet来保证一个服务的实例数量,如果说某个Pod实例由于某种原因挂掉或者崩溃,ReplicateSet会立刻用这个Pod的模版来替代它。由于是无状态的服务,新Pod与旧Pod一摸一样。此外Kubernetes通过Service(一个Service后面可以挂多个Pod)对外提供一个稳定的访问接口,实现服务的高可用。
(2)普通有状态服务
和无状态服务相比,它多了状态保存的需求。Kubernetes提供了以Volume和Persisettent Volume为基础的存储系统,可以实现服务状态的保存。
(3)有状态集群服务
和普通有状态服务相比,它多了集群管理的需求。要运行有状态集群服务要解决的问题有两个,一个是状态保存,另一个是集群管理。Kubernetes为此开发了StatefulSet,方便有状态集群服务在Kubernetes上部署和管理。
1.4 容器云存储设计的重要性
数据是一个企业重要的资产,如何利用好数据,可以实现企业的兴盛,如何保存好数据,则是保障企业兴盛的坚强后盾。因此,在平台建设前的规划阶段,必须做好充分的技术准备和项目调研,必须将数据的重要性提升到一个重要的层面来引起重视。
数据是企业的重要资产,保证数据不丢失,数据完整,数据一致,才能更好的开展业务。容器和虚拟机或物理机技术实现侧重不同,容器侧重无状态应用,要支持有状态应用,数据存储必须基于业务需求提前考虑和规划。
容器云是基础平台,设计平台组件、镜像、应用、中间件等多个方面,每个方面都可能有不同的存储需求。要获得理想的性能和结果,需要全面的考虑每个方面,存储等作为基础设施资源,更是必不可少的部分。
容器是用来承载应用的,应用各个层次的数据具有潜在的价值,捕获并处理、存储、分析这些数据是获取价值的步骤。因此,应用数据的持久化是容器云平台支撑业务应用的重要的基础能力之一。建好基础,才能好地服务应用。
总结
本章节介绍了容器存储、Kubernetes平台存储发展的情况,容器存储类型,Kubernetes平台存储应用的场景,以及容器云存储设计的重要性。通过这些介绍,大家可以对容器云平台存储建立一个基本的概念,并且知道相关的应用场景在哪里。在今后有容器平台项目的时候,知道容器云存储这块的设计规划,应该从哪些方面去考虑。以及,在项目的设计中,对于数据的重视程度,以及对数据价值的认识达到一个比较高的程度。总体上讲,就是给大家一个初步的容器云存储的概念。2 Kubernetes中几种常见的存储系统
从Kubernetes官方提供的数据看来,Kubernetes支持的Volume Plugin如下表所示:
Kubernetes已经提供了非常丰富的Volume和Persistent Volume插件,可以根据自身业务的特性,使用这些插件给容器提供存储服务。每一种Plugin的使用方法和注意事项参见:
https://kubernetes.io/zh/docs/concepts/storage/
容器存储接口(Container Storage Interface,CSI)是一项跨行业标准倡议,旨在降低云原生存储开发工作的门槛,从而进一步确保兼容性水平。Kubernetes中CSI,将新分卷插件的安装流程简化至与安装Pod相当,并允许第三方存储供应商在无需接触核心Kubernetes代码库的前提下开发自己的解决方案。3 持久化存储设计
前面提到了,数据是企业开展业务,进一步获取价值的源泉,是核心资产。重要的数据必须做持久化存储并按照监管/业务要求进行备份。容器持久化存储一般可以通过两种形式来实现:第一,是本地盘的形式,优势是简单易用,缺点是难以迁移共享以及伸缩;第二,是共享存储集群的形式,优势是数据共享,可以提供多种存储接口,可以弹性伸缩,缺点是架构稍显复杂。
针对不同场景,持久化存储需要有不同的选择策略:
(试读章节完。篇幅所限,如需系统学习可以直接免费下载全文,学习中有疑问,可以参加在线辅导答疑。)
针对本课程社区已组织专家线上答疑活动:
学习过程中如有疑问,就扫描添加社区管理员为好友,加入到我们为您精心准备的学习班吧!有专家在线及时解答您在学习中的各种疑惑。
2020 容器云职业技能大赛
架构师岗课程系列
课程1:容器云解决方案架构设计及建设交付课程包括:容器云平台高可靠性设计容器云平台的稳定性设计容器云平台的安全性设计容器云平台的高可用设计容器云平台的性能设计容器云产品架构分析容器云平台网络架构设计、优化容器云平台存储架构设计、优化容器云平台监控架构设计、优化容器云平台安全合规规划设计
OpenShift中的NBU数据备份
容器云平台周边环境集成规划设计
OpenShift中使用Veritas Access存储识别以下二维码
了解更多”2020年容器云职业技能大赛“信息:
长按二维码关注公众号
*本公众号所发布内容仅代表作者观点,不代表社区立场