SaltStack管理工具
什么是SaltStack管理工具?
saltstack跟ansible一样是款自动化运维管理工具,但是ansible无需安装客户端,这是其最大的优势,而saltstack则需要安装客户端工具,应用场景方面,ansible常用于小型企业,而saltstack则常用于中大型企业,因为ansible无法并发执行任务而saltstack可以并发执行任务Saltstack特点:
- 基于python开发的C/S架构配置管理工具
- 底层使用ZeroMQ消息队列pub/sub方式通信
- 使用SSL证书签发的方式进行认证管理,传输采用AES加密
Saltstack服务架构:
在saltstack架构中服务器端叫Master,客户端叫Minion。
在Master和Minion端都是以守护进程的模式运行,一直监听配置文件里面定义的ret_port(接受minion请求)和publish_port(发布消息)的端口。
当Minion运行时会自动连接到配置文件里面定义的Master地址ret_port端口进行连接认证。
saltstack除了传统的C/S架构外,其实还有一种叫做masterless的架构,其不需要单独安装一台 master 服务器,只需要在每台机器上安装 Minion端,然后采用本机只负责对本机的配置管理机制服务的模式
官网地址:https://www.saltstack.com/
一、安装配置Saltstack
注意:Saltstack版本和python版本的兼容性
1.获取下载源(所有端)
具体参考网站:https://repo.saltproject.io
CentOS7:
rpm --import https://repo.saltproject.io/py3/redhat/7/x86_64/latest/SALTSTACK-GPG-KEY.pub
curl -fsSL https://repo.saltproject.io/py3/redhat/7/x86_64/latest.repo |tee /etc/yum.repos.d/salt.repo
Ubuntu18(BIONIC)PY3:
curl -fsSL -o /usr/share/keyrings/salt-archive-keyring.gpg https://repo.saltproject.io/py3/ubuntu/18.04/amd64/latest/salt-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/salt-archive-keyring.gpg arch=amd64] https://repo.saltproject.io/py3/ubuntu/18.04/amd64/latest bionic main" |tee /etc/apt/sources.list.d/salt.list
2.Master控制端服务器安装配置(控制端)
yum -y install salt-master
3.master修改配置文件(控制端)
vim /etc/salt/master
-------------------------------------
#监控地址
interface: 0.0.0.0
#管理端口,命令发送
publish_port: 4505
#运行salt进程的用户
user: root
#salt运行线程数,线程越多处理速度越快,不要超过cpu个数
worker_threads: 5
#执行结果返回端口
ret_port: 4506
#pid文件位置
pidfile: /var/run/salt-master.pid
#日志文件地址
log_file: /var/log/salt/master.log
#确认证书信任
auto_accept: True
file_roots:
base:
- /srv/salt
#开启pillar功能
pillar_opts: Ture
pillar_roots:
base:
- /srv/pillar
#添加管理的主机名分组
nodegroups:
group1: '192.168.31.102'
group2: '192.168.31.103'
4.创建配置文件中对应的目录(控制端)
mkdir /srv/salt
mkdir /srv/pillar
5.启动master服务(控制端)
systemctl start salt-master
6.安装salt-minion软件(被控制端)
yum install -y salt-minion
7.Minion修改配置文件(被控制端)
vim /etc/salt/minion
-------------------------------
master: 192.168.31.101
master_port: 4506
user: root
id: 192.168.31.102
acceptance_wait_time: 10
log_file: /var/log/salt/minion
8.两台Minion启动服务(被控制端)
systemctl start salt-minion
9.测试服务端和客户端的通信状况:
salt '*' test.ping
salt-key命令用于管理mionion秘钥:
在master机器上,查看minion的密钥信息
查看所有密钥:salt-key -L
单独接受一个密钥信息:salt-key -a 192.168.31.102
接受所有的key信息:salt-key -A
#常用参数
-L:查看KEY状态
-A:允许所有
-a:认证指定的key
-D:删除所有key
-d:删除指定的key
-R:拒绝所有等待认证的key
-r:拒绝掉指定key(该状态为未被认证)
-F:显示所有key信息
-f:显示指定key信息
二、SaltStack使用
SaltStack常用模块命令格式
基础命令选项
–version : 查看saltstack软件的版本号。
–versions-report : 查看saltstack软件以及依赖包的版本号。
-h, --help : 查看帮助信息。
–saltfile=SALTFILE:指定saltfile的路径。 如果没有通过,将在当前工作目录中搜索一个
-c CONFIG_DIR, --config-dir=CONFIG_DIR:指定配置文件的目录(默认是/etc/salt/)
-t TIMEOUT, --timeout=TIMEOUT:指定超时时间默认是5秒
–hard-crash:捕捉到original异常不退出默认关闭
-s, --static:以组的形式返回所有minion的数据
-p, --progress:显示进度图,需要progressbar的python包
–failhard :在第一个执行错误返回之后停止批处理
–async : 异步执行
–subset=SUBSET : 对目标minions的随机子集执行程序. minions在执行前会先验证是否存在该命名的函数,再去执行
-v, --verbose : 打开命令详细,显示jid和活动的工作查询
–hide-timeout : 隐藏超时时间
–show-jid : 显示任务的jid
-b BATCH, --batch=BATCH, --batch-size=BATC : 按照百分比执行任务
-a EAUTH, --auth=EAUTH, --eauth=EAUTH, --external-auth=EAUTH : 指定外部认证方式
-T, --make-token : 生成master token
–return=RETURNER : 设置一种替代方法。 默认情况下,salt将从命令将返回数据发送回主服务器,但返回数据可以重定向到任意数量的系统,数据库或应用程序
–return_config=RETURNER_CONF : 指定命令返回的设置文件
-d, --doc, --documentation : 查看指定模式或所有模块文档
–args-separator=ARGS_SEPARATOR : 指定发送命令跟命令参数的分隔符,当用户想把一个命令当作参数发送给另一个命令执行时
–summary : 显示汇总信息
–username=USERNAME : 指定外部认证的用户名
–password=PASSWORD : 指定外部认证的密码
–metadata=METADATA : 将元数据传递给Salt,用于搜索作业
Logging Options(日志相关参数):
-l LOG_LEVEL, --log-level=LOG_LEVEL : 指定日志级别
–log-file=LOG_FILE : 指定日志记录文件
–log-file-level=LOG_LEVEL_LOGFILE : 日志文件日志记录级别。‘all’, ‘garbage’, ‘trace’, ‘debug’, ‘info’, ‘warning’, ‘error’,‘critical’, ‘quiet’. 默认: ‘warning’
Target Options(目标选择选项):
-E, --pcre : 正则匹配
-L, --list: 列表匹配,目标表达式将被解释为以逗号分隔的列表
-G, --grain: grains匹配
–grain-pcre :grains加正则匹配
-N, --nodegroup:组匹配
-R, --range:范围匹配
-C, --compound : 综合匹配(指定多个匹配,空格隔开)
-I, --pillar : pillar值匹配。
-J, --pillar-pcre : pillar加正则匹配
-S, --ipcidr : minions网段地址匹配
Output Options(输出参数):
–out=OUTPUT, --output=OUTPUT : 使用指定的输出器从’salt’命令打印输出。 内置的是 ‘key’, ‘yaml’, ‘overstatestage’, ‘newline_values_only’, ‘pprint’, ‘txt’, ‘raw’, ‘virt_query’, ‘compact’, ‘json’, ‘highstate’, ‘nested’, ‘quiet’, ‘no_return’
–out-indent=OUTPUT_INDENT, --output-indent=OUTPUT_INDENT : 在空格中打印由提供的值缩进的输出。 负值禁用缩进。 仅适用于支持缩进的输出器
–out-file=OUTPUT_FILE, --output-file=OUTPUT_FILE : 输出到指定文件
–out-file-append, --output-file-append : 输出附加到指定的文件
–no-color, --no-colour : 关闭所有的颜色显示
–force-color, --force-colour : 强制输出颜色显示
SaltStack常用模块
1.test模块
实现远程的命令和脚本调用执行
salt '*' test.ping
salt '*' test.echo
salt '*' test.sleep
salt '*' test.version
2.cmd模块
实现远程的命令和脚本调用执行
salt '*' cmd.run 'date'
salt '*' cmd.script 'test.sh'
salt '*' cmd.shell 'ls |grep tomcat'
salt '*' cmd.which ifconfig
3.user模块
用户管理和操作
在minion端上创建一个用户。后面的参数为 <uid> <gid> <groups> <home> <shell>
salt '*' user.add test 610 605 test /home/test /bin/bash
salt '*' user.delete test
#返回用户信息
salt '*' user.info test
4.group模块
用户组管理和操作
在minion端上创建一个用户。后面的参数为 <uid> <gid> <groups> <home> <shell>
salt '*' group.add test
salt '*' group.delete test
#返回用户组信息
salt '*' group.info test
将用户添加到用户组和将用户从用户组中移除。参数为<用户><用户组>
salt '*' group.adduser test test
salt '*' group.deluser test test
5.file模块
常见文件的操作
#修改所有被控主机/etc/passwd文件的属组、用户权限、等价于chown root:root /etc/passwd
salt '*' file.chown /etc/passwd root root
#复制所有被控主机/path/to/src文件到本地的/path/to/dst文件
salt '*' file.copy /path/to/src /path/to/dst
#检查所有被控主机/etc目录是否存在,存在则返回True,检查文件是否存在使用file.file_exists方法
salt '*' file.directory_exists /etc
#获取所有被控主机/etc/passwd的stats信息
salt '*' file.stats /etc/passwd
#获取所有被控主机/etc/passwd的权限mode,如755,644
salt '*' file.get_mode /etc/passwd
#修改所有被控主机/etc/passwd的权限mode为0644
salt '*' file.set_mode /etc/passwd 0644
#在所有被控主机创建/opt/test目录
salt '*' file.mkdir /opt/test
#将所有被控主机/etc/httpd/httpd.conf文件的LogLevel参数的warn值修改为info
salt '*' file.sed /etc/httpd/httpd.conf 'LogLevel warn' 'LogLevel info'
#给所有被控主机的/tmp/test/test.conf文件追加内容‘maxclient 100’
salt '*' file.append /tmp/test/test.conf 'maxclient 100'
#删除所有被控主机的/tmp/foo文件
salt '*' file.remove /tmp/foo
6.cp模块
实现远程文件、目录的复制,以及下载URL文件等操作
#将被控主机的/etc/hosts文件复制到被控主机本地的salt cache目录(/var/cache/salt/minion/localfiles/)
salt '*' cp.cache_local_file /etc/hosts
#将主控端file_roots指定位置下的目录复制到被控主机/minion/目录下
salt '*' cp.get_dir salt://script/ /test/
#将主控端file_roots指定位置下的文件复制到被控主机/test/test.sh文件(file为文件名)
salt '*' cp.get_file salt://script/test.sh /test/test.sh
#下载URL内容到被控主机指定位置(/tmp/index.html)
salt '*' cp.get_url http://www.slashdot.ort /tmp/index.html
7.Archive模块
实现系统层面的压缩包调用,支持gzip、gunzip、rar、tar、unrar、unzip等
salt '*' archive.unzip test.zip
salt '*' archive.tar zxf test.tar.gz
8. pkg模块
程序包管理,如:yum、apt-get
salt '*' pkg.install "nginx"
salt '*' pkg.remove "nginx"
salt '*' pkg.version "nginx"
9. service服务模块
程序包服务管理
salt '*' service.start "nginx"
salt '*' service.stop "nginx"
salt '*' service.restart "nginx"
salt '*' service.status "nginx"
10. cron模块
任务管理
#查看cron任务
salt '*' cron.raw_cron root
#编辑任务
salt -N 'group1' cron.set_job root '30' '5' '*' '*' '*' '/script/test.sh'