文章目录
1. SaltStack安装与最小化配置
环境说明:
主机类型 | IP地址 |
---|---|
服务端 | 192.168.1.153 |
客户端 | 192.168.2.155 |
官方Yum源地址:http://repo.saltstack.com
1.1 配置服务端与客户端
1.1.1 服务端配置
//永久修改主机名称,便于以后指令下发
[root@node01-linux ~]# hostnamectl set-hostname node01-linux.example.com
[root@node01-linux ~]# bash
[root@node01-linux ~]#
//查看python版本
[root@node01-linux ~]# python -V
Python 2.7.5
//安装相对应的saltstack的yum仓库
[root@node01-linux ~]# yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest.el7.noarch.rpm
1.1.2 客户端配置
//永久修改主机名称,便于以后指令下发
[root@node02-linux ~]# hostnamectl set-hostname node02-linux.example.com
[root@node02-linux ~]# bash
[root@node02-linux ~]#
//查看python版本
[root@node02-linux ~]# python -V
Python 2.7.5
//安装相对应的saltstack的yum仓库
[root@node02-linux ~]# yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest.el7.noarch.rpm
1.2 服务端与客户端安装软件
1.2.1 服务端安装软件
//服务端需要安装salt-master和salt-minion
[root@node01-linux ~]# yum -y install salt-master salt-minion
1.2.2 客户端安装软件
//客户端属于被控,所以只要安装salt-minion软件
[root@node02-linux ~]# yum -y install salt-minion
1.3 配置客户端
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与外部系统进行整合的相关配置参数
1.3.1 修改客户端配置文件
//因为服务器也要被控制,所以服务器上也有客户端
//配置服务器客户端
[root@node01-linux ~]# vim /etc/salt/minion
master: 192.168.1.153 //找到此项,将前面的注释#号取消,需要注意,master前面不能带空格,服务器IP地址前面必须要带一个空格
//配置客户端的配置文件
[root@node02-linux ~]# vim /etc/salt/minion
master: 192.168.1.153 //找到此项,将前面的注释#号取消,需要注意,master前面不能带空格,服务器IP地址前面必须要带一个空格
2 启动saltstack
2.1 启动服务器
//启动服务器的服务端和客户端
[root@node01-linux ~]# systemctl start salt-master
[root@node01-linux ~]# systemctl start salt-minion
//启动成功后在/etc/salt目录下会生成一个pki目录
[root@node01-linux ~]# cd /etc/salt/
[root@node01-linux ~]]# ls
cloud cloud.conf.d cloud.deploy.d cloud.maps.d cloud.profiles.d cloud.providers.d master master.d minion minion.d minion_id pki proxy proxy.d roster
//设置开机自启动
[root@node01-linux ~]# systemctl enable salt-minion
Created symlink from /etc/systemd/system/multi-user.target.wants/salt-minion.service to /usr/lib/systemd/system/salt-minion.service.
[root@node01-linux ~]# systemctl enable salt-master
Created symlink from /etc/systemd/system/multi-user.target.wants/salt-master.service to /usr/lib/systemd/system/salt-master.service.
2.2 启动客户端
//启动客户端
[root@node02-linux ~]# systemctl status salt-minion
//设置开机自启动
[root@node02-linux ~]# systemctl enable salt-minion
Created symlink from /etc/systemd/system/multi-user.target.wants/salt-minion.service to /usr/lib/systemd/system/salt-minion.service.
3 SaltStack认证机制
saltstack
主控端是依靠openssl
证书来与受控端主机认证通讯的,受控端启动后会发送给主控端一个公钥证书文件,在主控端用salt-key
命令来管理证书。
salt-minion
与salt-master
的认证过程:
- minion在第一次启动时,会在/etc/salt/pki/minion/下自动生成一对密钥,然后将公钥发给master
- master收到minion的公钥后,通过salt-key命令接受该公钥。此时master的/etc/salt/pki/master/minions目录将会存放以minion id命名的公钥,然后master就能对minion发送控制指令了
3.1 salt-key常用选项
//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
//接受指定客户端的minion等待认证的key
[root@node01-linux ~]# salt-key -a 'node*'
The following keys are going to be accepted:
Unaccepted Keys:
node01-linux.example.com
node02-linux.example.com
Proceed? [n/Y] y
Key for minion node01-linux.example.com accepted.
Key for minion node02-linux.example.com accepted.
//显示所有key的指纹信息
[root@node01-linux ~]# salt-key -F
Local Keys:
master.pem: 8d:cc:1a:cb:d4:6c:36:e9:34:21:02:79:83:82:c0:a9:35:43:f7:2f:10:52:1a:d1:91:ee:f5:4f:20:6c:ca:dc
master.pub: b0:30:e5:bb:70:06:b7:7a:25:41:1e:43:d0:82:19:17:b2:ab:df:a0:1a:c4:fd:29:fc:01:ec:da:e4:14:c0:27
Accepted Keys:
node01-linux.example.com: dc:ef:52:31:89:99:3a:30:4d:c0:d3:5c:89:9c:b5:53:7e:db:5b:3f:bd:cc:13:94:30:9a:73:c6:9f:87:b9:41
node02-linux.example.com: 08:37:64:66:23:85:03:08:66:a4:88:f0:27:72:fd:85:b4:61:0b:a6:fb:7c:ae:23:21:bc:c3:d0:0c:27:26:2c
3.2 SaltStack远程执行
//测试所有受控端主机是否存活
[root@node01-linux ~]# salt '*' test.ping
node02-linux.example.com:
True
node01-linux.example.com:
True
//只能处理静态资源,不能处理动态资源
//服务端统一下发指令
[root@node01-linux ~]# salt '*' cmd.run 'ls /tmp'
node02-linux.example.com:
systemd-private-2501d2cf4bd74c998a619b8b5d8a970f-chronyd.service-nFq5pO
systemd-private-2501d2cf4bd74c998a619b8b5d8a970f-vgauthd.service-QbHn0t
systemd-private-2501d2cf4bd74c998a619b8b5d8a970f-vmtoolsd.service-Gao1aE
tmpp9ks8s
node01-linux.example.com:
systemd-private-b21273960da2438db07b4607ff78e24e-chronyd.service-gW4jPD
systemd-private-b21273960da2438db07b4607ff78e24e-vgauthd.service-DA2ZUk
systemd-private-b21273960da2438db07b4607ff78e24e-vmtoolsd.service-0RJGku
//指定客户端下发创建文件指令,
[root@node01-linux ~]# salt 'node02*' cmd.run 'mkdir /opt/123'
node02-linux.example.com:
[root@node01-linux ~]# salt 'node02*' cmd.run 'ls /opt'
node02-linux.example.com:
123
//在指定的客户端查看是否创建成功
[root@node02-linux ~]# hostname
node02-linux.example.com
[root@node02-linux ~]# cd /opt/
[root@node02-linux opt]# ls
123
3.3 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值匹配
示例:
//查看saltstack版本信息
[root@node01-linux ~]# salt --version
salt 2019.2.3 (Fluorine)
[root@node01-linux ~]# salt -E 'node*' test.ping
node02-linux.example.com:
True
node01-linux.example.com:
True
[root@node01-linux ~]# salt -L 'node01-linux.example.com,node02-linux.example.com' test.ping
node02-linux.example.com:
True
node01-linux.example.com:
True
[root@node01-linux ~]# salt -S '192.168.1.0/24' test.ping
node02-linux.example.com:
True
node01-linux.example.com:
True
[root@node01-linux ~]# salt -G 'os:redhat' test.ping
node02-linux.example.com:
True
node01-linux.example.com:
True
[root@node01-linux ~]# salt -C 'G@os:redhat or L@node01-linux.example.com' test.ping
node02-linux.example.com:
True
node01-linux.example.com:
True
//G@os:redhat or L@node01-linux.example.com是一个复合组合,支持使用and和or关联多个条件