当容器遇见存储 企业该如何实现容器持久化存储

作者:运维知识    发布时间:2019-12-18 21:10     浏览次数 :

[返回]

IT领域,变革的速度令人瞠舌。快速增长的数据,云计算规模的处理正推动企业向着更高效、更可靠和可扩展的方向前行。传统的应用架构已日趋极限,所幸的是,最被看好的容器化技术正成为应对上述难题的妙药良方。

1 介绍

容器技术是这两年热门的话题,因为容器技术给我们带来了很多方便的地方,节约了不少成本,不管是在运维还是开发上。而如今最热门的开源容器工具就是docker和Kubernets。

Docker是PaaS提供商dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于go语言并遵从Apache2.0协议开源。Docker采用 C/S架构 Docker daemon 作为服务端接受来自客户的请求,并处理这些请求(创建、运行、分发容器)。 客户端和服务端既可以运行在一个机器上,也可通过 socket 或者RESTful API 来进行通信。

Kubernetes是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展。如果你曾经用过Docker容器技术部署容器,那么可以将Docker看成Kubernetes内部使用的低级别组件。它支持自动化部署、大规模可伸缩、应用容器化管理。

在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。我们可以使用kubernets创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。

2019山东企业数字化转型大会暨山东CIO年中大会于6月22日在青岛成功举办,来自全省200余家企业CIO莅临参与,与众多IT及企业界专家交流最前沿的IT技术,解读最新政策,共话企业数字化转型大势,把脉新技术动向及趋势。

容器触发无限场景

2 容器存储的需求

Docker里的数据不做持久化的话数据是不保留的。所有的数据都是临时的,关了或者重启都会让数据丢失。如何持久化保存容器的数据,这是自Docker诞生之日起就一直存在的问题。在Docker的初始设计中,数据与容器共生共灭,人们很难把容器从一台机器迁移到另一台机器。时至今日,存储的发展和变革给了容器持久化存储以多种多样的解决之道。

容器架构使用到三种类型的存储:

第一类是镜像存储数据。这可以利用现有的共享存储进行交付,要求类似于服务器虚拟化环境中虚拟机镜像分发保护的平台架构。容器镜像的一项好处在于其存储容量相较于完整的虚拟机镜像小了许多,因为它们不会复制操作系统代码。此外,容器镜像的运行在设计之初便是固定的,因此可以更高效地存储、共享。但也因此,容器镜像无法存储动态应用程序的数据。

第二类是容器的管理配置数据。不论使用Docker、Kubernetes、Swarm、Mesos还是其它类型的容器管理工具,都需要存储配置数据、日志记录等管理数据。这类数据容量不大,ETCD集群等分布式系统存储,没有共享需求,可以直接使用节点的本地硬盘。

第三类是容器应用的存储,相比虚拟机,容器的设计寿命更短,一旦容器销毁,所有的临时存储都会随之消散。因此,应用真正需要保存的数据,可以写入持久化的Volume数据卷。由于以微服务架构为主的容器应用多为分布式系统,容器可能在多个节点中动态地启动、停止、伸缩或迁移,因此,当容器应用具有持久化的数据时,必须确保数据能被不同的节点所访问。另一方面,容器是面向应用的运行环境,数据通常要保存到文件系统中,即存储接口以文件形式更适合应用访问。

Kubernetes是开源的容器集群管理平台,可以自动化部署、扩展和运维容器应用。Kubernetes的调度单位称作Pod,每个Pod包含一个或多个容器。Pod可部署在集群的任意节点中,存储设备可以通过数据卷提供给Pod的容器使用。为了不绑定特定的容器技术,Kubernetes没有使用Docker的Volume机制,而是制定了自己的通用数据卷插件规范,以配合不同的容器运行时来使用(如Docker和rkt)。数据卷分为共享和非共享两种类型,其中非共享型只能被某个节点挂载使用,共享型则可以让不同节点上的多个Pod同时使用。对有状态的应用来说,共享型的卷存储能够很方便地支持容器在集群各节点之间的迁移。

为了给容器提供更细粒度的卷管理,Kubernetes增加了持久化卷PV(Persistent Volume)的功能,把外置存储作为资源池,由平台管理并提供给整个集群使用。Kubernetes的卷管理架构使得存储可用标准的接入方式,并且通过接口暴露存储设备所支持的能力,从而在容器任务调度等方面实现了自动化管理。

容器存储控制平面(Container Storage Control Plane),控制平面通常由软件实现,主要是接收北向API收到的存储请求,如创建、删除、加载、卸载和迁移数据卷等,并传递给底层数据平面去完成实际的存储操作。控制平面一般需要满足调用层规范的API,既可以是Docker容器引擎卷插件(Volume Plugin) 的API,也可以是Kubernetes等编排调度平台的Volume API。

