Saltstack 环境安装
1. 安装salt yum源(以centos7 / python2环境为例, 其他环境请参考https://repo.saltstack.com/ )
yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
2. sudo yum clean expire-cache
3. 安装 salt-minion, salt-master, 及其他组件:
sudo yum install salt-master
sudo yum install salt-minion
sudo yum install salt-ssh
sudo yum install salt-syndic
sudo yum install salt-cloud
sudo yum install salt-api
安装时可能会失败, 多试几次。
4. 关闭selinux
5. 关闭防火墙
说明: 测试环境中, master IP地址 192.168.58.128
Minion IP地址 192.168.58.132
启动服务
1. 服务端
启动:
Systemctl start salt-master (CENTOS7)
/etc/init.d/salt-master start (CENTOS 6)
2. 客户端
修改配置文件
vim /etc/salt/minion
启动:
systemctl start salt-minion (CENTOS 7)
/etc/init.d/salt-minion (CENTOS 6)
一些启动失败的案例:
(1) Jan 06 22:21:08 localhost.localdomain salt-minion[36923]: [ERROR ] Error parsing configuration file: /etc/salt/minion - conf should be a document, not <type 'unicode'>
配置文件
Master: salt 冒号后面必须有空格
(2) ImportError: No module named certify
安装pip, 安装certify
配置认证
查看已经签名的客户端
添加未认证的keys
说明:-a :accept ,-A:accept-all,-d:delete,-D:delete-all。
测试验证
测试192.168.58.132是否通讯正常
也可以使用salt ‘*’ test.ping 对所有客户端进行测试。test是一个模块,ping是模块内的方法。
远程执行命令
文件拷贝
cp.get_file用于minion从master下载一个文件
编辑配置文件/etc/salt/master,将file_roots注释去掉
在master端创建目录“/srv/salt”
拷贝需要复制的文件到工作目录
执行cp.get_file命令
从master 到 minion
minion端
salt 文件push可以将minion端生成的一些文件收集到master端
配置
master端的相关配置:
(1)配置接收minion端文件,基于安全原因默认是关闭的
file_recv: True
(2)cachedir配置文件保存在master端的路径
默认存放在/master/minions/minion-id/files路径下
指令:salt 'minion-id' cp.push /path/to/the/file
执行失败报错
aaa文件不存在
home1 不存在
bbb.txt 不存在
默认目标文件会覆盖
Python API
模块安装
以CentOS6.3为例, 过程仅供参考。
环境中没有pip, 且安装困难(缺的东西太多),所以新装了python2.7
安装python所需的依赖包
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make
安装setuptools
然后源码安装pip, /usr/local/Python27/Python-2.7.15/python setup.py install
安装salt过程中失败, 需要安装libzmq, 安装libzmq时需要升级autoconf.
下载较新版本的autoconf, 如autoconf-2.69.tar.xz, 进行安装
下载libzmq, 安装
安装salt , /usr/local/Python27/Python-2.7.15/python -m pip install salt
示例:
(1)
client = salt.client.LocalClient()
cmd1=client.cmd('192.168.58.132','test.ping')
print(cmd1)
{u'192.168.58.132': True}
(2)
ret = client.cmd('*','cmd.run',['ls'])
print (ret)
{u'192.168.58.132': u'anaconda-ks.cfg', '192.168.58.128': False, '192.168.58.131': False}