深入浅出 Docker Swarm | DaoCloud 现推出 Docker Swarm 系列技术文章,为大家深入浅出地解读 Docker Swarm 的概念、使用方法以及最真实的案例分析。
这篇文章,让我们分享 Swarm 案例: HealthDirect 用 Docker Swarm 进行蓝绿部署.
关于 HealthDirect :澳大利亚 HealthDirect 向全体澳洲公民提供健康信息和诊疗建议咨询服务。无论用户身处何时何地,他们都能从网上向专业的,有良好信誉的医疗顾问寻求关于自己健康问题的咨询服务,并且在需要的时候找到当地最近的健康服务中心。
在 HealthDirect ,我们用 Puppet 部署我们的 Swarm 集群,保证我们的集群在每次部署的时候都能维持持续更新状态。在此过程中,我们将从本地私有 Trusted Registry 调用 Docker 镜像。
我们的环境基于 AWS 云服务,但同样的方法可以很轻易地移植到其他云服务供应商或 OpenStack 等开源项目里。我们之所以选择内部私有 Registry ,是因为在部署的时候把我们的镜像放置得离 endpoint 近一些,这样可以获得更快的速度。
首先,来看看整个流程:我们假设用一个部署工具如 Jenkins 将我们的实例配置到构建服务器。作为整个构建过程的一环,云端初始化 userdata 会把 Puppet 架到我们的节点上。
整个环境如下所示:
搭建集群的话,我们用到了 Puppet 的 module :_Docker, _Docker Swarm 和_Consul (作为 Swarm 后端的服务发现)。
我们用如下代码来搭建 Consul 集群:
以上代码片段中,我们将建立起 Consul 集群,并设置一个简易的健康监测,以确定我们的 Docker daemon 是运行正常的。你会发现我们用了两块代码来建立 Consul ,第一块用来搭建集群,第二块用来连接集群。
接着我们将用叫做 swarm-private 的原生 Docker 网络来建好 Swarm 。我们用 overlay 驱动来创建一个名为 swarm-private 的私有网络。这次我们又用两块代码来组建集群,第一块为 master ,第二块仍然起到向集群添加节点的功能。
最后的代码片段将把应用部署到我们的 Swarm 集群中。在此实例中,我们在 Trusted Registry 上保存了 Nginx 、应用和 db 镜像。然后我们用 Puppet 拉取镜像并将其部署在集群上。
如你所见,我们利用了原生 Docker 网络栈来锁定数据库的访问。在生产环境中,你会需要增加调度过滤来保证所有容器能够正确地展开。
如上面图表所示,我们已经建好了一个可正常运作的 Swarm 集群,它定义准确,而且可以重复使用。当有新的应用发布时,我们还可以新建一个 Swarm 集群。这对开发者, QA 团队和生产部门来说都是福音,因为他们可以自由进行蓝绿部署,并且重定向负载平衡器或 DNS 。
下期预告: Swarm 在房屋信贷领域的最佳实践