热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

containerasaservice0x01基于Docker的私有云&混合云构建方案

container-as-a-service-0x01—基于Docker的私有云&混合云构建方案By苏依蜀黍.2016.06.07whatDocker是一个开源的引擎,可以轻松的为

container-as-a-service-0x01 — 基于Docker的私有云&混合云构建方案

By 苏依蜀黍 . 2016.06.07

what

Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。

DevOps近年大热,Docker也被各大云服务提供商广泛支持,他的应用场景如下且不止于此:

  • web应用的自动化打包和发布

  • 自动化测试和持续集成、发布

  • 在服务型环境中部署和调整数据库或其他的后台应用

  • 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境

比如显著的优点有资源独立&隔离、环境的一致性、轻量化、当然了,还有一个大家都想要的特性:”Build Once, Run Everywhere”。

why

可是作为一家初创公司,为什么我们要构建所谓的”私有云&混合云”?

作为一个实用主义,上述的特性或者说应用场景,最能够吸引我的大概只有”Build Once, Run Everywhere”,然后这仍然不足以成为要推动该方案落地的动力,why?

我们可能以及未来要应对的需求主要有以下几点:

  • 快速扩容(应对可能出现的高并发需求)

  • 快速减容(媒体相关的内容具有时效性,社交类信息存在访问高峰与低谷)

  • 动态迁移(不停机更新、实时迁移服务,备份,容灾等)

  • 统一入口(单一或者相对固定的入口,后端服务的迁移不再影响前端业务)

  • 持续集成(包含测试,上线,回滚等功能)

应对上述的需求,其实完全可以找到对应的替代方案:

  • 动态扩容——使用Aliyun或者Amazon的AutoScale类服务,自动控制服务器数量

  • 动态迁移——使用中间件如nginx,upstream不停机更新

  • 统一入口——Route53或者ELB/SLB做端口转发,负载均衡后端再次使用VPC内网转发

  • 持续集成——使用Jenkins&Webhook搭建自动化平台、或者使用Webhook与应用中心,程序注册为应用中心应用,动态监测,自动更新

但是,看看上面的内容就可以了解到,对初创公司而言,要做这些事情,并不简单,没有那么多的人力物力去做,但是,业务在这里,我们不可能不做,怎么办?

how

这里我们开始今天的主题:

基于Docker的私有云&混合云构建方案

基于该主题,我们要先理清一些Docker相关的概念并就该方面会遇到的问题做一些解答

host/hode

Host/Node即物理服务器或者云服务器,它是一切服务运行的基石,所有的应用&服务都运行其上,包含了:

  • Docker Engine (Docker引擎,运行容器)

  • App(容器应用,如Web服务)

  • Agent(*容器应用,特殊的容器应用,将该Host注册到容易的管理平台)

  • Proxy(*容器应用,特殊的容器应用,用来在内网进行转发)

我们的Host使用了Aliyun以及Amazon的云服务器,动态伸缩包含:

  • 服务器动态伸缩

  • 应用动态伸缩(通过Docker管理服务进行管理)

服务器如何动态伸缩要实现的功能是:

  1. 调用API开通/销毁Ecs

  2. 记录Ecs信息如:ip/user/passwd/region/info(配置信息)

  3. 注册Ecs到管理平台

container

container即运行的服务或者应用,如nodejs的前端应用、php的后端服务、python的媒体处理等,当然还可以包括mongodb/mysql/redis等数据服务

  1. 开发,采用ansible docker或者各自环境的官方repo对不同运行环境的应用进行容器化,其实比较简单,针对不同的运行环境在项目里加入一个dockerfile即可,并不需要开发者做过多的配置

  2. 构建,这里我们有多种选择(使用Aliyun或者Daocloud的自动构建,在内网配置机器自行构建也可以,方案较多,省时省力的方式自然是使用第三方服务了)

  3. 测试,可以选择在dockerfile中执行test或者在推送到test分支,并部署到test服务器,人肉测试,按需选择

  4. CI,CI这里我们可以注册gitlab的runner或者是直接使用daocloud的CI,按需选择

