saltstack(一)安装篇

    搞saltstack快一个礼拜了,在这里把学习过程mark一下。 

    saltstack出来没几年吧,好像比Puppet Chef这些东西都年轻,比它年轻的还有ansible。楼主以前干过半年多运维,十几台服务器的规模,运维方式还停留在石器时代,没搞过自动化,对运维自动化的编年史不太熟。刚来新公司没多长时间,新公司用的是puppet

    看了个把礼拜的salt,这东西采用的C/S模式,通过zeromq通信的,采用AES加密传输,然后可以做自动化相关的运维工作。看了这么长时间,也就概括出了这么点东东,水平有限,先这样吧!

    好了,下面开始安装了

楼主的系统是debian wheezy,安装很简单

  1. 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




你可能感兴趣的:(服务器,石器时代,规模)