搞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_code bash '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[1] 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.install vim salt-minion: ---------- vim: ---------- new: 2:7.3.547-7 old: root@salt-master:~#
好了,先到这里吧。还有个linux man手册一样的东西,不懂的模块可以问它。比如想看看cmd模块咋用。
salt '*' -d cmd 也可以在minion端执行 salt-call -d cmd