saltstack 实现自动化部署

前言:

Saltstack知多少

  Saltstack是一种全新的基础设施管理方式,是一个服务器基础

架构集中化管理平台,几分钟之内就可以运行起来,速度特别快

,服务器之间秒级通讯,扩展性好,很容易批量管理上万台服务

器,显著的降低人力与运维成本,它具备配置管理,远程执行,监

控等功能,一般可以理解为简化版的puppet和加强版的lunc,通过

部署saltstack环境,可以在成千上万台服务器上做到批量执行命令,

根据不同的业务特性进行配置集中化管理、分发文件、采集服务器信

息,操作系统基础及软件包的管理,saltstack是运维人员很高的工作

效率,规范业务配置与操作的利器。saltstack基于Python语言实现,

结合轻量级消息队列(ZeroMQ) (Saltstack的通信模式总共分为两种模

式,ZeroMQ、REAT,基于REAT目前还不稳定,通常选择ZerMQ模

式,基于REAT目前还不是太稳定,)与Python第三方模块(Pyzmq、P

yCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建。

 

Saltstack的运行模式:

local: 本地一台机器玩,不建议。

Master/Minion: 通过server/agent方式进行管理,效率很高,批量的

管理1000台机器,25秒搞定。

Salt SSH: 通过SSH方式进行管理,效率相对来说比较低,(批量管理

机器,83秒搞定)

 

Saltstack三大功能

远程执行,(执行远程命令)

配置管理(状态管理)

云管理

 

Ssltstack特征:

1、部署简单,方便

2、支持大部分UNIX/Linux及Windows环境:

3、支持集中化管理

4、配置简单,功能强大,扩展性强。

5、主控端(master)和被控制(minion)基于证书认证,安全可靠

6、支持API及自定义模块,可通过Python轻松扩展

saltstack 实现自动化部署_第1张图片

 

Master与Minion认证:

1、minion在第一次启动时,会在/etc/salt/pki/minion(该路径在/etc/salt

/minion里面进行设置)下自动生成minion.pem (private key) 和 minion.pub

(public.key),然后将minion.pub发送给master。

2、master在接收到minion的public.key后,通过ssh-key命令accept

minion public.key,这样master的/etc/salt/pki/master/minion下的将会

存放minion id 命令的public.key,然后master就能对minion发送指令了。

Master与Minion的连接

1、saltstack master启动后默认监听4505和4506两个端口,4505(pub

lish_port) 为saltstack的消息发布系统,4506(rel_port)为saltstack为

客户端与服务端通信的端口,如果使用isof查看4505端口,就会发现

所有的minion在4505端口持续保持在ESTATBLSHED状态。

 

2、minion与master之间的通信模式如下:

saltstack 实现自动化部署_第2张图片

 

正文:

实验主机:

远程控制主机: 172.25.68.1(server1)

远程主机1:        172.25.68.2(server2)

远程主机2:       172.25.68.3(server3)

 

进行saltstack软件及其依赖性的安装:

在三台实验机上进行如下操作:

[root@foundation68 2018]# ls
libsodium-1.0.16-1.el7.x86_64.rpm        PyYAML-3.11-1.el7.x86_64.rpm
openpgm-5.2.122-2.el7.x86_64.rpm         repodata
python2-libcloud-2.0.0-2.el7.noarch.rpm  salt-2018.3.3-1.el7.noarch.rpm
python-cherrypy-5.6.0-2.el7.noarch.rpm   salt-api-2018.3.3-1.el7.noarch.rpm
python-crypto-2.6.1-2.el7.x86_64.rpm     salt-cloud-2018.3.3-1.el7.noarch.rpm
python-futures-3.0.3-1.el7.noarch.rpm    salt-master-2018.3.3-1.el7.noarch.rpm
python-msgpack-0.4.6-1.el7.x86_64.rpm    salt-minion-2018.3.3-1.el7.noarch.rpm
python-psutil-2.2.1-1.el7.x86_64.rpm     salt-ssh-2018.3.3-1.el7.noarch.rpm
python-tornado-4.2.1-1.el7.x86_64.rpm    salt-syndic-2018.3.3-1.el7.noarch.rpm
python-zmq-15.3.0-3.el7.x86_64.rpm       zeromq-4.1.4-7.el7.x86_64.rpm

yum install -y *            ###进行所有软件的安装

saltstack 实现自动化部署_第3张图片

saltstack 实现自动化部署_第4张图片

 

 

在server1上进行服务的开启和端口的查看:

systemctl start salt-master         ###进行服务的开启
netstat -antlp                      ###进行端口的查看

saltstack 实现自动化部署_第5张图片

 

说明:4505为消息发布系统端口,4506为通信端口

 

在setver2和server3上进行服务的开启和端口的查看

systemctl start salt-minion      ###在远程主机上进行服务的开启
netstat -antlp                   ###进行服务端口的查看

 

saltstack 实现自动化部署_第6张图片

 

在minion端进行配置文件的修改:

[root@server2 ~]# vim /etc/salt/minion  ###进行配置文件的编辑
systemctl restart salt-minion       ###进行服务的重启

saltstack 实现自动化部署_第7张图片

 

进行salt-key信息的查看和salt-key信息的添加

salt-key -L        ###进行salt-key信息的查看
salt-key -A        ###添加系当前可用的节点

saltstack 实现自动化部署_第8张图片

 

 

进行主机ping通的测试

[root@server1 ~]# salt '*' test.ping    ###进行主机ping测试

saltstack 实现自动化部署_第9张图片

 

进行lsof软件的下载,查看端口4505的状态

yum install -y lsof             ###进行lsof软件的下载
lsof -i :4505                   ###进行端口信息的查看

一直处于连接状态。

 

我们发现在主控制机和远程主机相互认证完毕之后,他们的公钥将发生交换,简单来说就是

master产生的公钥会复制一份到远程主机,而远程主机也会将自己的公钥复制一份到主控制

机,这样可以实现主控机信息的发送和信息的回收。

 

在master端:

saltstack 实现自动化部署_第10张图片

 

在server2端:

 

在server3端:

saltstack 实现自动化部署_第11张图片

 

进行基本salt命令的测试:

[root@server1 ~]# salt '*' cmd.run 'df -h'  ###进行远程主机挂载情况的查看
[root@server1 ~]# salt '*' cmd.run 'hostname'  ###进行远程主机名的查看

saltstack 实现自动化部署_第12张图片

 

 

进行配置文件的编辑,使其可以在特定的目录中进行设定发布远程命令

vim /etc/salt/master     ###在master端进行配置文件的编辑
mkdir /srv/salt          ###进行目录的建立
systemctl restart salt-master       ###进行服务的重启

saltstack 实现自动化部署_第13张图片


实验测试:使用saltstack实现远程主机httpd软件的安装:

vim /srv/salt/apache/install.sls    ###进行发布sls文件的编辑
mkdir /srv/salt/apache/files        ###进行配置文件的存放(存放httpd的配置文件)
vim /srv/salt/apache/files/index.html   ###进行apache默认发布文件的编辑
cd /srv/salt/apache                     ###进行目录的切换
[root@server1 apache]# salt '*' state.sls apache.install   ###进行测试

 

install.sls文件:

saltstack 实现自动化部署_第14张图片

 

 

进行测试:

 

saltstack 实现自动化部署_第15张图片

saltstack 实现自动化部署_第16张图片

saltstack 实现自动化部署_第17张图片

 

 

在浏览器上进行访问测试:

saltstack 实现自动化部署_第18张图片

saltstack 实现自动化部署_第19张图片

 

在files中进行配置文件的改变,再次进行测试:

vim /srv/salt/apache/files/httpd.conf     ###进行配置文件的修改(修改端口为8080)
[root@server1 apache]# salt '*' state.sls apache.install   ###进行测试

saltstack 实现自动化部署_第20张图片

saltstack 实现自动化部署_第21张图片

saltstack 实现自动化部署_第22张图片

 

在浏览器上进行访问测试:

saltstack 实现自动化部署_第23张图片

saltstack 实现自动化部署_第24张图片

说明watch监控已经启用.

 

使用saltstack实验远程主机ngin x的源码安装:

vim /srv/sslt/nginx/install.sls    ###进行sls文件的编辑
vim /srv/salt/nginx/service.sls    ###进行sls文件的编辑
mkdir files             ###进行存放配置文件的建立
cd files                ###进行目录的切换

 

install.sls文件

saltstack 实现自动化部署_第25张图片

 

service.sls文件

saltstack 实现自动化部署_第26张图片

 

files文件中存放的文件:(nginx配置文件,nginx的systemctl 的配置文件)

nginx配置文件:

saltstack 实现自动化部署_第27张图片

 

nginx的systemctl 配置文件

saltstack 实现自动化部署_第28张图片

 

进行测试:

[root@server1 nginx]# salt '*' state.sls nginx.service   ###进行推送

saltstack 实现自动化部署_第29张图片

saltstack 实现自动化部署_第30张图片

 

在远程主机上进行查看:

saltstack 实现自动化部署_第31张图片

saltstack 实现自动化部署_第32张图片

 

编辑top.sls文件,对于不同的主机安装不同的应用

cd /srv/salt/apache       ###进行目录的切换
vim instll.sls            ###进行sls文件的编辑
vim service.sls           ###进行sls文件的编辑
cd /srv/salt/             ###进行目录的切换
vim top.sls               ###进行top.sls文件的编辑

 

install.sls文件:

saltstack 实现自动化部署_第33张图片

 

service.sls文件

saltstack 实现自动化部署_第34张图片

 

top.file文件:

saltstack 实现自动化部署_第35张图片

 

进行测试:

[root@server1 salt]# salt '*' state.highstate    ###进行测试

saltstack 实现自动化部署_第36张图片

saltstack 实现自动化部署_第37张图片

 

 

saltstack之grains:

salt的grains主要是存储静态的数据,主要是minion端的一些数据,比如,hostname,内存大小

, IP , CPU等一些数据,主要是为了存储minion端.

minion在启动时会读取grains数据,如果有新的grains数据需要重启minion服务,或者在master

端使用salt命令进行刷新.

 

进行grains存储信息的查看

[root@server1 salt]# salt '*' grains.items   ###进行远程主机信息的查看

saltstack 实现自动化部署_第38张图片

saltstack 实现自动化部署_第39张图片

saltstack 实现自动化部署_第40张图片

saltstack 实现自动化部署_第41张图片

 

 

在远程主机上进行设定,使用静态grain在配置文件中进行设定:

在server2上:

vim /etc/salt/minion        ###进行配置文件的编辑
systemctl restart salt-minion   ###进行服务的重启

saltstack 实现自动化部署_第42张图片

 

在server3上:

vim /etc/salt/minion        ###进行配置文件的编辑
systemctl restart salt-minion   ###进行服务的重启

saltstack 实现自动化部署_第43张图片

 

在主控制机进行测试:

[root@server1 salt]# salt '*' grains.item roles    ###进行测试

saltstack 实现自动化部署_第44张图片

 

 

另一种配置方法:在/etc/salt/grains进行设定

在server2上关闭之前的设定:

vim /etc/salt/minion      ###进行配置文件的编辑
systemctl restart salt-minion      ###进行服务的重启

saltstack 实现自动化部署_第45张图片

 

在server3上关闭之前的设定:

vim /etc/salt/minion      ###进行配置文件的编辑
systemctl restart salt-minion      ###进行服务的重启

saltstack 实现自动化部署_第46张图片

 

进行测试:

saltstack 实现自动化部署_第47张图片

 

在/etc/salt/grains中进行设定:

在server2上

vim /etc/salt/grains     ###进行grains文件的编辑

saltstack 实现自动化部署_第48张图片saltstack 实现自动化部署_第49张图片

在server3上

vim /etc/salt/grains     ###进行grains文件的编辑

saltstack 实现自动化部署_第50张图片saltstack 实现自动化部署_第51张图片

 

在hosts上进行刷新和测试:

[root@server1 salt]# salt '*' saltutil.sync_grains  ###进行刷新
[root@server1 salt]# salt '*' grains.item roles   ###进行测试查看

 

进行测试:

saltstack 实现自动化部署_第52张图片

 

 

在master端进行设定grains

mkdir _grains    ###进行grains目录的建立
cd _grains       ###进行目录的切换
vim my_grains.py   ###进行文件的编辑

saltstack 实现自动化部署_第53张图片

 

进行测试:

[root@server1 _grains]# salt '*' saltutil.sync_grains   ###进行刷新
[root@server1 _grains]# salt '*' grains.item foo      ###进行测试
[root@server1 _grains]# salt '*' grains.item hello    ###进行测试

saltstack 实现自动化部署_第54张图片

 

在server2和server3上进行查看:

 

saltstack 实现自动化部署_第55张图片

 

saltstack 实现自动化部署_第56张图片

saltstack 实现自动化部署_第57张图片

 

saltstack 实现自动化部署_第58张图片

 

进行grains的简单使用:

 

进行top.sls文件的编辑

vim top.sls         ###进行top.sls文件的编辑

saltstack 实现自动化部署_第59张图片

 

进行测试:(根据不同的grain值对于不同的主机安装不同的服务)

[root@server1 salt]#  salt '*' state.highstate   ###进行测试

saltstack 实现自动化部署_第60张图片

saltstack 实现自动化部署_第61张图片

 

 

你可能感兴趣的:(saltstack 实现自动化部署)