saltstack初用

   在服务器自动化部署方面我们目前主要用cfengine2,期间自己也尝试过折腾puppet、fabric、func之类的工具,包括自己利用python模块写一些自动化工具,前面的blog可以看到,结果总的来说感觉都不是十分满意。最近瞄上了saltstack,该工具由python编写,saltstack即能完成puppet的配置管理工作又能完成fabric的临时批量执行任务。

    和主流的配置管理工具一样,saltstack也是C/S模式的,需要你在控制端安装master,在客户端安装minion。控制端下发命令给客户端,然后在客户端上执行该命令。

    关于saltstack的信息可以参考:http://docs.saltstack.com/

下面说说实验环境:

10.1.6.36  ubuntu12.04-1  master minion
10.1.6.39  ubuntu12.04-2  minion
10.1.6.50  debian7-1      minion
10.1.6.51  debian7-2      minion
1 更新ubuntu12.04和debian7的更新源

#更新ubuntu12.04的/etc/apt/sources.list文件加入下面第一句话
deb http://ppa.launchpad.net/saltstack/salt/ubuntu precise main
#更新源数据库
apt-get updaet
#更新key认证
wget -q -O- "http://keyserver.ubuntu.com:11371/pks/lookup?op=get&search=0x4759FA960E27C0A6" | sudo apt-key add -


#更新debian7的/etc/apt/sources.list文件
deb http://debian.saltstack.com/debian wheezy-saltstack main
#更新源数据库
apt-get updaet
#更新key认证
wget -q -O- "http://debian.saltstack.com/debian-salt-team-joehealy.gpg.key" | apt-key add -
2 在master上安装saltstack

apt-get install -y salt-minion salt-common salt-master
  在minion上安装saltstack

apt-get install -y salt-minion salt-common

  当然除了上面列出的基础包外,你可以根据需求安装salt-doc salt-cloud salt-api salt-syndic等包。

3 配置master和minion

  salt的配置文件在/etc/salt/目录下,master对应master文件,minion对应minion文件。默认的配置文件只要修改监听IP即可,其余配置选项则不用改动。在36上面改动master监听本机ip地址,在其余minion上面监听各自的本机ip即可。然后启动master和minion。

  关于master和minion的配置可以参考:

  http://docs.saltstack.com/ref/configuration/master.html

  http://docs.saltstack.com/ref/configuration/minion.html

4 调试master是否可以正常启动

salt-master -l debug  调试
salt-master -d 后台运行
#或者
/etc/init.d/salt-master start

   master默认监听两个端口,4505(publish_port)为salt的消息发布系统,4506(ret_port)为salt客户端与服务端通信的端口。

5 在服务端接受客户端的key。

  salt-key -L   查看哪些key没有备接收
  salt-key -A   接收所有未认证的key,或者salt-key -a keyname 来认证单个key

  1 minion在第一次启动时,会在/etc/salt/pki/minion/下自动生成minion.pem(private key), minion.pub(public key),然后将minion.pub发送给master
  2 master在接收到minion的public key后,通过salt-key命令接受minion的public key,这样在master的/etc/salt/pki/master/minions下的将会存放以minion id命名的public key, 然后master就能对minion发送指令了。

saltstack初用

   minion id:minion的唯一标示。默认情况minion id是minion的主机名(FQDN),你可以通过id来指定minion的名字。

6 下面简单测试一下所有认证过的minion的连通性:

salt '*' test.ping 
saltstack初用

   简单的很嘛,可以很清楚的反馈出结果。上例中使用的是‘*’来匹配所有的客户端,其实还可以使用正则来匹配minion的ID。执行的结果存放在/var/cache/salt/master/minions/目录下面,每个客户端一个目录。

  salt '*' test.ping  所有的minion客户端的连通性,‘*’表示匹配所有的客户端
  salt '*.example.*'  test.ping
  salt -E 'web1-(prod|devel)' test.ping  正则表达式匹配
  salt -L 'web1,web2,web3' test.ping  指定具体的匹配
  salt -L 'ubuntu12.04-1,ubuntu12.04-2' test.ping

   要查看salt命令里的模块用法,可以参考

salt '*' sys.doc
  下面再测试一个命令,在master上控制在minion上执行一个命令:

saltstack初用

  这次测试只是针对客户端ID为debian7-*的客户端,分别测试了hostname和uptime,通过cmd.run模块来指定你要运行的命令,其实salt自带了很多集成进系统的命令,真的很值得研究: http://docs.saltstack.com/ref/modules/all/index.html

  上面的测试要么完全匹配,要么用正则匹配客户端,如果对自己的正则水平不放心,怕遗漏或者过多匹配客户端,从而导致出现线上事故,也可以预先定义一个node group,把group包含的minion包含进去,然后在执行命令时直接指定group即可。

  Node group为预先在master配置文件中的nodegroups参数定义的minion组.用来进行批量对minion进行操作,切记:组名不能顶格写,会无法识别。  

  Node groups allow for logical groupings of minion nodes,A group consists of a group name and a compound target   

  36的nodegroups定义如下:表示debian系统一个组,ubuntu系统一个组

nodegroups:
    debian7: 'E@debian7-*'
    ubuntu12.04: '[email protected]*'
    还有更多的参数可以指定匹配方式,如下:

G	Grains glob	G@os:Ubuntu
E	PCRE Minion ID	E@web\d+\.(dev|qa|prod)\.loc
P	Grains PCRE	P@os:(RedHat|Fedora|CentOS)
L	List of minions	[email protected],minion3.domain.com or bl*.domain.com
I	Pillar glob	I@pdata:foobar
S	Subnet/IP address	[email protected]/24 or [email protected]
R	Range cluster	R@%foo.bar
D	Minion Data	D@key:value
saltstack初用

    不过有个小问题:在使用node group管理minion时,每次执行完组中的最后一个客户端后,要等待几十秒钟才会完全返回到shell状态下。

7 minion的状态管理,可以自己写命令通过cmd.run来运行,也可以看看自带的模块中有没有相关命令,参考如下:
  http://docs.saltstack.com/ref/states/all/index.html

  本文中已经两次提到自带的模块了,可见这个很重要啊...

你可能感兴趣的:(python,自动化,saltstack)