1.自动化运维
- 传统运维效率低,大多工作人为完成
- 传统运维工作繁琐,容易出错
- 传统运维每日重复做相同的事情
- 传统运维没有标准化流程
- 传统运维的脚本繁多,不能方便管理
- 自动化运维就是要解决上面所有问题
常见的自动化运维工具
Puppet (www.puppetlabs.com)
基于rubby开发,c/s架构,支持多平台(win、linux、mac),可管理配置文件、用户、cron任务、软件包、系统服务等。 分为社区版(免费)和企业版(收费),企业版支持图形化配置。
Saltstack(官网 https://saltstack.com,文档docs.saltstack.com )
基于python开发,c/s架构,支持多平台,比puppet轻量,在远程执行命令时非常快捷,配置和使用比puppet容易,能实现puppet几乎所有的功能。
Ansible (www.ansible.com )
更加简洁的自动化运维工具,不需要在客户端上安装agent,基于python开发。可以实现批量操作系统配置、批量程序的部署、批量运行命令。
2.saltstack安装
saltstack介绍https://docs.saltstack.com/en/latest/topics/index.html
可以使用salt-ssh远程执行,类似ansible,也支持c/s模式。
准备两台机器246.128;246.129 。 分别修改hostname和host(两台机器都需要)
[root@chenshi1 ~]# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.246.128 chenshi1
192.168.246.129 chenshi2
如果机器很多可以使用一个内部的dns
两台机器全部安装saltstack yum 源
[root@chenshi1 ~]# yum install -y https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
客户端只需要安装salt-minion
作为依赖被升级:
systemd.x86_64 0:219-57.el7_5.3 systemd-libs.x86_64 0:219-57.el7_5.3
systemd-sysv.x86_64 0:219-57.el7_5.3
[root@chenshi2 ~]# rpm -qa|grep salt
salt-repo-latest-2.el7.noarch
salt-2018.3.2-1.el7.noarch
salt-minion-2018.3.2-1.el7.noarch
在服务端需要安装yum install -y salt-master salt-minion
[root@chenshi1 ~]# yum install -y salt-master salt-minion
3.启动salt相关服务
在128上编辑配置文件
[root@chenshi1 ~]# vi /etc/salt/minion
找到maste去掉前面的#
master: chenshi1
在客户端上启动minion
[root@chenshi2 ~]# systemctl start salt-minion
[root@chenshi2 ~]# ps aux|grep minion
root 1699 5.7 1.1 313648 21364 ? Ss 10:54 0:00 /usr/bin/python /usr/bin/salt-minion
root 1702 10.2 2.2 567076 42388 ? Sl 10:54 0:00 /usr/bin/python /usr/bin/salt-minion
root 1710 0.0 1.0 403656 19948 ? S 10:54 0:00 /usr/bin/python /usr/bin/salt-minion
root 1777 0.0 0.0 112720 984 pts/0 R+ 10:54 0:00 grep --color=auto minion
在服务器上启动master
[root@chenshi1 ~]# systemctl start salt-master
[root@chenshi1 ~]# ps aux|grep master
root 1156 0.0 0.1 89620 2080 ? Ss 09:20 0:00 /usr/libexec/postfix/master -w
root 8916 10.8 2.1 388660 40368 ? Ss 10:55 0:00 /usr/bin/python /usr/bin/salt-master
root 8925 0.0 1.0 305976 19848 ? S 10:55 0:00 /usr/bin/python /usr/bin/salt-master
root 8930 0.0 1.8 469548 34060 ? Sl 10:55 0:00 /usr/bin/python /usr/bin/salt-master
。
。
。
查看监听端口
[root@chenshi1 ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 888/sshd
tcp 0 0 0.0.0.0:4505 0.0.0.0:* LISTEN 8930/python
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1156/master
tcp 0 0 0.0.0.0:4506 0.0.0.0:* LISTEN 8936/python
tcp6 0 0 :::22 :::* LISTEN 888/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1156/master
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
以上过程需要借助salt-key工具来实现(需要关闭firewalld)
首次执行
[root@chenshi1 ~]# salt-key -a chenshi2
The following keys are going to be accepted:
Unaccepted Keys:
chenshi2
Proceed? [n/Y] y
Key for minion chenshi2 accepted.
再次执行
[root@chenshi1 ~]# salt-key
Accepted Keys:
chenshi2
Denied Keys:
Unaccepted Keys:
chenshi1
Rejected Keys:
查看已接收的公钥
[root@chenshi1 ~]# ls /etc/salt/pki/master/minions
chenshi2
salt-key用法
• -a 后面跟主机名,认证指定主机
• -A 认证所有主机
• -r 跟主机名,拒绝指定主机
• -R 拒绝所有主机
• -d 跟主机名,删除指定主机认证
• -D 删除全部主机认证
• -y 省略掉交互,相当于直接按了y
重启minion端可以让master读取到minion;删除key,然后使用-A和-y来全部通过keys
[root@chenshi1 minions]# rm -rf chenshi2
[root@chenshi1 minions]# cd
[root@chenshi1 ~]# salt-key
Accepted Keys:
Denied Keys:
Unaccepted Keys:
chenshi1
Rejected Keys:
[root@chenshi1 ~]# salt-key
Accepted Keys:
Denied Keys:
Unaccepted Keys:
chenshi1
chenshi2
Rejected Keys:
----------------------------------------------
[root@chenshi1 ~]# salt-key -A -y
The following keys are going to be accepted:
Unaccepted Keys:
chenshi1
chenshi2
Key for minion chenshi1 accepted.
Key for minion chenshi2 accepted.
[root@chenshi1 ~]# salt-key
Accepted Keys:
chenshi1
chenshi2
Denied Keys:
Unaccepted Keys:
Rejected Keys:
salt-key操作对象是要在Unaccepted下
5.saltstack远程执行命令
这里的*表示所有已经签名的minion端,也可以指定一个
[root@chenshi1 ~]# salt '*' test.ping
chenshi2:
True
chenshi1:
True
说明: 这里的*必须是在master上已经被接受过认证的客户端,可以通过salt-key查到,通常是我们已经设定的id值。关于这部分内容,它支持通配、列表以及正则。 比如两台客户端aming-01,aming-02, 那我们可以写成salt 'aming-*', salt 'aming-0[12]' salt -L 'aming-01,aming-02' salt -E 'aming-(01|02)'等形式,使用列表,即多个机器用逗号分隔,而且需要加-L,使用正则必须要带-E选项。 它还支持grains,加-G选项,pillar 加-I选项
-----------------------------------------------
[root@chenshi1 ~]# salt '*' cmd.run "hostname"
chenshi2:
chenshi2
chenshi1:
chenshi1
更加简洁的自动化运维工具,不需要在客户端上安装agent,基于python开发。可以实现批量操作系统配置、批量程序的部署、批量运行命令。