存储数据平面(Storage Data Plane)提供数据实际的持久化能力,不仅需要实现容器数据卷的读写、快照、数据保护和复制等存储操作,而且通常还需具备多节点共享数据的能力。数据平面可以基于文件NAS实现,也可以基于云盘来实现数据存储功能。从部署架构上看,文件存储从易用性,扩展性和共享上更优于云盘。

图片 1

NAS文件存储挂载流程:

  1. API接口调用Kubelet准备启动POD,并挂载NAS。

  2. Kubelet读取配置文件发现需要挂载的NAS,并通知Volume组件挂载。

  3. FlexVolume调用挂载命令挂载NAS。

  4. NAS挂载到ECS主机的/var/lib/kubernet/pods/**/volumes/alicloud-nas/pv-nas目录下。

  5. Kubelet创建POD,并将挂载了NAS的/var/lib/kubernet/pods/**/volumes/alicloud-nas/pv-nas目录映射到POD的/data目录。

图片 2

现实工作中,企业云工程师经常会遇到这样的问题:程序在我这儿跑得好好的,怎么到你那里就不行了?系统好卡,是哪个进程把CPU给吃光了?这套系统我已经搭建好了,要不你再重新搭建一遍?每每出现这类问题,容器技术都成为解决它们的不二法宝。

3 阿里云NAS文件存储

阿里云文件存储NAS是一个弹性扩展,高可靠,高可用,高性能的分布式文件系统。它基于 POXIS 文件接口,天然适配原生操作系统,共享访问,同时保证一致性和锁互斥,并且性能随容量线性扩展。

阿里云文件存储NAS架构:

图片 3

第一层是计算层,使用标准文件协议NFS/SMB或兼容posix的定制化客户端来访问文件存储。第二层是阿里云网络负载均衡ALB,把客户端请求轮转发送到前端机。第三层是负责协议处理的前端机,协议尽量做到无状态,涉及状态部分下沉到元数据管理层。第四层是元数据管理,把目录树结构转变成key-value对,通过基于log structure merge tree的分布式key-value来实现。第五层是元数据和数据持久化在盘古,使用盘古的分布式存储量提供高达10PB,和99.999999999%的数据可靠性,容量可弹性扩展,按需使用。

元数据和数据分离,NAS Protocol前端机IO直连盘古,把数据位置信息和元数据一起更新,前端机通过元数据更新盘古文件的信息。盘古文件是会散在整个集群的,所以前端机读写可充分利用整个集群的IO能力,最高可提供50K的IOPS和20GB/s的带宽吞吐量。

安全隔离,基于VPC安全组提供网络隔离和ACL访问控制,保证海量容器使用共享存储时的数据安全隔离。同时提供容器到文件存储的传输加密,保障数据传输过程在不被窃取和篡改。

数据备份,阿里云文件存储提供文件系统级的数据备份功能,可以基于灵活的备份策略提供多副本的数据保护,在发生数据误删除,错误修改的情景时,可以使用历史副本恢复容器数据。

焱融云解决方案架构师赵振东发表了“下一代云存储 赋能企业数字化转型”的主题演讲分享: 随着容器技术的不断成熟与发展,在企业数字化时代,容器及基于容器的应用正在占领数据中心。近年来,在容器平台上运行的应用程序,已经有超过一半属于有状态应用,例如 MySQL、PostgreSQL、WordPress 等。对于无状态应用来说,无论是节点故障还是扩容,容器平台本身都能轻松应对,但对于有状态应用来说,就必须要配合专业的容器存储软件,才能应对故障等特殊场景,满足业务的需求。

虽然容器技术很早就已经存在,例如lxc、jails。但自从2013年Docker的横空出世,对容器的管理方式做了良好的封装。尤其是镜像概念及docker build工具的出现,极大的促进了容器技术的普及,同时也使得更多应用场景成为可能。

4 阿里云容器服务解决方案

图片 4

易用性:

  • 一键创建容器集群。

  • 基于容器的一站式应用生命周期管理。

  • 整合阿里云NAS文件存储,容量按需弹性扩展。

  • 支持图形化界面和 OpenAPI。

安全可控:

  • 在阿里云容器服务中,容器运行在用户自己的 ECS 节点上,不会和其他用户共享,容器之间安全隔离。

  • 网络上,用户可以通过安全组定义容器集群内 ECS 节点和容器的访问策略,允许或者拒绝某些来源的地址访问容器。

  • 容器集群的管理 API 使用双向证书校验,避免接口被非法用户访问。

  • 专门的容器安全解决方案,如 neuvector,可以很方便地集成到阿里云容器服务上,提供更高层次的安全防护。

高效可靠,高性能:

  • 支持海量容器秒级启动。

  • 共享文件存储,支持容器的异常恢复和自动伸缩,数据不丢失。

  • 支持跨可用区的容器调度。

5 阿里云容器和存储业务部署配置

1.创建Kubernets集群

图片 5

2.确认集群配置

图片 6

3.集群开始自动创建部署

图片 7

4.集群创建成功

