作为程序员,我却有好几年的时间都要替公司管理服务器,所以对各种运维技术都研究了一番。2010年的时候,调研了 puppet,chef 等工具,当时就觉得不适用。 后来 随着devops 概念越演越烈,puppet名气变到

不puppet,无devops

吓的我每隔几个月就要去翻puppet的文档,害怕错过了大时代,但是每次的结论都和当初一样:puppet不好用

服务器软件安装界最大的痛点是:

各种依赖包凌乱复杂,下载安装都非常困难

人们为了解决这个痛点,开发了一系列软件

  • Redhat/centos的yum
  • ubuntu/debian的apt-get
  • 甚至编程软件也来插一脚:java的maven,python的pip,ruby的gem 等等

这些工具都很好用,基本上解决了问题

而Puppet并不解决这个痛点,它是建立在软件管理程序之上的,就是说 在Redhat上跑puppet,它用up2date更新软件,在ubuntu上跑puppet,它用apt-get下载软件

Puppet是什么?

在我看来,Puppet有2大功能

  1. 一种方言,用来格式化写作软件安装脚本
  2. 服务器集群操作工具 ,你可以在一台机器上指挥N台服务器运行/下载/安装

第1点,Puppet的写作语法相当复杂,对比 Markdown之于文本写作来说,puppet的语法称得上謷牙诘屈,需要花大量时间学习,而且难于记忆。

安装一个软件,用shell命令写的安装脚本可能只有50行,puppet要写200-300行,还非常不直观,难以看懂。

因为软件安装的最大痛点已经被软件安装器解决了,puppet能做的很少,你随便找一个现成的puppet mannifests看看,你会觉得它相当无聊

辛亏,有好心人 Example(42) 提供了一堆已经写好的puppet manifest https://github.com/example42/puppet-modules,我觉得puppet大半的价值都在这里

第2点,对于普通人来说,能够像木马一样批量操作多台服务器,太酷了! 但是对于SA,这是日常工作。

最通常的做法,是先找一台服务器做登陆机,然后把它和其它所有服务器用ssh keygen打通登录。 sshd安装包自带一个ssh-copy-id脚本,执行,输入一次密码就可以打通

在登录机上装一个web server,把各种软件/包/安装目录 放在web server的http document目下,要用的时候wget -O就可以

要把一个软件部署在多台服务器上,写一段 for ip in ip_lists :ssh ip -e "" 这样的shell就可以了

如果用python写批量安装脚本,可以直接使用pssh,Fabric 等包,它们都需要 提前打通服务器之间的ssh keygen 登录

用ssh keygen打穿服务器,可能会有安全隐患,那台登录机太要命了。但是不打穿,用直接登录的方式,那么系统管理员的电脑就是成了火药库,所以风险不在这里

结论

puppet逃避了软件安装的最大痛点,能做的事情很少,学习曲线还这样陡峭,鸡肋都算不上

本文地址: http://lutaf.com/209.htm 鲁塔弗原创文章,欢迎转载,请附带原文链接