SaltStack简单安装
常用的自动化管理工具
- Puppet
Puppet是早期的Linux自动化运维工具,是一种LINUX、WINDOWS、UNIX平台的集中配置管理系统,到现在已经非常成熟,可以批量管理远程服务器,模块丰富,配置复杂,基于Ruby语言编写。是最典型的C/S结构,需要安装服务端和客户端 。
Puppet采用C/S星状的结构,所有的客户端和一个或者多个服务器交互,每个客户端周期地(默认半个小时)向服务器发送请求,获得最新的配置信息,保证和配置信息同步。
每个Puppet客户端周期地连接一次服务器,下载最新的配置文件,并且严格按照配置文件来配置客户端。配置完成后,Puppet客户端可以反馈给服务器端一个消息,如果出错也会给服务器端反馈一个消息
Puppet适用于服务器管理的整个过程,比如初始安装、配置、更新等
SaltStack
SaltStack和Puppet一样,也是C/S模式,需要安装服务端和客户端,基于Python编写,加入了MQ消息同步,可以使执行命令和执行结果高效返回,但其执行过程需要等待客户端全部返回,如果客户端没有及时返回或者没有响应的话,可能会导致部分机器没有执行结果。Ansible
Ansible和SaltStack一样是基于Python开发,Ansible只需要在一台普通的服务器上运行即可,不需要在客户端服务器上安装客户端。因为Ansible基于SSH远程管理,而Linux服务器大部分都离不开SSH,所以Ansible不需要为配置添加额外的支持。
Ansible安装使用都很简单,而且基于上千个插件和模块,实现各种软件、平台、版本的管理,支持虚拟容器多层级的部署。
有时候会觉得Ansible比SaltStack执行效率慢,其实并不是软件本身的问题,二是由于SSH服务慢,可以通过优化SSH连接速度和使用Ansible加速模块提高效率.
- 技术特点对比
- 优缺点
1、puppet优缺点
2、saltstack优缺点:
3、ansible优缺点:
saltstackt配置文件
saltstack
的配置文件在/etc/salt
目录
saltstack配置文件说明:
配置文件 | 说明 |
---|---|
/etc/salt/master | 主控端(控制端)配置文件 |
/etc/salt/minion | 受控端配置文件 |
配置文件/etc/salt/master
默认的配置就可以很好的工作,故无需修改此配置文件。
配置文件/etc/salt/minion常用配置参数
- master:设置主控端的IP
- id:设置受控端本机的唯一标识符,可以是ip也可以是主机名或自取某有意义的单词
在日常使用过程中,经常需要调整或修改Master配置文件,SaltStack大部分配置都已经指定了默认值,只需根据自己的实际需求进行修改即可。下面的几个参数是比较重要的
- max_open_files:可根据Master将Minion数量进行适当的调整
- timeout:可根据Master和Minion的网络状况适当调整
- auto_accept和autosign_file:在大规模部署Minion时可设置自动签证
- master_tops和所有以external开头的参数:这些参数是SaltStack与外部系统进行整合的相关配置参数
SaltStack工作机制
命令通过发布者(publisher)端口,分发至所有已连接的 Salt minion;
每个 Salt minion 都需要检查命令,评估是否应该在节点上运行命令;
目标系统将会运行命令,并将结果返回至请求服务器。 当 Salt minion 接收到命令时,其执行过程如下:
1.每条命令都将被分拆为一个独立的工作进程,从而 Salt minion 才能在同一时刻处理多项作业。 2.针对 Salt 命令(结构如下图),找到正确的 module,随后以提供的 arguments 作为参数,调用 function。注意:Salt 实际上可以看做是 Python 函数的抽象层
SaltStack安装
环境
主机类型 | 主机名 | ip | 安装 |
---|---|---|---|
主控制机 | master | 192.168.147.33 | salt-master salt-minion |
被控机 | node1 | 192.168.147.55 | salt-minion |
//关闭防火墙
[root@master ~]# systemctl stop firewalld
[root@master ~]# setenforce 0
[root@node1 ~]# systemctl stop firewalld
[root@node1 ~]# setenforce 0
//在主控端安装saltstack存储库和密钥
[root@master ~]# rpm --import https://repo.saltproject.io/py3/redhat/8/x86_64/latest/SALTSTACK-GPG-KEY.pub
[root@master ~]# curl -fsSL https://repo.saltproject.io/py3/redhat/8/x86_64/latest.repo | tee /etc/yum.repos.d/salt.repo
[salt-latest-repo]
name=Salt repo for RHEL/CentOS 8 PY3
baseurl=https://repo.saltproject.io/py3/redhat/8/x86_64/latest
skip_if_unavailable=True
failovermethod=priority
enabled=1
enabled_metadata=1
gpgcheck=1
gpgkey=https://repo.saltproject.io/py3/redhat/8/x86_64/latest/SALTSTACK-GPG-KEY.pub
//安装saltstack主控端
[root@master ~]# yum -y install salt-master salt-minion
//修改主控端的配置文件
[root@master ~]# cd /etc/salt
[root@master salt]# ls
cloud cloud.deploy.d cloud.profiles.d master minion pki proxy.d
cloud.conf.d cloud.maps.d cloud.providers.d master.d minion.d proxy roster
[root@master salt]# vim minion
#master: salt
master: 192.168.147.33 //添加这一行
//启动主控制端的salt-master和salt-minion,并设置开机自启
[root@master ~]# systemctl start salt-master
[root@master ~]# systemctl start salt-minion
[root@master ~]# systemctl enable salt-minion
Created symlink /etc/systemd/system/multi-user.target.wants/salt-minion.service → /usr/lib/systemd/system/salt-minion.service.
[root@master ~]# systemctl enable salt-master
Created symlink /etc/systemd/system/multi-user.target.wants/salt-master.service → /usr/lib/systemd/system/salt-master.service.
[root@master ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 0.0.0.0:4505 0.0.0.0:*
LISTEN 0 128 0.0.0.0:4506 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
//在被控端安装saltstack存储库和密钥
[root@node1 ~]# rpm --import https://repo.saltproject.io/py3/redhat/8/x86_64/latest/SALTSTACK-GPG-KEY.pub
[root@node1 ~]#
[root@node1 ~]# curl -fsSL https://repo.saltproject.io/py3/redhat/8/x86_64/latest.repo | tee /etc/yum.repos.d/salt.repo
[salt-latest-repo]
name=Salt repo for RHEL/CentOS 8 PY3
baseurl=https://repo.saltproject.io/py3/redhat/8/x86_64/latest
skip_if_unavailable=True
failovermethod=priority
enabled=1
enabled_metadata=1
gpgcheck=1
gpgkey=https://repo.saltproject.io/py3/redhat/8/x86_64/latest/SALTSTACK-GPG-KEY.pub
//安装被控端安装salt-minion客户端
[root@node1 ~]# yum -y install salt-minion
//修改被控制端的配置文件
[root@node1 ~]# cd /etc/salt
[root@node1 salt]# ls
cloud cloud.deploy.d cloud.profiles.d master minion pki proxy.d
cloud.conf.d cloud.maps.d cloud.providers.d master.d minion.d proxy roster
[root@node1 salt]# vim minion
#master: salt
master: 192.168.147.33 //将master设为主控制端的ip
//开启被控制端的salt-minion并设置开机自启
[root@node1 ~]# systemctl start salt-minion
[root@node1 ~]# systemctl enable salt-minion
Created symlink /etc/systemd/system/multi-user.target.wants/salt-minion.service → /usr/lib/systemd/system/salt-minion.service.
SaltStack工作机制
saltsatck
主控端是依靠openssl
证书来与受控端主机认证通讯的,受控端启动后会发送给主控端一个公钥证书文件,在主控端用salt-key
命令来管理证书。
salt-minion与salt-master的认证过程:
minion
在第一次启动时,会在/etc/salt/pki/minion/
下自动生成一对密钥,然后将公钥发给mastermaster
收到minion
的公钥后,通过salt-key
命令接受该公钥。此时master
的/etc/salt/pki/master/minions
目录将会存放以minion id
命名的公钥,然后master
就能对minion
发送控制指令了
//salt-key常用选项
-L //列出所有公钥信息
-a minion //接受指定minion等待认证的key
-A //接受所有minion等待认证的key
-r minion //拒绝指定minion等待认证的key
-R //拒绝所有minion等待认证的key
-f minion //显示指定key的指纹信息
-F //显示所有key的指纹信息
-d minion //删除指定minion的key
-D //删除所有minion的key
-y //自动回答yes
[root@master ~]# salt-key -L //查看当前证书的情况
Accepted Keys:
Denied Keys:
Unaccepted Keys:
master
node1
Rejected Keys:
//接受指定minion的新证书
[root@master ~]# salt-key -ya node1
The following keys are going to be accepted:
Unaccepted Keys:
node1
Key for minion node1 accepted.
[root@master ~]# salt-key -L
Accepted Keys:
node1
Denied Keys:
Unaccepted Keys:
master
Rejected Keys:
//接受所有minion的新证书
[root@master ~]# salt-key -yA
The following keys are going to be accepted:
Unaccepted Keys:
master
Key for minion master accepted.
[root@master ~]# salt-key -L
Accepted Keys:
master
node1
Denied Keys:
Unaccepted Keys:
Rejected Keys:
//查看指定key的指纹信息
[root@master ~]# salt-key -f node1
Accepted Keys:
node1: 22:b2:d1:88:8f:bb:c8:ca:9c:bf:f1:d1:9a:48:d1:26:ba:0d:0b:94:21:53:8b:a1:ad:d4:2a:c7:e2:1f:34:53
//查看所有key的指纹信息
[root@master ~]# salt-key -F
Local Keys:
master.pem: ed:c6:9b:17:43:ef:4d:33:67:32:23:84:bc:41:60:0b:69:55:61:03:2b:d3:4c:8a:00:1f:5f:fa:f7:ea:4d:97
master.pub: 36:1e:ee:05:6f:31:23:a8:b3:14:a7:19:9b:21:84:6b:7f:f8:88:da:d5:d1:f0:b7:2e:75:14:d3:d6:95:ae:7d
Accepted Keys:
master: be:b7:6b:3b:b1:c1:1d:3d:5f:30:91:fa:62:89:3d:f4:d5:ba:ca:be:b4:f8:e3:f7:d9:f9:e7:21:8a:a8:f9:ea
node1: 22:b2:d1:88:8f:bb:c8:ca:9c:bf:f1:d1:9a:48:d1:26:ba:0d:0b:94:21:53:8b:a1:ad:d4:2a:c7:e2:1f:34:53
//拒绝指定minion等待认证的key
[root@master ~]# salt-key -yr master
The following keys are going to be rejected:
Unaccepted Keys:
master
Key for minion master rejected.
[root@master ~]# salt-key -L
Accepted Keys:
node1
Denied Keys:
Unaccepted Keys:
Rejected Keys:
master
//删除指定minion的key
[root@master ~]# salt-key -yd master
The following keys are going to be deleted:
Rejected Keys:
master
Key for minion master deleted.
[root@master ~]# salt-key -L
Accepted Keys:
node1
Denied Keys:
Unaccepted Keys:
Rejected Keys:
saltstack远程执行
//测试指定受控端主机是否存活
root@master ~]# salt "node1" test.ping
node1:
True
[root@master ~]# salt "node1" cmd.run hostname
node1:
node1.example.com
//测试所有受控端主机是否存活
[root@master ~]# salt '*' test.ping
node1:
True
master:
True
salt命令使用
//语法:salt [options] '<target>' <function> [arguments]
//常用的options
--version //查看saltstack的版本号
--versions-report //查看saltstack以及依赖包的版本号
-h //查看帮助信息
-c CONFIG_DIR //指定配置文件目录(默认为/etc/salt/)
-t TIMEOUT //指定超时时间(默认是5s)
--async //异步执行
-v //verbose模式,详细显示执行过程
--username=USERNAME //指定外部认证用户名
--password=PASSWORD //指定外部认证密码
--log-file=LOG_FILE //指定日志记录文件
//常用target参数
-E //正则匹配
-L //列表匹配
-S //CIDR匹配网段
-G //grains匹配
--grain-pcre //grains加正则匹配
-N //组匹配
-R //范围匹配
-C //综合匹配(指定多个匹配)
-I //pillar值匹配
[root@master ~]# salt '*' test.ping
node1:
True
master:
True
[root@master ~]# salt -E 'node*' test.ping
node1:
True
[root@master ~]# salt -L node1,master test.ping
node1:
True
master:
True
[root@master ~]# salt -S '192.168.147.0/24' test.ping
node1:
True
master:
True