对于企业内部搭建Docker Registry来说,部署和运维尤为重要。今天为大家简单分享下惠普企业R&D团队在这两方面的项目实战和应用。
ChatOps这个概念最初是由Github团队提出,简单来说,是基于对话驱动的开发方式。实际做法是:把你的工具带到您的沟通过程中,并使用一个聊天机器人编写定制化的脚本,使团队可以自动执行相应任务和协同工作,使运维工作更透明更高效。。
因此,实施ChatOps需要两个重要组成部分:聊天室和机器人。聊天室也就是我们常说的团队协作平台,比较知名的有:
这里是一篇比较slack、flowdock和hipchat的文章:
http://www.slant.co/topics/135 ... wdock
机器人选取了由Github团队开发的,当下最广泛使用 hubot 。它是基于nodejs+coffeescript编写的,支持众多协作平台,如果没有你在用的,自己写adapter也很简单。除此之外,还有一些机器人:
团队中的任何一个人,只要在flowdock这样的协作平台上,像聊天一样,输入相应指令,比如 hubot show registry status
,收到这条指令的hubot就会根据后台定制的脚本,自动把相应信息通过一条聊天信息返回给你。
ChatOps的实施使运维工作更加透明,更加简洁。这样的好处很多:
我们公司目前内部署了私有Docker Registry,我们希望监控它的运行和使用情况,并且能够快速地对一些可预知的问题进行处理。通过flowdock+hubot(hubot运行在Docker容器里)就能实现这点:
hubot fetch registry error cause
,让hubot帮我们调查并返回出错的原因。根据出错原因,再使用hubot指令进行应急处理 hubot graph me registry usage since 24 hours
,hubot立刻会返回最近24小时内registry的使用情况,包括pull/push的数量等。 我们需要一个平台来管理生产环境中的容器,Rancher是一个开源项目,使用起来非常简单,容易上手,一方面Rancher提供UI,可视化创建开关容器,另一方面,当时我们对docker-compose已有一定的了解,Rancher是支持标准化docker-compose.yml的。除此以外,Rancher实现了跨主机的overlay network。基于以上考虑,我们采用Rancher,基本上满足我们对于容器部署管理的需求。
db:
scale: 2
lb:
image: rancher/load-balancer-service
labels:
io.rancher.loadbalancer.target.service1: example.com:443/service1=3000
io.rancher.loadbalancer.target.service2: example.com:80/service2=5000
service1:
...
service2:
...
意思是我们定义了一个lb的service,是rancher/load-balancer-service的image,labels中的内容则配置lb的路由规则,即访问example.com:443/service1,流量会被分发到service1,而example.com:80/service2,流量被分发到service2。我们常常在一个envrionment中,指定一台host,专门用于运行lb。然后,云服务上配置DNS,使域名绑定到这个主机的IP。这样无论如何部署,总可以很顺利地通过域名来访问这些服务。
- 容器编排scheduling的功能。Rancher允许用户给每个host定义label,比如我们常常给专门来运行load balance的主机定义一个label是for=lb,如果要lb这个service一定在此主机上运行,那么可以在docker-compose.yml中这样定义:
lb:
labels:
io.rancher.scheduler.affinity:host_label: for=lb
Rancher有更多高级的scheduling规则编写的功能,包括否定,软指定等。
io.rancher.scheduler.affinity:host_label_ne: for=lb
指service一定不能在for=lb的host上运行。
io.rancher.scheduler.affinity:host_label_soft: for=lb
指service在条件允许的情况下尽量在for=lb的host上运行。
Q:目前有没有尝到监控register运行和使用情况的好处?或者在维护私有register有没有遇到过什么问题?
能够实时监控registry,就能观察用户的行为,当我们在负载量很大的时候,能够有效保持registry稳定运行。维护私有的registry的问题,就是要跟进官方的更新,看看是否也需要同步。
Q:Rancher实际上是基于Docker的开源PaaS,基于容器技术的开源PaaS很多,比如Deis、Flynn等,但是Rancher跟这些项目不同的地方是,它尽可能的和Docker生态圈工具兼容。请问当初为什么会选择Rancher?在你看来,Rancher最吸引你的地方是什么?
Rancher的UI比较方便于上手和使用。而且Rancher的概念也更接近Docker compose,目前官方的文档也比较齐全。
Q:flowdock+hubot这种方式下的监控是否必须用Sensu,是否支持采用zabbix作监控,zabbix的远程脚本可以实现一些自动重启等等操作?
Sensu不是必须的,你可以使用你熟悉的监控服务,比如zabbix
Q:flowdock+hubot在一些安全性要求比较高的生产环境上是否可用,其发布的命令采用什么方式连接到容器/虚拟机或者主机上?要不要建立SSH免密码连接之类的操作?
hubot是拉取flowdock的信息,所以hubot可以部署在公司防火墙内。目前hubot使用docker remote API来控制虚拟机上的容器。
Q:请教一下,Rancher可以理解为compose的增强版吗?特别是可视化部分
Rancher自己有一套rancher-compose,提供load balance和auto scaling, 可以算是compose的增强版。可视化部分,是rancher的一个feature。
Q:rancher的lb是用的haproxy么?
Q:有没有做过横向比较,k8s和swarm+compose,rancher+compose。在这几种选择间做过比较?或者说为什么最终选择了rancher?
最初是选择swarm+compose,但是由于那个时候的swarm不太稳定,有bug,集群管理工作不起来。rancher部署方便,操作简单,所以就用了它。
Q:rancher的网络具体是怎么做的呢?
据目前了解,是overlay模式。各主机之间采用IPsec Tunneling来实现通信,使用udp的500和4500端口。启动时在各个主机部署容器之前启动一个Network Agent管理容器网络。具体可以参看文档:docs.rancher.com
Q:rancher master如何实现的高可用?之前看了文档搭建之后,cpu等监控图无法显示了
通过rancher-compose提供load balance和auto scaling实现高可用。监控图无法显示也是我们遇到的问题,目前正在解决。
Q:从描述看rancher的网络类似于weave吧,给每个容器分配固定IP,对集群规模比较大的或者IP地址段受限的似乎不太够用?
从我们目前的经验来看,的确有这样的限制,如果有大规模集群的需求下,需要重新评估Rancher来管理和部署。
Q: hubot是不是也支持非容器方式的部署,比如部署在虚拟机上?
可以,可以参照 https://hubot.github.com
Q:hubot使用docker remote API是否采用了安全策略?另外docker registry采用了何种安全策略?
remote API使用了TLS验证。目前我们的private registry使用了LDAP+token作为安全认证。
Q:在部署方面很重要的是动态伸缩和灰度发布,在这两方面你们是怎么考虑的?rancher在这两个方面有支持吗?
通过rancher-compose提供load balance和auto scaling实现动态伸缩。其他方面,还没有考虑过。
Q:rancher的管理数据是不是都放在了mysql里面?mysql需要搭建在物理机上吗?
mysql是rancher server自己提供的,无需手工部署。
Q:rancher能支持云存储吗?
最新版本的rancher对Docker volume插件有了支持,可以通过它来实现container的数据存储管理。
Q:请问你们实践或了解到的基于rancher的集群规模有多大?
目前我们的使用规模比较小,还没有这方面的准确数据。
Q:从介绍看整个系统是搭建在openstack上的,采用swift作为存储,那docker的部署是不是采用的nova-docker呢?容器是部署在物理机上还是虚机上的,如果是虚拟机采用的是哪种hypervisor, 性能方面如何,有没有做过相关的压测?
Docker是部署在kvm的虚拟机上,使用的企业私有云平台,目前没有做过性能测试。
Q:rancher 实际应用中有哪些要特别注意的问题,麻烦分享下?
rancher版本更新快,较低的版本会有很多bug。
Q:有考虑过升级问题么?比如registry从v1升级到v2?或者docker 升级到1.9?
目前我们使用的就是v2,使用rancher upgrade来升级。 升级Docker的成本较大,目前还没有相关最佳实践。
Q: rancher中文资料多嘛?有推荐嘛?
目前我们看的都是官方英文文档,这样能看到最新的信息,中文文档没有关注。