容器云平台存储架构设计与优化
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
容器云平台存储架构设计及优化
目录
1.容器平台存储概述. (1)
1.1容器和 Kubernetes 存储概述 (1)
1.2容器存储的类型. (1)
1.3Kubernetes 平台中存储的应用场景. (2)
1.4容器云存储设计的重要性. (3)
总结. (3)
2.Kubernetes 中几种常见的存储系统. (3)
3.持久化存储设计. (4)
4.Kubernetes 存储的设计与基本架构. (5)
4.1Persistent Volume与Persistent Volume Claim概念介绍. (5)
4.2基础 Kubernetes 存储架构. (8)
5.容器平台存储实践. (9)
5.1某保险公司 OCP 容器平台存储设计. (9)
5.2某基金公司测试环境 Kubernetes 容器平台存储设计. (11)
5.3基于 CSI 开发的容器平台存储设计. (12)
6.优化建议. (13)
1 容器平台存储概述
1.1容器和Kubernetes存储概述
IT领域的变革日新月异,业务数据的急速增长,云计算的急剧扩张,以及数以百万级的物联网设备的使用正推动我们向着更高效、可靠和可扩展的方向发展。传统的应用架构已经无法满足日益增长的需求,人们正在试图寻找一条解决之路来应对这复杂的场景。容器技术在这个背景之下应运而生。容器支持敏捷设计、开发和部署;支持在生产/开发测试环境中非常容易地扩展,因此它们逐渐成为分布式、云计算的首选解决方案。容器架构提供了更好的方式来构建现代化的应用程序,大多数企业已经开始以容器形式进行生产环境的第三方IT应用托管,尤其在内部应用、融合架构和专用的基础架构领域。
随着容器技术的日趋成熟和稳定,企业顺势而为,推出了容器云平台的产品。容器云平台不仅仅可以用来管理基础设施资源,同时其强烈的业务属性(研运一体化)也逐渐为大家所知。容器云平台和前几年大热的云平台一样,对基础设施资源(计算、存储、网络)的管理技术日趋成熟。存储作为容器平台重要的组成部分,保证着容器数据的安全,在整个系统中具有举足轻重的作用,是我们整个设计的重中之重。
容器中数据的存储是临时性的,当容器消失的时候,数据也会随之消失,后来就有了持久化存储的研究;在Kubernetes平台上,Pod中同时多个容器运行,常常需要这些容器共享数据存储,来保证数据的安全性。Kubernetes抽象出Volume对象来解决存储方面的问题。Docker也有Volume的概念,但对它只有少量且松散的管理。在Docker中,Volume是磁盘上或者另外一个容器内的一个目录。后来新增了Volume生命周期的管理,以及Volume的驱动程序,虽然功能还非常有限。
Kubernetes卷具有明确的生命周期——与包裹它的Pod相同。因此,卷比Pod中运行的任何容器的存活周期都长,在容器重新启动时数据也会得倒保留。当然,当一个Pod不再存在时,卷也将不存在。Kuber- netes可以支持许多类型的卷,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为基