一.自动化运维介绍
传统运维缺点
传统运维效率低,大多工作人为完成
传统运维工作繁琐,容易出错
传统运维每日重复做相同的事情
传统运维没有标准化流程
传统运维的脚本繁多,不能方便管理
自动化运维就是要解决上面所有问题
Puppet (www.puppetlabs.com)基于rubby开发,c/s架构,支持多平台,可管理配置文件、用户、cron任务、软件包、系统服务等。 分为社区版(免费)和企业版(收费),企业版支持图形化配置。
Saltstack(官网 https://saltstack.com,文档docs.saltstack.com )基于python开发,c/s架构,支持多平台,比puppet轻量,在远程执行命令时非常快捷,配置和使用比puppet容易,能实现puppet几乎所有的功能。
Ansible (www.ansible.com )更加简洁的自动化运维工具,不需要在客户端上安装agent,基于python开发。可以实现批量操作系统配置、批量程序的部署、批量运行命令。
二.saltstack安装
saltstack介绍文档 https://docs.saltstack.com/en/latest/topics/index.html
saltstack最新yum源 https://repo.saltstack.com/#rhel
可以使用salt-ssh远程执行,类似ansible,也支持c/s模式。
环境:
192.168.157.128 KXLZQ 既做服务端 也做客户端
192.168.157.129 XXQ 做客户端
为两台机器设置hostname
[root@KXLZQ ~]# hostnamectl set-hostname KXLZQ
[root@XXQ ~]# hostnamectl set-hostname XXQ
分别在俩台机器上设置hosts
vim /etc/hosts
增加以下内容:
192.168.70.128 KXLZQ
192.186.70.129 XXQ
分别为两台机器安装saltstack yum源(可以在官方文档中找到最新的版本)
[root@KXLZQ ~]# yum install -y http://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
在128(KXLZQ)上安装salt-master(服务端)和salt-minion
yum install -y salt-master salt-minion
在129(XXQ)上安装salt-minion
yum install -y salt-minion
三.启动salt相关服务
在KXLZQ上编辑minion配置文件/etc/salt/minion
[root@KXLZQ ~]# vim /etc/salt/minion
在配置文件中取消注释,并修改内容如下:
master: KXLZQ
在KXLZQ上启动master和minion
[root@KXLZQ ~]# systemctl start salt-minion
[root@KXLZQ ~]# systemctl start salt-master
在XXQ上编辑minion配置文件启动服务
[root@XXQ ~]# vim /etc/salt/minion
在配置文件中取消注释,并修改内容如下:
master: KXLZQ
在XXQ上启动minion服务
[root@XXQ ~]# systemctl start salt-minion
查看相关服务监听的端口
[root@KXLZQ ~]# netstat -lntp |grep python
tcp 0 0 0.0.0.0:4505 0.0.0.0:* LISTEN 2253/python
tcp 0 0 0.0.0.0:4506 0.0.0.0:* LISTEN 2259/python
服务端上监听4505和4506两个端口,4505是消息发布的端口,4506是和客户端通信的端口。客户端上是不会监听端口的。
四.saltstack配置认证
saltstack认证过程
master端和minion端通信需要建立一个安全通道,传输过程需要加密,所以得配置认证,也是通过密钥对来加密解密的
minion在第一次启动时会在/etc/salt/pki/minion/下生成minion.pem和minion.pub,其中.pub为公钥,它会把公钥传输给master
minion端存放私钥和公钥的路径
[root@XXQ ~]# ls /etc/salt/pki/minion/
minion.pem minion.pub
master第一次启动时也会在/etc/salt/pki/master下生成密钥对,当master接收到minion传过来的公钥后,通过salt-key工具接受这个公钥,一旦接受后就会在/etc/salt/pki/master/minions/目录里存放刚刚接受的公钥,同时客户端也会接受master传过去的公钥,把它放在/etc/salt/pki/minion目录下,并命名为minion_master.pub
[root@KXLZQ ~]# ls /etc/salt/pki/master/
master.pem master.pub minions minions_autosign minions_denied minions_pre minions_rejected
salt-key:saltstack认证工具
-a 后面跟主机名,认证指定主机
-A 认证所有主机
-r 跟主机名,拒绝指定主机
-R 拒绝所有主机
-d 跟主机名,删除指定主机认证
-D 删除全部主机认证
-y 省略掉交互,相当于直接按了y
直接使用 命令salt-key可以查看所有minion的认证状态
[root@KXLZQ ~]# salt-key
Accepted Keys:
Denied Keys:
Unaccepted Keys:
KXLZQ
XXQ
Rejected Keys:
认证主机KXLZQ,可以在主机名后面添加选项-y省略交互
格式: salt-key -a 主机名
[root@KXLZQ ~]# salt-key -a KXLZQ -y
The following keys are going to be accepted:
Unaccepted Keys:
KXLZQ
Key for minion KXLZQ accepted.
拒绝认证主机XXQ
格式: salt-key -r 主机名
[root@KXLZQ ~]# salt-key -r XXQ ##拒绝XXQ
The following keys are going to be rejected:
Unaccepted Keys:
XXQ
Proceed? [n/Y] y
Key for minion XXQ rejected.
删除认证的主机KXLZQ
格式:salt-key -d 主机名
[root@KXLZQ ~]# salt-key -d KXLZQ -y ##删除KXLZQ
The following keys are going to be deleted:
Accepted Keys:
KXLZQ
Key for minion KXLZQ deleted.
认证所有主机
格式: salt-key -A
[root@KXLZQ ~]# salt-key -A ##认证所有机器
The following keys are going to be accepted:
Unaccepted Keys:
KXLZQ
XXQ
Proceed? [n/Y] y
Key for minion KXLZQ accepted.
Key for minion XXQ accepted.
[root@KXLZQ ~]# salt-key ##查看认证状态
Accepted Keys:
KXLZQ
XXQ
Denied Keys:
Unaccepted Keys:
Rejected Keys:
五.saltstack远程执行命令
测试客户端网络
格式:salt ‘主机名’ testping
[root@KXLZQ ~]# salt ‘’ test.ping
XXQ:
True
KXLZQ:
True
让客户端运行命令
格式:satl ‘主机名’ cmd.run “命令”
[root@KXLZQ ~]# salt '’ cmd.run “hostname”
XXQ:
XXQ
KXLZQ:
KXLZQ
必须是在master上已经被接受过认证的客户端,可以通过salt-key查到。关于这部分内容,它支持通配、列表以及正则。
[root@KXLZQ ~]# salt 'zyj’ cmd.run “hostname”
XXQ:
XXQ
KXLZQ:
KXLZQ
选项-E 表示使用正则
[root@KXLZQ ~]# salt -E ‘zyj0\d’ cmd.run “hostname” ##\d等于[0-9]
XXQ:
XXQ
KXLZQ:
KXLZQ
选项-L 使用列表 多个机器用逗号分隔
[root@KXLZQ ~]# salt -L ‘KXLZQ,XXQ’ test.ping
XXQ:
True
KXLZQ:
True
用grains匹配主机
1.格式:salt -G 键:值
[root@KXLZQ pillar]# salt -G role:web test.ping
XXQ:
True
用pillar匹配主机
格式:salt -I ‘键:值’
[root@KXLZQ pillar]# salt -I ‘conf:/etc/123.conf’ test.ping
KXLZQ:
True