saltstack自动化运维部署与管理
- 1、介绍
- 2、安装与配置
- 3、远程执行
- 4、sls文件
- 5、部署ngnix
1、介绍
saltstack是一个配置管理系统,能够维护预定义状态的远程节点,saltstack是一个分布式远程执行系统,用来在远程节点上执行命令和查询数据, saltstack是运维人员提高工作效率、规范业务配置与操作的利器。
Salt的核心功能有:
(1)使命令发送到远程系统是并行的而不是串行的
(2)使用安全加密的协议
(3)使用最小最快的网络载荷
(4)提供简单的编程接口
Salt同样引入了更加细致化的领域控制系统来远程执行,使得系统成为目标,不止可以通过主机名,还可以通过系统属性,不同的属性会执行不同的动作。
官网:https://www.saltstack.com/
2、安装与配置
提前准备三台虚拟机server1当master端,server2和server3是minion端。提前准备saltstack的安装包,这里使用salt-3000.3-1.el7.noarch
版本
首先把安装包和依赖性的文件放在真机的/var/www/html中,开启apache服务
[root@server1 ~]# cd /etc/yum.repos.d/
[root@server1 yum.repos.d]# vim salt.repo #server1设置软件仓库
[salt]
name=salt
baseurl=http://172.25.11.250:/3000 #3000是安装包的目录名称
gpgcheck=0
[root@server1 yum.repos.d]# scp salt.repo server2:/etc/yum.repos.d/ #同样的复制给server2和server3
[root@server1 yum.repos.d]# scp salt.repo server3:/etc/yum.repos.d/
[root@server1 yum.repos.d]# yum repolist #列出yum源
[root@server1 yum.repos.d]# yum list salt-* #检测是否yum源配置成功,结果如下就成功
同样的server2和server3也需要上述操作。
master端:
yum install -y salt-master #安装master端
systemctl enable salt-master #设置开机自启动
systemctl start salt-master #启动master服务
netstat -antlp #查看端口4505和4506
minion端(Server2/server3):
yum repolist
yum list salt-*
yum install -y salt-minion.noarch #安装minion端
vim /etc/salt/minion
master: 172.25.11.1 #设置master主机的ip(该文件中编写的此行要顶格写)
systemctl enable --now salt-minion.service
master端:
salt-key -L #寻找有哪些安装了minion端
salt-key -A #全部添加
salt '*' test.ping #测试是否成功
master端:
yum install lsof #也可安装lsof工具,通过下述指令方式查看远程连接是否建立
lsof -i :4505
lsof -i :4506 #下图说明成功建立
master端可以md5sum /etc/salt/pki/master/master.pub
查看master的公钥,同样minion端也可以查看,两边的公钥互相拥有
master端yum install -y python-setproctitle
可以通过ps ax查看具体解释
3、远程执行
Salt命令由三个主要部分构成:salt '<target>' <function> [arguments]
简单实验,成功返回名称
funcation是module提供的功能,Salt内置了大量有效的functions.
arguments通过空格来界定参数:
salt 'server2' sys.doc pkg #查看模块文档
salt 'server2' pkg.install httpd #安装httpd
salt 'server2' pkg.remove httpd #卸载httpd
编写远程执行模块
Server1端:
[root@server1 salt]# mkdir /srv/salt/_modules
[root@server1 salt]# cd /srv/salt/_modules/
[root@server1 _modules]# vim my_disk.py
def df():
return __salt__['cmd.run']('df -h') #查看挂载情况
[root@server1 _modules]# salt server2 saltutil.sync_modules #同步模块
[root@server1 _modules]# salt server2 my_disk.df #相当于在server2中执行df -h
在 server2:
yum install -y tree #方便查看效果,安装tree
tree /var/cache/salt/minion/ #可以看到出现my_disk.py,已成功同步
4、sls文件
Salt 状态系统的核心是SLS,或者叫SaLt State 文件。SLS表示系统将会是什么样的一种状态,而且是以一种很简单的格式来包含这些数据,常被叫做配置管理。
sls文件使用的是YAML语法,注意以下规则:
(1)缩进:Salt需要每个缩进级别由两个空格组成,不要使用tabs
(2)冒号:字典的keys在YAML中的表现形式是一个以冒号结尾的字符串
(3)短横杠:想要表示列表项,使用一个短横杠加一个空格
Server1:
cd /srv/salt/
vim apache.sls
httpd: # ID声明
pkg.installed # 状态声明,函数声明
salt server2 state.sls apache #让server2执行apache下的sls文件
结果如下
在saltsatack中,base路径就是/srv/salt/,apache.sls在base下可以直接识别,如下放到子目录下无法直接识别,需要写具体路径。
或者把apache.sls改为init.sls文件,saltsatack会自动查找init文件,无需写多层子目录。
sls文件以”.sls”后缀结尾,但在调用是不用写此后缀。使用子目录来做组织是个很好的选择。init.sls 在一个子目录里面表示引导文件,也就表示子目录本身, 所以apache/init.sls
就是表示apache
。如果同时存在apache.sls 和 apache/init.sls,则 apache/init.sls 被忽略,apache.sls将被用来表示 apache.现在继续修改init.sls文件,赋予更多功能,如下,模块名称叫apache,分为三个部分,第一个部分是安装httpd和php;第二个部分是把source位置的配置文件发到目的地,这样就可以对minion端的服务的配置进行修改(我把端口修改为8080);第三部分是开启httpd服务,监控apache模块下的file(即第二部分)两个文件是否一致,如果不一致,重启httpd。
salt server2 state.sls apache
执行后,成功把server2的httpd端口修改为8080
5、部署ngnix
配置一个自动部署nginx的文件。首先建立子目录,创建init.sls文件,想安装nginx
配置文件内容如下:
执行salt server3 state.sls nginx,如下,成功
接下来开启nginx服务,创建service.sls文件。首先调用ngnix模块,就可以把前面写的init.sls文件调用来安装;建立ngnix用户,无法登陆,设定家目录位置;然后把配置文件和service推到minion端;执行开启动作,监控是否/usr/local/nginx/conf/nginx.conf是否和master端的文件一致,如果不一致,重启服务。
在server1端,修改nginx配置文件
server1执行salt server3 state.sls nginx.service
执行curl server3,测试,成功出现nginx测试页