elb/slb

集群处理上,我们选择在同一个region内,使用一个slb/elb做负载均衡,其他服务器不开通外网服务,在内部针对一组应用配合一个nginx或者haproxy成为一个服务/应用单元,多个这样的单元成为一个当前可用区的内部服务,通过负载均衡拥有统一的入口

slb/elb:
80:80 {frontend service} -- 应用单元
{frontend service} -- host_x0
nginx:80
host_x0_1
host_x0_2
...
8080:8080 {backend service} -- 服务单元
{backend service} -- host_x1
nginx:80
host_x1_1
host_x2_1
...

dns/cdn

基于region构建集群,仍然不能完美解决跨区域的入口统一问题,所以这时候我们有两种方案可选:

  1. 基于dns的负载均衡,可使用dnspod,添加多个记录,对应到同一个域名的不同加速域名

  2. 基于cdn的方案,则是添加多个回源ip,但是注意一下,该ip,是slb/elb的ip

architect

《container-as-a-service-0x01 -- 基于Docker的私有云&混合云构建方案》

practice

这里我们使用rancher作为docker host的管理中心,在每一个host上运行一个rancher-agent与rancher-server进行通讯,并以此来完成基于应用的快速伸缩,当然,我们的服务中不包含data-service,也不包含storage-service,我们使用阿里云的oss作为存储服务,使用rds作为数据库,将更多精力放在开发以及业务上

环境:

  • 云上主机:阿里云Ecs/亚马逊Ec2(Ubuntu14.10/Centos7.x)

  • 负载均衡:阿里云负载均衡器

  • 容器管理:rancher-server

配置

  • Host都已经预装了docker-engine,并且在杭州可用区B

  • Rancher-server安装在该区域内的一台独立主机上,具有外网访问ip,该机器暂时不使用负载均衡(后期会用)

运行

  • rancher-server

    docker run -d --restart=always -p 8080:8080 rancher/server

  • rancher-agent(add hosts)

    docker run -d --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.0.1 {Server_Domain}:{Server_Port}/v1/scripts/{registrationToken}

管理

一段时间后就看到在rancher-server的控制台里看到有如下机器:

《container-as-a-service-0x01 -- 基于Docker的私有云&混合云构建方案》

此时Stacks中创建一个Nginx-Test的Stack,创建一个Service(包含多个nginx的container),创建一个load balancer

《container-as-a-service-0x01 -- 基于Docker的私有云&混合云构建方案》

其结构如下:

《container-as-a-service-0x01 -- 基于Docker的私有云&混合云构建方案》

并能够根据需求动态伸缩应用数量:

《container-as-a-service-0x01 -- 基于Docker的私有云&混合云构建方案》

最后,我们需要将load balancer配置为elb/slb服务的后端,并最终将服务暴露到外网。

more

  • http://docs.daocloud.io/

  • http://docs.rancher.com/

  • container-as-a-service-0x00


推荐阅读
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 14亿人的大项目,腾讯云数据库拿下!
    全国人 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 如何利用 Myflash 解析 binlog ?
    本文主要介绍了对Myflash的测试,从准备测试环境到利用Myflash解析binl ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • 本文简述了数据库的概念、作用及发展阶段的特点。数据管理技术的发展经历了人工管理阶段、文件系统阶段和数据库系统阶段,分别描述了各个阶段的特点。数据库、数据库管理系统和数据库系统的含义和联系也进行了简述。数据库是长期存储在计算机内、有组织、可共享的大量数据的集合,而数据库管理系统是整个数据库系统的核心部分,负责统一管理和控制用户对数据库的操作。数据库系统是以数据库为基础的应用系统。总结了数据库的保存方式、管理方式、共享性和独立性等特点。 ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
author-avatar
我是奥特曼8
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有