一、自动化运维介绍
传统运维:传统运维效率低,大多工作需要人工完成,工作繁琐,容易出错,每日重复做相同的事情,没有标准化流程,脚本过多,不方便管理。
自动化运维:解决上面所有问题。
常见自动化运维工具:
- Puppet:基于rubby开发,c/s架构,支持多平台,可管理配置文件、用户、cron任务、软件包、系统服务等。分为社区版和企业版,企业版支持图形化配置。
- Saltstack:基于Python开发,c/s架构,支持多平台,比Puppet轻量,在远程执行命令时非常快捷,配置和使用比puppet容易,能实现puppet几乎所有的功能。
- Ansible:更加简洁的自动化运维工具,不需要在客户端上安装客户端软件,基于Python开发的。可以实现批量操作系统配置、批量程序的部署、批量执行命令。
二、saltstack安装与启动
saltstack介绍文档: https://docs.saltstack.com/en/latest/topics/index.html
saltstack操作方式
- 使用salt-ssh远程执行,类似ansible,
- 支持c/s模式
现在按照c/s模式使用,需要准备两台机器其中一台做服务端,另一台做客户端
- 服务端的ip 192.168.126.128
- 客户端的ip 192.168.126.129
先修改两台机器上的hostname,之后再进行编辑/etc/hosts文件
两台机器上的的/etc/hosts文件都要按照上面的图所示进行修改
在两台机器上安装repo仓库,然后安装 salt-master 和salt-minion包
[root@lin-01 ~]# yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest.el7.noarch.rpm
[root@lin-01 ~]# yum install -y salt-master salt-minion
变价配置文件/etc/salt/minion修改如下
- 监听端口4505 作用是 发布消息;也就是zeromq.x86_64 0:4.1.4-7.el7,这个包的端口。
- 监听端口4506 作用是salt-master和salt-minion通信
在129的机器上进行按照上面配置,其中129上面只要安装salt-minion这个包就好了(客户端不需要安装salt-master)
三、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
- 通信过程需要借助salt-key工具来实现。
- salt-key命令用法
参数 作用 -a 后面跟主机名,认证指定主机 -A 认证所有主机 -r 跟主机名,拒绝指定主机 -R 拒绝所有主机 -d 跟主机名,删除指定主机认证 -D 删除全部主机认证 -y 省略掉交互,相当于直接按了y
在129下salt-minion服务启动下,/etc/salt/pki/minion/生成私钥和公钥
在128下面etc/salt/pki/master下生成密钥对
- 现在用salt-key工具认证lin-02机器;salt-key -a hostname
- 认证所有主机:salt-key -A
- 删除全部主机认证: salt-key -D
- 重新认证主机,可以salt-key -A,但是必须在两台机器上重启: systemctl restart salt-minion
- 删除某个认证用户:salt-key -d lin-02 -y
- 要继续认lin-02主机,需在lin-02上重启 systemctl restart salt-minion 服务。
- 要重新认证,先把lin-02删除,载lin-02机器上重启服务,再用-a认证
四、saltstack远程执行命令
salt '*' test.ping:测试所有认证主机是否存活
注意:这里的*必须是在master上已经被接受过认证的客户端,可以通过salt-key查到,通常是我们已经设定的id值。也可以指定一个认证用户,比如 salt 'lin-02' test.ping
- salt '*' cmd.run "命令" : 在所有认证用户上执行命令
- 支持正则