F5中国
作者F5中国·2016-01-12 10:08
其它·F5

应用交付和新一代虚拟化Docker

字数 3343阅读 2269评论 0赞 1

什么Docker?

http://2c.zol-img.com.cn/product/164_1200x900/382/ceYEML97SixvI.png

Docker是一个开源项目,诞生于2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google公司推出的 Go 语言实现。Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术,在LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。

Docker已经吸引了IBM、Google、RedHat等业界知名公司的关注和技术支持,无论是从 GitHub 上的代码活跃度,还是Redhat宣布在RHEL7中正式支持Docker, 都给业界一个信号,这是一项创新型的技术解决方案。就连 Google 公司的 Compute Engine 也支持 docker 在其之上运行, 国内“BAT”先锋企业百度Baidu App Engine(BAE)平台也是以Docker作为其PaaS云基础。

 

Docker与传统虚拟机建构对比

 

Docker入门白皮书:总能找到你想要的

 

传统虚拟化解决方案属于深度硬件虚拟化,虚拟化的水平比较高,用户进程都是在KVM等虚拟机容器中翻译运行,操作系统调用的是由hypervisor所提供的虚拟化硬件,实际上是提供一个虚拟硬件环境给操作系统调用适合的驱动程序,虚拟机所服务的对象实际上是操作系统而不是应用本身。Docker容器运行于操作系统之上,每一个容器包括应用本身以及运行应用所需要的运行时环境,硬件资源通过操作系统kernel进行共享,运行时以在用户空间内的独立进程存在,不依赖特定的基础架构,容器类虚拟化服务的对象是应用,而不是操作系统。

 

应用容器虚拟化定位

 

虚拟化的演进实际上可以理解为现代计算机分层体系的细化和解耦,前一阶段的虚拟化浪潮实际在硬件和操作系统中间增加了hypervior层,实现了硬件和操作系统的解耦,Docker等新兴容器类虚拟化的实现实际上是在应用和操作系统中间又增加了一层,完成操作系统和硬件的解耦,至此,操作系统已经看成南向接硬件,北向接应用容器的中间层。

Docker能为我们带来什么?

 

具体说来,Docker 在如下几个方面具有较大的优势。

更快速的交付和部署

对开发和运维(devop)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。

更高效的虚拟化

Docker容器的运行不需要额外的hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。

更轻松的迁移和扩展

Docker容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。

更简单的管理

使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。

F5应用交付和Docker

F5应用交付和Docker都有一个鲜明的特点,两者都直接服务于应用,docker赋予应用大规模快速部署,快速运行的能力,F5应用交付则赋予应用统一的入口,将分散在多个操作系统中不同的应用实例整合成一个一个的应用集群,赋予应用高性能,高可用性,快速交付给最终用户,在应用的生命周期中,docker实现了部署,迁移,启动的“快”,而F5应用交付则赋予应用在运行时的“快”和“稳”。

应用交付整合

对比传统虚拟化,Docker提供两个最显著的特性:

l  硬件可以容纳更多的应用实例

l  应用在服务器上进行部署,实例化变得更快速

在传统服务器虚拟化上,虚拟机性能通过CPU和内存进行分配,docker中采用进程的方式将计算资源进一步碎片化,同样需要应用交付将分散在不同主机上的实例进行统一整合,另外应用实例快速实例化和部署不意味着应用交付到最终用户的快速化,需要应用交付相关设备的配合,作为应用的统一出口,应用交付设备同样需要具备快速响应docker实例迁移的能力,

从最终用户到应用实例,可以分为两个阶段,全局应用交付(域名解析)以及本地应用交付(IP路由访问),F5 BIGIP可以这两个阶段对Docker的部署进行整合,在IP访问阶段,F5 BIGIP通过和Docker主机通信,获取Docker上所运行容器实例,然后全自动化的对应用交付配置进行修改docker完成实例变更后,F5将用户请求发送到正确的docker容器主机.

Docker和本地应用交付

BIGIP:你好docker,请提供所有运行的实例以及所使用的ip和端口

Docker:Ok,这些是你需要的信息

BIGIP:好的,我将这些信息按照预定义规则进行配置更新

User: 我想要访问www.example.com这个应用

BIGIP:好的,我查到一个容器实例,请访问这个地址

Docker主机在启动实例的过程中,往往需要将容器内端口和主机端口做映射,我们通过BIGIP和Docker管理API的交互,获取容器名称和端口的映射关系,在F5 BIGIP中保持实例名称和应用名称的对应,动态更新F5的pool对应信息,通过一段HTTP iRule,检索报文头中查询的主机名称,并根据约定的映射关系,将客户端请求发送给指定的容器,例如访问www.example.com,应用交付设备可以将请求恰当的转发到被命名为www-2和www-2的容器中,无论容器迁移到那台主机,主要image名称保持一致,都可以被F5动态发现并进行流量的牵引。

通过上述的步骤,可以实现Docker在快速迁移的过程中,降低整体的RTO时间,实现在Docker环境下容器实例迁移中的应用交付零运维。

Docker部署在全局应用交付

在多个Docker集群或者多中心的环境下,需要对请求访问流量在多个集群或者多中心中进行迁移,此时可以采用F5 GTM进行域名的牵引,此时BIGIP可以作为针对docker环境的主DNS或委派源存在。有下面两种情况:

l  采用F5 LTM 作为Docker主机的负载均衡和流量IP引导

此时GTM所解析的内容是F5 LTM上的VS,F5可以将流量根据请求报文头信息负载均衡到合适的docker容器实例,GTM可以采用泛域名的方式对运行在docker容器集群中的DNS请求进行解析,例如

www1.example.com 可以cname 成www1.docker.example.com

*.docker.example.com-> 10.0.0.10(LTM-Docker集群-1)/ 10.0.0.11(LTM-Docker集群-2)

此时LTM收到www1.example.com的请求,将根据从多台Docker主机获取的实例名称以及本地的实例名称/域名对应关系将请求负载均衡到合适的Docker主机

l  直接采用多台Docker主机,采用GTM的模式进行引导

此时GTM承载Docker容器实例和应用域名之间在多中心的映射关系,可以通过DNS iRule,将实例名称/IP地址/域名三者在iRule-DataGroup中进行关联,例如www1.example.com 对应实例www1-1,www1-2,www1-1/www1-2的实例运行的主机IP可以动态添加到iRule所调用的外部数据集合,当发生迁移可以快速的将域名解析指向到实例的新主机或者新IP

 

总结

整体部署:

通过上述的步骤,整合Docker集群部署以及应用交付,降低单个容器异常和变更的风险,进一步可以实现实现容器实例在两个数据中心中的无缝迁移,充分发挥docker快速部署,快速迁移的特点。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

1

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广