自动化部署

pssh

pssh是一个python编写可以在多台服务器上执行命令的工具,同时支持拷贝文件,是同类工具中很出色的,类似pdsh。

Ansible

SaltStack

Puppet注重于最终状态,SaltStack注重于实时命令的运行,SaltStack=Puppet+Func,且SaltStack还是使用Python开发的,入手以及后续的功能自定义开发都是非常方便的。

DevOps

DevOps(英文Development和Operations的组合)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

chef

Chef结构图

比较 Puppet Chef
历史 有一些 还年轻
用户 多,有名的公司也在用 还比较少,但我认为有37signals在使用
开发的活跃度 中等 活跃(感觉正在旺季)
文档 也足够了
设定文件 用专用的文法书写(外部DSL) 用Ruby书写(内部DSL)
设定的构成 有点难懂 相对容易理解,命名等很合适
依存关系的处理 运行次序是根据状况由系统端决定的。 好像Makefile 基本上是书写顺序。相比Puppet更具脚本风格
必要的中间软件 没有 服务端需要有CouchDB、RabbitMQ
安装 简单,用gem的安装就可以 服务端容易死。没有加入包中的话比较困难。客户端的话简单,只要gem就可以
和其他系统的协作 感觉基本上没有 因为使用RESTful的服务API,用JSON可以取值,所以好像能做许多事

puppet

Puppet是Puppet Labs 开发的自动化系统配置工具,是一个类似于Cfengine一样的工具,但是比Cfengine更简单,更容易使用…

PuppetNginx

CFengine

Juju

http://www.chenshake.com/design-of-the-razor/

Ubuntu的Maas,其实问题就更多。投入很大的力量去定制cobbler,加一个logo,就号称是Maas,在国人看来,也是有点山寨。并且还自己搞了一个JUJU类似的东西。到底puppet和juju有啥区别还是类似的东西,估计Canonical自己的员工,也说不清,好像也没几个人感兴趣,从邮件列表里也可以知道。

昨天刚看到juju邮件列表,提到Orchestra,未来很快就要去掉juju的支持,因为没几个人玩,我本来一直都比较欣赏Orchestra的理念,不重复造轮。不过现在看来,ubuntu是希望自己搞一套。

Cobbler

运维自动化安装方面,早期一般使用人工配置pxe+dhcp+tftp配合kickstart,现在开源工具就多了,如cobbler,OpenQRM和Spacewalk。

Cobbler是一个快速网络安装linux的服务,而且在经过调整也可以支持网络安装windows。该工具使用python开发,小巧轻便(才15k行代码),使用简单的命令即可完成PXE网络安装环境的配置,同时还可以管理DHCP,DNS,以及yum包镜像。

Cobbler支持命令行管理,web界面管理,还提供了API接口,可以方便二次开发使用。

和Kickstart不同的是,使用cobbler不会因为在局域网中启动了dhcp而导致有些机器因为默认从pxe启动在重启服务器后加载tftp内容导致启动终止。

Razor

Razor 是一个很高级的部署程序,注意,是高级哦。它可以在裸机上和虚拟机上自动安装操作系统。它的目标是解决如何把新的机器添加到已有的管理系统中。然后让集中化管理来接管它。

Razor的工作流程是,新加的机器通过Razor提供的网络启动,加载一个微内核的小系统,小系统会检测新硬件的配置。并且反馈给Razor控制端,然后根据Razor的预定策略,来指导安装配置。目前支持 RH系, Debian系, ESXi 等

Docker

Docker 是 dotCloud 最近2013年宣布的开源引擎,旨在提供一种应用程序的自动化部署解决方案,简单的说就是,在 Linux 系统上迅速创建一个容器(类似虚拟机)并在容器上部署和运行应用程序,并通过配置文件可以轻松实现应用程序的自动化安装、部署和升级,非常方便。因为使用了容器,所以可以很方便的把生产环境和开发环境分开,互不影响,这是 docker 最普遍的一个玩法。更多的玩法还有大规模 web 应用、数据库部署、持续部署、集群、测试环境、面向服务的云计算、虚拟桌面 VDI 等等。

docker run -d -it -p  9000:9000 -e ZK_HOSTS="slave1.uat:2181,slave2.uat:2181,slave3.uat:2181" -e APPLICATION_SECRET=letmein sheepkiller/kafka-manager

docker run -d -it -p  9000:9000 \
--add-host hadoop1.uat:192.168.1.89 \
--add-host slave1.uat:192.168.1.22 \
--add-host slave2.uat:192.168.1.23 \
--add-host slave3.uat:192.168.1.24 \
--add-host hadoop1.uat:192.168.1.89 \
--add-host Slave1.pro:192.168.0.22 \
--add-host Slave2.pro:192.168.0.23 \
--add-host Slave3.pro:192.168.0.24 \
--add-host Slave4.pro:192.168.0.25 \
--add-host Slave5.pro:192.168.0.26 \
--add-host Slave6.pro:192.168.0.2 \
--add-host Slave7.pro:192.168.0.28 \
--add-host Slave8.pro:192.168.0.29 \
--add-host Slave9.pro:192.168.0.30 \
-e ZK_HOSTS="slave1.uat:2181,slave2.uat:2181,slave3.uat:2181" \
-e APPLICATION_SECRET=letmein \
sheepkiller/kafka-manager

docker ps

CONTAINER ID        IMAGE                       COMMAND             CREATED             STATUS              PORTS                    NAMES
0d46d0308ad4        sheepkiller/kafka-manager   "./km.sh"           2 minutes ago       Up 16 seconds       0.0.0.0:9000->9000/tcp   silly_fermat        

docker restart 0d46d0308ad4