图片 8

1.创建NAS文件系统

图片 9

  1. 添加挂载点

图片 10

3.成功添加挂载点,挂载地址用于后续对接容器使用

图片 11

1.为集群创建存储卷

图片 12

  1. 成功创建NAS存储卷

图片 13

1.创建应用容器

图片 14

2.配置容器镜像、存储和网络

镜像选择:

图片 15

存储配置,选择NAS文件存储作为数据存储:

图片 16

集群网络服务配置:

图片 17

集群网络路由配置:

图片 18

3.Nginx容器应用部署成功:

图片 19

4.在主机测试Nginx,打开浏览器输出www.test.com域名,服务正常:

图片 20

本文作者:曜斯

阅读原文

本文为云栖社区原创内容,未经允许不得转载。

图片 21

众所周知,很长一段时间,IaaS平台主要基于虚拟机承载业务服务。但随着业务复杂度的升高,每一个虚拟机都是一个完整的操作系统,所以需要给其分配物理资源。而当虚拟机数量增多时,操作系统本身消耗的资源势必增多。此外,由于开发与运维的环,比较复杂。所以在部署上线应用时,企业依旧需要花费不少时间去处理环境不兼容的问题。因此虚拟机分发慢,资源耗用大,无法体现配置既代码的弊端逐步体现出来。

“传统存储产品完全不是为容器时代设计,缺少与Kubernetes等主流编排平台的整合,挂载底层块存储时浪费大量时间,无法适应上层敏捷的应用需求,且成本高昂”

恰巧,容器类似于集装箱的设置有着镜像小,启动快,占用资源少的特点,解决了虚拟机的不足。它能够更好的适用于无状态的服务,尤其是web服务,DevOps,微服务等场景。从Docker的角度来说,只要提供各种容器,它们相互之间配合,通过搭积木的方式就可以向上提供服务。

--An I&O Leader's Guide to Storage for Containerized Workloads, Gartner

持久化存储造就容器难题

与其他开源解决方案相比较,焱融云YRCloudFile具有如下特性:

而随着互联网技术的蓬勃发展,从虚拟化到OpenStack,再到容器技术,都走向了成熟的商业应用。随着Kubernetes的风头正劲,给容器和业务的管理带来更多的便利性,企业用户已经开始逐步将原有运行在虚拟机上的应用迁移到容器上来。

Ø 编排平台适配:支持主流编排框架;提供CSI、FlexVolume 插件

对于企业级用户来说,业务庞杂、高耦合低内聚、平台各异、语言各异等是共通的系统属性。容器的出现让企业真正可以聚焦在业务本身,而不受运维开发的困扰。但是当企业在将传统应用容器化的时候,也面临一些挑战。他们希望通过持久化存储以保证高可靠、高可用和高性能。

Ø 高性能:支持RDMA技术,高效元数据访问策略

但容器本身并不提供持久化存储的解决方案。存储在容器内部的任何内容,在容器被销毁以后,数据将自动消失,例如网站页面、配置文件、数据库和大数据应用等。因此在企业真正运行环境中,如何实现容器持久化存储一直是业界的热点问题。

Ø 高可用:全分布式架构,同城两数据中心双活容灾

当容器遇见存储

Ø 增值特性:PV热点分析,PV容量配额,性能QoS

为了确保持久化存储的灵活性及可访问性,远程网络存储是最理想的方案。这样既可以利用不同的协议,如ISCSI、NFS等访问,也可以支持不同介质的存储,如云存储、SAN设备,从理论上打通了现有的存储与容器的整合之路。

图片 22

但现有的存储方案真的能很好的应对容器存储场景吗?答案是NO!就像虚拟化流行时发现存储不能满足需求一样,今天容器用户依然会发现传统的存储体系不能满足容器场景下对存储的需求。

焱融云不仅是唯一进入CNCF LandScape存储图谱的中国公司,此外,在2019国际超算大会上最新公布的IO500存储系统性能排名中,焱融云成为中国初创企业中唯一入选榜单的公司,在全球的Storage Vendor中排名第八,比肩DDN、Dell EMC、WekaIO、IBM、NetApp、浪潮等一线厂商。

在现有的容器管理平台中,例如Kubernetes,已经内在支持了广泛的存储插件,典型的可分为两部分。首先是文件存储,例如CephFS、GlusterFS、NFS等。CephFS, GlusterFS尽管有庞大的社区的支持,但成熟度上还需要进一步验证。同时在大型集群的环境下它们还无法达到企业级稳定性、可靠性的要求,在高可靠、高性能场景也有着架构上的不足。而NFS在性能上存在不足。其次是块存储,例如Ceph RBD、SAN存储等。对于这类存储,本身并不支持多读写的需求,而对复杂的容器业务系统又是强需求。

作为国内最早推出商用云原生存储的服务商之一,焱融云秉承持续创新的理念,致力于为客户提供专业的下一代容器云存储。