saltstack

saltstack

1. 简介

​ saltstack 是由 thomas Hatch 于 2011 年创建的一个开源项目,设计初衷是为了实现一个快速的远程执行系统

2. saltstack 功能

​ saltstack 灵活性强大,可以进行大规模部署,也能进行小规模的系统部署,saltstack 的设计架构适用于任意数量的服务器,从少量本地网络系统到跨越数个数据中心,拓扑架构都是 c/s 模型,配置简单

​ 不管是几台、几百台、几千台服务器,都可以使用 saltstack 在一个中心节点上进行管控,灵活定位任意服务器子集来运行命令

​ saltstack 是 python 编写的,支持用户通过 python 自定义功能模块,也提供了大量的 python API 接口,用户可以根据需要进行简单快速的扩展

3. saltstack 运行方式

  1. local:本地运行,交付管理
  2. master/minion:常用方式
  3. salt ssh:不需要客户端

4. saltstack 部署架构

在安装 salt 之前,先理解salt架构中各个角色,主要区分是 salt-master 和 salt-minion,顾名思义 master 是中心控制系统,minion 是被管理的客户端。

salt 架构中的一种就是 master > minion

img

​ 在远程执行系统中,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/minionmaster:修改成 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
posted @ 2021-04-30 10:40  -桃枝夭夭-  阅读(132)  评论(0编辑  收藏  举报