1.自动化运维介绍
- 传统运维效率低,大多工作人为完成
- 传统运维工作繁琐,容易出错
- 传统运维每日重复做相同的事情
- 传统运维没有标准化流程
- 传统运维的脚本繁多,不能方便管理
- 自动化运维就是要解决上面所有问题
- 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开发。可以实现批量操作系统配置、批量程序的部署、批量运行命令。
2. saltstack安装
准备两台机器,一台做为服务器,一台做为客户端。。例:这里我以knightlai01为服务器,knightlai02为客户端
两台机器全部安装saltstack yum源
[root@knightlai01 ~]# yum install -y https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
Loaded plugins: fastestmirror
salt-repo-latest-2.el7.noarch.rpm | 5.6 kB 00:00:00
Examining /var/tmp/yum-root-7pz0y7/salt-repo-latest-2.el7.noarch.rpm: salt-repo-latest-2.el7.noarch
Marking /var/tmp/yum-root-7pz0y7/salt-repo-latest-2.el7.noarch.rpm to be installed
Resolving Dependencies
--> Running transaction check
---> Package salt-repo.noarch 0:latest-2.el7 will be installed
--> Finished Dependency Resolution
.......................................................
[root@knightlai02 ~]# yum install -y https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
Loaded plugins: fastestmirror
salt-repo-latest-2.el7.noarch.rpm | 5.6 kB 00:00:00
Examining /var/tmp/yum-root-r6xe7r/salt-repo-latest-2.el7.noarch.rpm: salt-repo-latest-2.el7.noarch
Marking /var/tmp/yum-root-r6xe7r/salt-repo-latest-2.el7.noarch.rpm to be installed
Resolving Dependencies
--> Running transaction check
---> Package salt-repo.noarch 0:latest-2.el7 will be installed
--> Finished Dependency Resolution
.......................................................................
在knightlai01服务器上yum install -y salt-master salt-minion
[root@knightlai01 ~]# yum install -y salt-master salt-minion
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
epel/x86_64/metalink | 8.5 kB 00:00:00
* base: mirror.vpshosting.com.hk
* epel: mirrors.aliyun.com
* extras: mirror.vpshosting.com.hk
* updates: mirror.vpshosting.com.hk
.......................................................................................
在knightlai02服务器上执行yum install -y salt-minion
[root@knightlai02 ~]# yum install -y salt-minion
Loaded plugins: fastestmirror
Determining fastest mirrors
epel/x86_64/metalink | 8.5 kB 00:00:00
* base: repo.virtualhosting.hk
* epel: mirrors.aliyun.com
* extras: repo.virtualhosting.hk
* updates: repo.virtualhosting.hk
.....................................................................................
3.启动saltstack服务
3.1 编辑服务器上配置文件knightlai01
[root@knightlai01 ~]# vi /etc/salt/minion//增加
master: knightlai01
//在服务器上启动服务
[root@knightlai01 ~]# systemctl start salt-master; systemctl start salt-minion
[root@knightlai01 ~]# netstat -tlnp|grep python
tcp 0 0 0.0.0.0:4505 0.0.0.0:* LISTEN 5729/python
tcp 0 0 0.0.0.0:4506 0.0.0.0:* LISTEN 5735/python
服务端监听4505和4506两个端口,4505为消息发布的端口,4506为和客户端通信的端口
3.2 编辑客户端上配置文件knightlai02,并启动服务
[root@knightlai02 ~]# vi /etc/salt/minion
master: knightlai01
//在客户端上启动服务
[root@knightlai02 ~]# systemctl start salt-minion
4.saltstack配置认证
- master端和minion端通信需要建立一个安全通道,传输过程需要加密,所以得配置认证,也是通过密钥对来加密解密的
- minion在第一次启动时会在/etc/salt/pki/minion/下生成minion.pem和minion.pub,其中.pub为公钥,它会把公钥传输给master
- master第一次启动时也会在/etc/salt/pki/master下生成密钥对,当master接收到minion传过来的公钥后,通过salt-key工具接受这个公钥,一旦接受后就会在/etc/salt/pki/master/minions/目录里存放刚刚接受的公钥,同时客户端也会接受master传过去的公钥,把它放在/etc/salt/pki/minion目录下,并命名为minion_master.pub
在客户端上我们要确定要有这几个文件
[root@knightlai02 salt]# ls /etc/salt/pki/minion/
minion_master.pub minion.pem minion.pub
在服务器上
salt-key -a knightlai// -a后面跟主机名,可以认证指定主机
//如果认证完成可以看到以下信息
[root@knightlai01 ~]# salt '*' test.ping
knightlai02:
True
knightlai01:
True
4.2 salt-key命令用法
- -a 后面跟主机名,认证指定主机
- -A 认证所有主机
- -r 跟主机名,拒绝指定主机
- -R 拒绝所有主机
- -d 跟主机名,删除指定主机认证
- -D 删除全部主机认证
- -y 省略掉交互,相当于直接按了y
5.saltstack远程执行命令
//这里的*表示所有已经签名的minion端,也可以指定一个
[root@knightlai01 ~]# salt '*' test.ping
knightlai02:
True
knightlai01:
True
salt 'knightlai01' test.ping
salt '*' cmd.run "hostname"
说明: 这里的*必须是在master上已经被接受过认证的客户端,可以通过salt-key查到,
通常是我们已经设定的id值。关于这部分内容,它支持通配、列表以及正则。
比如两台客户端knightlai01,knightlai02, 那我们可以写成salt 'knightlai-*', salt 'knightlai-0[12]'
salt -L 'knightlai01,knightlai02'
salt -E 'knightlai(01|02)'等形式,使用列表,
即多个机器用逗号分隔,而且需要加-L,使用正则必须要带-E选项。
它还支持grains,加-G选项,pillar 加-I选项,下面会介绍到。