saltstack(一)安装篇
搞saltstack快一个礼拜了,在这里把学习过程mark一下。saltstack出来没几年吧,好像比Puppet Chef这些东西都年轻,比它年轻的还有ansible。楼主以前干过半年多运维,十几台服务器的规模,运维方式还停留在石器时代,没搞过自动化,对运维自动化的编年史不太熟。刚来新公司没多长时间,新公司用的是puppet
看了个把礼拜的salt,这东西采用的C/S模式,通过zeromq通信的,采用AES加密传输,然后可以做自动化相关的运维工作。看了这么长时间,也就概括出了这么点东东,水平有限,先这样吧!
好了,下面开始安装了
楼主的系统是debian wheezy,安装很简单
[*] 163,souhu目前还没有saltstack,要自己配置saltstack的源。好了请看下面
echo "deb http://debian.saltstack.com/debian wheezy-saltstack main" >> /etc/apt/sources.list
源地址是加密的,需要导入密钥
wget -q -O- "http://debian.saltstack.com/debian-salt-team-joehealy.gpg.key" | apt-key add -
更新本地源列表
aptitude update
服务端:
aptitude -y install salt-master
客户端:
aptitude -y install salt-minion
OK,saltstack已经安装好了。先随便看看
看看版本和依赖的库
root@salt-master:~# salt--version
salt 2014.1.4
root@salt-master:~# salt--versions-report
Salt: 2014.1.4
Python: 2.7.3 (default, Mar 14 2014, 11:57:14)
Jinja2: 2.7.2
M2Crypto: 0.21.1
msgpack-python: 0.1.10
msgpack-pure: Not Installed
pycrypto: 2.6.1
PyYAML: 3.11
PyZMQ: 13.1.0
ZMQ: 3.2.3
root@salt-master:~#
下面开始认证了,首先要修改minion端的配置文件,指向master,我测了下用IP,域名都可以,我就用IP了。salt的配置文件默认都在/etc/salt下面呢。注意修改配置后要重启一下才生效。
root@salt-minion:~# grep "master:" /etc/salt/minion
master: 10.240.161.98
root@salt-minion:~# /etc/init.d/salt-minion restart
[ ok ] Restarting salt minion control daemon: salt-minion.
客户端就这样了,重启后,那啥zeromq开始发布消息了,服务端会受到这个消息。用salt-key -L查看一下,请求。
root@salt-master:/# salt-key-L
Accepted Keys:
Unaccepted Keys:
salt-minion
Rejected Keys:
root@salt-master:/#
接受请求,salt -A“A”是all的意思。
salt-key -a salt-minion 接受某一个minion
salt-key -A 接受所有
salt-key -d salt-minion 删除某个minion的公钥
salt-key -D 删除所有minion的公钥
salt-key -P 打印公钥
当然salt也是可以自动验证的。把下面的False改成True就OK了
root@salt-master:/# grep-n "auto_accept:" /etc/salt/master
137:#auto_accept: False
root@salt-master:/#
自动认证我就不玩了,大伙玩一下吧!
当然认证之前,大伙要是想确保认证的准确性,可以先识别下minion的身份。两边一样的话就靠谱了。这样的做是啥原理呢,minion请求验证的时候,会把公钥发给master,两边都打印一下这个公钥的指纹,finger这东西是叫指纹吧,一样就OK了。这个可以防止别人冒名顶替,发个错误的公钥过来。
master上先执行下
root@salt-master:~# salt-key -f salt-minion
Unaccepted Keys:
salt-minion:df:27:b6:23:e2:7d:10:f9:3b:3f:b1:1f:c2:1e:cf:52
root@salt-master:~#
minion上再执行下
root@salt-minion:~#salt-call key.finger --local
local:
df:27:b6:23:e2:7d:10:f9:3b:3f:b1:1f:c2:1e:cf:52
root@salt-minion:~#
好了,我们来看一下,master和minion密钥的一些事情吧
看一下master上面的/etc/salt/pki/master目录
root@salt-master:~# tree /etc/salt/pki/master/
/etc/salt/pki/master/
├── master.pem
├── master.pub
├── minions
│ └── salt-minion
├── minions_pre
└── minions_rejected
再看一下minion上面的/etc/salt/pki/minion
root@salt-minion:~# tree /etc/salt/pki/minion/
/etc/salt/pki/minion/
├── minion_master.pub
├── minion.pem
└── minion.pub
看到没有,master和minion分别保存了对方的公钥,这说明个啥,说明master和minion之间通信,两者都是可以是发起方,不是只有master向minion发东西,minion也可以向master发东西。其实master监听的俩端口4505是master端zeromq的pub口,4506是sub口。一个管发布消息,一个负责接收消息。
好了,安装认证就到这里吧,下面搞搞简单的命令行操作
root@salt-master:~# salt'*'test.ping
salt-minion:
True
注意这里面的ping和ICMP那个ping完全不搭嘎的,返回True说明minion回应master的消息,可以干活了,大伙一起来看看源码吧
root@salt-minion:~# sed -n '33,48p' /home/lixc/salt-2014.1.4/salt/modules/test.py
def ping():
'''
Just used to make sure the minion is up and responding
Return True
CLI Example:
.. code-block:: bash
salt '*' test.ping
'''
if 'proxyobject' in __opts__:
return __opts__['proxyobject'].ping()
else:
return True
root@salt-minion:~#
看到没,这个__opts__,我也不是很懂,刚接触两三个多月python,水平太菜了,但肯定不是ICMP那东西。
执行个命令看看
root@salt-master:~# salt 'salt-minion'cmd.run 'ls /home/'
salt-minion:
lixc
lost+found
root@salt-master:~#
执行段小代码
root@salt-master:~# salt '*' cmd.exec_codebash 'for i in {1,2};do echo $i;done'
salt-minion:
1
2
root@salt-master:~#
再执行个脚本玩玩
root@salt-master:~# cat /srv/salt/scripts/test.py
#!/usr/bin/env python
import sys
print sys.argv
root@salt-master:~# salt '*' cmd.script salt://scripts/test.py HelloWorld
salt-minion:
----------
pid:
4024
retcode:
0
stderr:
stdout:
HelloWorld
root@salt-master:~#
看到没,还可以带参数,比楼主几个月前完运维纯手工效率高多了。好吧,再来个文件拷贝吧
root@salt-master:~# salt-cp '*' test.py/tmp/
{'salt-minion': {'/tmp/test.py': True}}
root@salt-master:~# salt '*' cmd.run "ls /tmp"
salt-minion:
test.py
root@salt-master:~#
再安装个软件玩玩。
root@salt-master:~# salt '*' pkg.installvim
salt-minion:
----------
vim:
----------
new:
2:7.3.547-7
old:
root@salt-master:~#
好了,先到这里吧。还有个linux man手册一样的东西,不懂的模块可以问它。比如想看看cmd模块咋用。
salt '*' -d cmd
也可以在minion端执行
salt-call -d cmd
页:
[1]