saltstack
saltstack
1. 简介
saltstack 是由 thomas Hatch 于 2011 年创建的一个开源项目,设计初衷是为了实现一个快速的远程执行系统
2. saltstack 功能
saltstack 灵活性强大,可以进行大规模部署,也能进行小规模的系统部署,saltstack 的设计架构适用于任意数量的服务器,从少量本地网络系统到跨越数个数据中心,拓扑架构都是 c/s 模型,配置简单
不管是几台、几百台、几千台服务器,都可以使用 saltstack 在一个中心节点上进行管控,灵活定位任意服务器子集来运行命令
saltstack 是 python 编写的,支持用户通过 python 自定义功能模块,也提供了大量的 python API 接口,用户可以根据需要进行简单快速的扩展
3. saltstack 运行方式
- local:本地运行,交付管理
- master/minion:常用方式
- salt ssh:不需要客户端
4. saltstack 部署架构
在安装 salt 之前,先理解salt架构中各个角色,主要区分是 salt-master 和 salt-minion,顾名思义 master 是中心控制系统,minion 是被管理的客户端。
salt 架构中的一种就是 master > minion
在远程执行系统中,salt 用 python 通过函数调用完成任务
运行 salt 依赖包:python、zeromq、pyzmp、pycrypto、msgpack-python、yam、jinjia2
5. 搭建前准备
服务器环境 | IP 地址 | 身份 | 软件包 |
---|---|---|---|
V7-1 | 172.30.110.112 | master | salt-master |
V7-2 | 172.30.110.113 | slave | salt-minion |
5.1 配置 ip 地址
V7-1
[root@V7-1 ~]# nmcli connection modify ens33 ipv4.addresses 172.30.110.112/24 ipv4.gateway 172.30.110.254 ipv4.dns 202.106.0.20,114.114.114.114 ipv4.method manual connection.autoconnect yes
V7-2
[root@V7-2 ~]# nmcli connection modify ens33 ipv4.addresses 172.30.110.113/24 ipv4.gateway 172.30.110.254 ipv4.dns 202.106.0.20,114.114.114.114 ipv4.method manual connection.autoconnect yes
5.2 关闭安全策略
V7-1 \ V7-2
[root@V7-1 ~]# iptables -F
[root@V7-1 ~]# setenforce 0
[root@V7-1 ~]# systemctl stop firewalld
5.3 hosts 文件
V7-1 / V7-2
[root@centos7-1 srv]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.30.110.112 centos7-1
172.30.110.113 centos7-2
6. 搭建 saltstack
下载官方 saltstack 源
[root@V7-1 ~]# yum install -y https://repo.saltstack.com/yum/redhat/salt-repo-latest-3.el7.noarch.rpm
安装 salt-master
[root@V7-1 ~]# yum install -y salt-master
安装 salt-minion
[root@V7-1 ~]# yum install -y salt-minion
[root@V7-2 ~]# yum install -y salt-minion
启动服务
[root@V7-1 ~]# systemctl start salt-master
[root@V7-1 ~]# systemctl start salt-minion
[root@V7-2 ~]# systemctl start salt-minion
启动服务之后,salt-master 默认监听两个端口,需要确保客户端这两个端口畅通
4505:publish_port 提供远程命令发送功能
4506:ret_port 提供认证,文件服务,结果收集等功能
7. saltstack 配置文件
Salt-master:/etc/salt/master
salt-minion:/etc/salt/minion
配置文件中包含很多可调整的参数,这些参数可以控制 master 和 minion 各个方面
salt-master
interface: 192.168.28.141 #绑定到本地的某个网络地址
publish_port: 4505 #默认端口4505,设置master与minion通信端口
user: root #运行salt进程的用户
max_open_files: 100000 #master可以打开的最大句柄数
worker_threads: 5 #启动用来接收或应答minion的线程数
ret_port: 4506 #master用来发送命令或接受minions的命令执行返回信息
pidfile: /var/run/salt-master.pid #指定master的pid文件位置
root_dir: / #该目录为salt运行的根目录,改变它可以使salt从另外一个目录运行,好比chroot
pki_dir: /etc/salt/pki/master #存放pki认证密钥
cachedir: /var/cache/salt #存放缓存信息,salt工作执行的命令信息
verify_env: True #启动验证和设置权限配置目录
keep_jobs: 24 #保持工作信息的过期时间,单位小时
job_cache: True #设置master维护的工作缓存.当minions超过5000台时,它将很好的承担这个大的架构
timeout: 5 #master命令执可以接受的延迟时间
output: nested #salt命令的输出格式
minion_data_cache: True #关于minion信息存储在master上的参数,主要是pilar和grains数据
auto_accept: False #默认值False. master自动接受所有发送公钥的minion
file_recv: False #允许minion推送文件到master上
file_recv_max_size: 100 #默认值100,设置一个hard-limit文档大小推送到master端
state_top: top.sls #状态入口文件
renderer: yaml_jinja #使用渲染器用来渲染minions的状态数据
failhard: False #当单个的状态执行失败后,将会通知所有的状态停止运行
salt-minion
master: #指定master 主机(默认为salt)
master_port: #指定认证和执行结果发送到master 的哪个端⼝, 与master 配置组件中的ret_port 对应(默认为4506)
id: #指定本minion的标识. salt内部使 id 作为标识(默认为主机名)
user: #指定运行minion的用户. 由于安装包,启动服务等操作需要特权用户, 推荐使用root( 默认为root)
cache_jobs : #minion 是否缓存执行结果(默认为False)
backup_mode: #在组件操作(file.managed 或file.recurse) 时, 如果组件发生变更,指定备份指标. 当前有效的值为minion, 备份在cachedir/file_backups⺫录下, 以原始组件名称加时间戳来命名(默认为Disabled)
providers : #指定模块对应的providers, 如在RHEL系列中, pkg对应的providers 是yumpkg5
renderer: #指定配置管理系统中的渲染器(默认值为:yaml_jinja )
file_client : #指定file clinet 默认去哪⾥(remote 或local) 寻找⽂件(默认值为remote)
loglevel: #指定⽇志级别(默认为warning)
tcp_keepalive : #minion 是否与master 保持keepalive 检查, zeromq3 以下版本存在keepalive bug,会导致某些情况下连接异常后minion重连master. 建议有条件的话升级到zeromq 3以上版本(默认为True)
8. minion 连接 master
需要修改/etc/salt/minion
中master:
修改成 master 的 IP 地址或者主机名
[root@V7-2 ~]# vim /etc/salt/minion
master: centos7-1
[root@V7-1 ~]# salt-key -L 查看是否有对应节点的密钥
[root@V7-1 ~]# salt-key -a 节点主机名 对单独节点进行认证
[root@V7-1 ~]# salt-key -A 接管所有节点
此时已经有了两个节点
[root@centos7-1 ~]# salt-key -L
Accepted Keys:
slave112
slave113
Denied Keys:
Unaccepted Keys:
Rejected Keys:
9. saltstack 命令
9.1 salt-key
只有Master
接受了Minion Key
后,才能进行管理。具体的认证命令为salt-key
常用的有如下命令
[root@centos7-1 ~]# salt-key -L
Accepted Keys: #已经接受的key
Denied Keys: #拒绝的key
Unaccepted Keys:#未加入的key
Rejected Keys:#吊销的key
常用参数
-L #查看KEY状态
-A #允许所有
-D #删除所有
-a #认证指定的key
-d #删除指定的key
-r #注销掉指定key(该状态为未被认证)
在master端/etc/salt/master配置
auto_accept: True #如果对Minion信任,可以配置master自动接受请求
9.2 master 端命令
/usr/bin/salt #salt master 核心操作命令
/usr/bin/salt-cp #salt 文件传输命令
/usr/bin/salt-key #salt证书管理
/usr/bin/salt-master #salt master 服务命令
/usr/bin/salt-run #salt master runner命令
9.3 slave 端命令
/usr/bin/salt-call #拉取命令
/usr/bin/salt-minion #minion服务命令
9.4 salt
批量操作多台客户端需要使用到的命令以及命令格式,常见用法:
salt '*' # 指定对所有客户端主机进行操作
salt 'slave113' # 指定对单台客户端主机进行操作
salt 'slave11[23]' # 指定对多台客户端主机进行操作,支持通配
salt 'slave*' # 指定对多台客户端主机进行操作,支持通配
salt -E 'slave11(2|3)' # 以正则(pcre)的形式指定对多台客户端主机进行操作
salt -L 'slave112, slave113' # 以列表(list)的形式指定对多台客户端主机进行操作,中间用逗号隔开
salt -G 'os:CentOS' # 根据Grains信息对符合条件的客户端主机进行操作
salt -I 'role:nginx' # 根据Pillar信息对符合条件的客户端主机进行操作
salt -C 'E@^m or G@os:CentOS' # 以混合(compound)模式进行匹配,这里 E@^m 相当于 -E '^m', G@os:CentOS 相当于 -G 'os:CentOS'
salt -N <group_name> # 根据组名对一组主机进行操作,需要先在 /etc/salt/master 定义 nodegroups
常用执行模块
salt '*' test.ping # test.ping 用于测试是否存活
salt '*' pkg.install httpd # pkg.install 用于远程安装软件
salt '*' cmd.run 'hostname' # cmd.run 用于远程执行命令,这里表示远程执行hostname命令
salt '*' cmd.script salt://1.sh # cmd.script 用于远程执行脚本,这里表示远程执行1.sh脚本,这个脚本放在master的/srv/salt/1.sh路径下
salt '*' cp.get_file salt://1.txt /tmp/1.txt # cp.get_file 用于远程拷贝文件,这里表示拷贝master的/srv/salt/1.txt文件到远程的/tmp/1.txt文件
salt '*' cp.get_dir salt://test /tmp/test # cp.get_dir 用于远程拷贝目录,这里表示拷贝master的/srv/salt/test目录到远程的/tmp/test目录
salt '192.168.216.130' sys.doc # 查看所有模块的帮助文档
salt '192.168.216.130' sys.doc cmd # 查看指定模块的帮助文档
salt '192.168.216.130' sys.doc cmd.run # 查看指定模块下的具体方法的帮助文档
可以指定输出格式
salt --out=yaml '*' cmd.run 'date'
salt --out=grains '*' cmd.run 'date'
salt --out=json '*' cmd.run 'date'
# 其他可选的格式:grains, highstate, json, key, overstatestage, pprint, raw, txt, yaml
希望这篇文章能对你有帮助哦~