内容简介:你可能需要的关于Docker Swarm的经验分享
▼点击下方收听音频
你可能需要的关于Docker Swarm的经验分享 来自百度VR
Docker Swarm
利用 Docker 来开发
﹀
﹀
﹀
Docker让工作更轻松。如需要一个部署安装 MySQL 数据库,或者安装Ghost,又或者 Redis 数据库,PostgreSQL,Ruby等。实际上这些都已经被Docker化和镜像化。
只需要一条命令即可运行:
下载(镜像)—使用完—丢掉,没有其他程序搞乱本地开发环境。
扩展现有的容器十分简单,只要拥有足够的Docker基础知识,就能判定从网上下载的Docker镜像是否是有用的镜像。
Docker是开发人员的利器,添加到开发环境中好处无需多言。
若熟悉Docker,会经常使用Docker-compose一条命令来启动整个开发环境栈。
version: '2'
services:
web:
build: .
command: npm run dev
ports:
- 8080:80
docker-compose up
这是一种极为简便的方法,整个开发环境栈用几行代码描述( development stack as a code ),并且内置版本控制功能。下面来讲下生产环境。
Docker Swarm
生产环境要求
﹀
﹀
﹀
可用性:必须所有的时间点上,服务都是可用的,尽可能减少宕机时间。
性能:服务器需要处理大量的访客请求,故而性能也很重要。
易于部署和回滚。
收集日志和指标。
负载均衡:如果有某些服务或者服务器失败了,我们期望网站可以正常访问。
Docker作为一个准生产的解决方案,实际上被非常多的人低估了。 约一年前,我选择把PvP Center(https://beta.pvpc.eu/)过程中,因Docker文件系统问题,也经历了一些失败(目前,使用Overlay2文件系统,问题不复存在),现在回头想一下,这是很好的决定。
生产部署是使用原始Docker命令还是 Docker-compose
若遇到这个问题,配置好Ansible自动下载新版本的应用,然后自动部署到容器即可(Ansible配置文件: )。
接下来查看列表——
-
性能:Docker进程,是正常的内核进程,不会产生显著的资源开销。
-
易于部署:一键部署。因Ansible要检查多个判断条件,不仅仅是判断容器版本,所以需要花费一点时间。
-
回滚:所有的容器镜像都使用不同的标签后,保存在容器仓库中。对数据库迁移做了向后兼容,回滚会很容易。
但以上的做法也会产生问题:
1、不能满足一些非常规要求(在要求部署应用的时候服务器零宕机)因为要维护后端动态的负载均衡节点,不能轻易的扩容到多台服务器上。
2、需要极聪明的手段和方法才能整合持续集成/持续部署系统(CI/CD)。
3、如果分别存放特定应用程序,满足部署依赖在不同的架构仓库内 。当配置文件发生变化时,回滚变得非常困难。
坚持了这种做法一段时间,没有任何问题,但是总感觉缺失了什么东西,因为快速部署以及配置文件需要太多修改, Ansible部署也刺激到了我(太慢了)。但是,真正促使 往Docker Swarm迁移的决定性原因是——扩容到一台服务器以的特性 。 虽然可以使用相同的方式部署应用到云端,使用外部负载均衡器,但动态添加或者减少负载均衡节点依旧是痛点。把特定应用的配置文件从Ansible中移除,转而把这些配置文件发到应用仓库中。
Docker Swarm
Docker Swarm
﹀
﹀
﹀
Docker Swarm设计的目的是方便地使用Docker命令来管理多台服务器之间的容器调度,是相当前沿的新功能新特性(从Docker 1.12版本开始)。
要点 :要点:允许同时连接到多台运行Docker的服务器上。
比较简单 :对比Kubernetes,Docker Swarm上手更快。
高可用 –集群中有两种不同类型的节点: Master节点和Worker节点。
其中的一个Master节点是Leader,如果当前Leader宕机不可用,其他健康的Master中的一台会自动成为Leader 。如果Worker节点宕机不可用,宕机节点上的容器实例会被重新调度到其他健康的Worker节点上。
声明式配置 :只需明确发布什么应用以及多少份实例副本,调度系统会自动调度发布这些应用实例,并且遵循指定的限制条件等。
滚动更新 :Swarm保存了发布容器时候的配置。若更新了配置文件,容器也会批量更新,所以服务会是一直是可用的。
内置服务发现和负载均衡 :与Docker-compose实现的负载均衡类似。可以通过参考服务名,容器跑在哪里哪台服务器上已经完全不重要,这些负载均衡节点都会接收前端导过来的流量,默认是轮询策略。
Overlay网络 :如果容器暴露了一个服务端口,这个服务端口在集群内都可以被访问。这对使用外部负载均衡器帮助巨大。
在什么时候才应该考虑使用Docker Swarm
在考虑使用Docker Swarm前,先过一遍下面5个问题——
-
应用是否需要扩容到两台以上的服务器上?多台服务器总是比单台服务器复杂,或者只是想购买更高配置的单台服务器(译者注:纵向扩展)?
-
应用是否有高可用的要求?
-
应用容器化后是否真的是无状态化的?在Swarm下跑容器不应该使用存储卷,虽然理论上是可以使用存储卷,但是在测试使用的时候,它依旧不是稳定可靠的。可以考虑把多媒体文件移到亚马逊S3上,而把数据库运行在Docker Swarm之外。
-
是否需要集中日志系统,例如ELK (这个适用于所有分布式系统)。
-
是否需要已经存在于其他更成熟解决方案(如Kubernetes)中的高级功能和特性?谨记,熟悉Kubernetes比熟悉Docker Swarm要难得多。
生产环境使用Docker Swarm经验
截止目前,应用跑在Swarm上面已经有六个月的时间,从Docker-compose迁移到Swarm花去一周的时间(包括学习如何迁移等)。需要调整配置文件,以便让应用容器完全是无状态的,使用外部集中式日志和指标收集。高峰时,共运行了35个节点。对集群的管理十分方便。
例如:
docker service scale name_of_service=30
or
docker service update --env-add SECRET_ENV=youdontneedtoknowit name_of_service
截屏如下:
部署流程如下图:
在Deploy区域内,使用最新Docker-compose v3版的语法和Docker stack deploy命令。把发布应用容器的配置文件存储为VCS这项工作变得前所未有的简单。无需要手工修改任何配置,轻松地部署应用容器到Swarm集群。
配置文件例子:
v ersion: '3'
services :
web :
image : registry.gitlab.com/example/example # you need to use external image
command : npm run prod
ports :
- 80:80
deploy :
replicas : 6
update_config :
parallelism : 2
delay : 10s
restart_policy :
整个部署命令只有一行: dockerstack deploy application .当然,这里使用了Gitlab.com的流程,结果如下图所示:
可以在Web界面上进行回滚操作,甚至在手机上执行回滚操作。
Docker Swarm
结语
﹀
﹀
﹀
以上都是个人对Docker Swarm的观点。之前考虑过使用其他选项,如果想让应用容器化,进而伸缩扩容到多台服务器上,目前这种方法是最好的选择。
原文作者:Jakub Skałecki
以上所述就是小编给大家介绍的《你可能需要的关于Docker Swarm的经验分享》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 你可能需要 SPI 了
- 你很可能需要知道这个调试小技巧
- 【译】你可能不需要Moment.js
- (译)你可能不需要Redux:Flutter版
- 为什么你可能不需要无服务器
- 企业需要意识到公共云可能出现安全漏洞
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Usability for the Web
Tom Brinck、Darren Gergle、Scott D. Wood / Morgan Kaufmann / 2001-10-15 / USD 65.95
Every stage in the design of a new web site is an opportunity to meet or miss deadlines and budgetary goals. Every stage is an opportunity to boost or undercut the site's usability. Thi......一起来看看 《Usability for the Web》 这本书的介绍吧!