一、Saltstack功能模块的介绍
1. salt-ssh简介
salt-ssh可以独立运行的,不需要minion端,使用sshpass进行密码交互,但它以串行模式工作,导致性能大幅度下降。
2. salt-syndic简介
syndic其实就是个代理,隔离master与minion,Syndic必须要运行在master上,再连接到另一个topmaster上。 Topmaster 下发的状态需要通过syndic来传递给下级master,minion传递给master的数据也是由syndic传递给topmaster。topmaster并不知道有多少个minion。syndic与topmaster的file_roots和pillar_roots的目录要保持一致,不然会出错。
3. salt-api简介
SaltStack 官方提供有REST API格式的 salt-api 项目,将使Salt与第三方系统集成变得尤为简单。
官方提供了三种api模块:rest_cherrypy、rest_tornado、rest_wsgi
二、salt-syndic的部署
实验准备:
server1——master(172.25.5.1)——salt-master、salt-syndic
server2和server3——minion(172.25.5.2和172.25.5.3)——salt-minion
server4——topmaster(172.25.5.4)——salt-master
安装软件
#server1中
yum install -y salt-syndic
#server4中
yum install -y salt-master
1. 将配置文件/etc/salt/master中有关mysql的参数注释
vim /etc/salt/master
#master_job_cache: mysql
#mysql.host: 'localhost'
#mysql.user: 'salt'
#mysql.pass: 'salt'
#mysql.db: 'salt'
#mysql.port: 3306
systemctl restart salt-master
2. 在server4中设置被管理master的ip
vim /etc/salt/master
systemctl restart salt-master
netstat -antlp
3. 在server1的配置文件中写入topmaster的ip
vim /etc/salt/master
syndic_master: 172.25.5.4
systemctl restart salt-master
systemctl start salt-syndic
4. server4中测试
server2和server3作为minion端,受server1管理,而server4(topmaster)管理master,也可以间接的项minion端推送
salt-key -L
salt-key -A #添加key
salt '*' test.ping
三、salt-ssh的部署
1. 使用【systemctl stop salt-minion】命令,关闭server2(minion)
2. 在server1中设置salt-ssh的roster文件
yum install -y salt-ssh
cd /etc/salt
vim roster
server2:
host: 172.25.5.2
user: root
passwd: westos
3. 测试连接
salt-ssh '*' test.ping
salt-ssh server2 -r "df" #查看挂载信息
salt-ssh server2 -r "hostname" #查看主机名
四、salt-api的调用
将之前关闭的server2(minion)端开启【systemctl start salt-minion】
1. 安装salt-api软件
yum isntall -y salt-api
2. 创建公钥和私钥
cd /etc/pki/tls/
cd private
openssl genrsa 2048 > localhost.key
cd ../certs
make testcert
3. 编写api文件,开启端口
cd /etc/salt/master.d/
vim api.conf
rest_cherrypy:
port: 8000
ssl_crt: /etc/pki/tls/certs/localhost.crt
ssl_key: /etc/pki/tls/private/localhost.key
4. 用户认证并授权,创建用户
cd master.d
external_auth:
pam:
saltapi:
- .*
- '@wheel'
- '@runner'
- '@jobs'
5. 重启master及api
systemctl restart salt-master
systemctl start salt-api
netstat -antlp | grep 8000
6. 用户进行登陆,获得token
curl -sSk https://localhost:8000/login \
-H 'Accept: application/x-yaml' \
-d username=saltapi \
-d password=westos -d eauth=pam
7. 测试是否可以使用api控制server2和server3
curl -sSk https://localhost:8000 \
-H 'Accept: application/x-yaml' \
-H 'X-Auth-Token:4f041660e6f08cac934233853c671209a4301df3' \
-d client=local \
-d tgt='*' \
-d fun=test.ping
8. py文件用来推送
vim saltapi.py
def main():
sapi = SaltAPI(url='https://localhost:8000',username='saltapi',password='westos')
print sapi.list_all_key()
sapi.deploy('server3','nginx.service')
向server3推送
使用【python saltapi.py】命令向server3推送,推送完毕后,我们可以在server3中看到nginx服务已经开启