HealthDirect 用 Swarm 进行蓝绿部署

深入浅出 Docker Swarm|DaoCloud 现推出 Docker Swarm 系列技术文章,为大家深入浅出地解读 Docker Swarm 的概念、使用方法以及最真实的案例分析。这篇文章,让我们分享 Swarm案例:HealthDirect 用 Docker Swarm 进行蓝绿部署.

关于 HealthDirect:澳大利亚 HealthDirect 向全体澳洲公民提供健康信息和诊疗建议咨询服务。无论用户身处何时何地,他们都能从网上向专业的,有良好信誉的医疗顾问寻求关于自己健康问题的咨询服务,并且在需要的时候找到当地最近的健康服务中心。

在这篇博文中,让我们看看 HealthDirect 是如何用 Docker Swarm 来进行蓝绿部署( blue green deployment )的。

在 HealthDirect,我们用 Puppet 部署我们的 Swarm 集群,保证我们的集群在每次部署的时候都能维持持续更新状态。在此过程中,我们将从本地私有 Trusted Registry 调用 Docker 镜像。

我们的环境基于 AWS 云服务,但同样的方法可以很轻易地移植到其他云服务供应商或 OpenStack 等开源项目里。我们之所以选择内部私有 Registry,是因为在部署的时候把我们的镜像放置得离 endpoint 近一些,这样可以获得更快的速度。

首先,来看看整个流程:我们假设用一个部署工具如 Jenkins 将我们的实例配置到构建服务器。作为整个构建过程的一环,云端初始化 userdata 会把 Puppet 架到我们的节点上。

整个环境如下所示:

0

搭建集群的话,我们用到了 Puppet 的 module:_Docker, _Docker Swarm 和_Consul(作为 Swarm 后端的服务发现)。

我们用如下代码来搭建 Consul 集群:

640以上代码片段中,我们将建立起 Consul 集群,并设置一个简易的健康监测,以确定我们的 Docker daemon 是运行正常的。你会发现我们用了两块代码来建立 Consul,第一块用来搭建集群,第二块用来连接集群。

接着我们将用叫做 swarm-private 的原生 Docker 网络来建好 Swarm。我们用 overlay 驱动来创建一个名为 swarm-private 的私有网络。这次我们又用两块代码来组建集群,第一块为 master ,第二块仍然起到向集群添加节点的功能。

641
最后的代码片段将把应用部署到我们的 Swarm 集群中。在此实例中,我们在 Trusted Registry 上保存了 Nginx、应用和 db 镜像。然后我们用 Puppet 拉取镜像并将其部署在集群上。

642
如你所见,我们利用了原生 Docker 网络栈来锁定数据库的访问。在生产环境中,你会需要增加调度过滤来保证所有容器能够正确地展开。1

如上面图表所示,我们已经建好了一个可正常运作的 Swarm 集群,它定义准确,而且可以重复使用。当有新的应用发布时,我们还可以新建一个 Swarm 集群。这对开发者,QA 团队和生产部门来说都是福音,因为他们可以自由进行蓝绿部署,并且重定向负载平衡器或 DNS 。

下期预告:Swarm在房屋信贷领域的最佳实践

Leave a Reply

Your email address will not be published. Required fields are marked *