自动化部署

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