gdx 发表于 2018-8-1 10:57:26

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]
查看完整版本: saltstack(一)安装篇