saltstack使用介绍
saltstack是什么
早期运维人员会根据自己的生产环境来写特定脚本完成大量重复性工作,这些脚本复杂且难以维护。系统管理员面临的问题主要是1、系统配置管理,2、远程执行命令,因此诞生了很多开源软件,系统维护方面有fabric、puppet、chef、ansible、saltstack等,这些软件擅长维护系统状态或方便的对大量主机进行批量的命令执行。
salt灵活性强大,可以进行大规模部署,也能进行小规模的系统部署。salt的设计架构适用于任意数量的服务器,从少量本地网络系统到跨越数个数据中心,拓扑架构都是c/s模型,配置简单。
不管是几台、几百台、几千台服务器,都可以使用salt在一个中心节点上进行管控,灵活定位任意服务器子集来运行命令。
安装saltstack
安装python依赖
pip3 install pyzmq pycryptodome msgpack pyyaml jinja2
安装saltstack软件
centos7通过储存库和密钥安装:官方文档
# 配置密钥和储存桶
sudo rpm --import https://repo.saltproject.io/salt/py3/redhat/7/x86_64/SALT-PROJECT-GPG-PUBKEY-2023.pub
curl -fsSL https://repo.saltproject.io/salt/py3/redhat/7/x86_64/3007.repo | sudo tee /etc/yum.repos.d/salt.repo
# 清除其他元数据
yum clean expire-cache
# 安装salt-master/salt-minion
# 管理主机安装 salt-master
# 被管理机器安装 salt-minion
sudo yum install salt-master
sudo yum install salt-minion
关闭系统防护策略
# 关闭防火墙
systemctl disable firewalld
systemctl stop firewalld
# 关闭iptables
iptables -F
# 关闭selinux
sestatus
# 放宽策略
setenforce 0
如果是云服务器,记得开放4505(publish_port 提供远程命令发送功能)和4506(ret_port 提供认证,文件服务,结果收集等功能)端口
saltstack部署
进行主salt和从salt配置
注意master和slave的配置都是yaml格式的文件。(注意yaml对格式要求很严格。不能缺少和增加空格)
ps: yaml文件格式
- 键值对:以键值对的形式:
key: value
(注意key和value之中有一个空格) - 列表:一组按次序排列的值。类似于list。
- list1
(注意空格) - 嵌套字典: 使用
key: \n
的形式,写个键、冒号、空格然后换行
给个例子
salt-master配置文件:
# master机器配置文件位置为/etc/salt/master
# 文件内容如下
#绑定到本地的0.0.0.0地址
interface: 0.0.0.0
# 远程命令发送端口
publish_port: 4505
# 执行salt的用户
user: root
# 认证端口
ret_port: 4506
pidfile: /var/run/salt-master.pid
worker_threads: 5
# 是否自动接受密钥
auto_accept: False
salt-slave配置文件:
# slave机器配置文件位置为/etc/salt/minion
# 文件内容如下
# 绑定的主机ip
master: saltmain
# 主机ip开放的接受端口
master_port: 4506
# 执行salt的用户
user: root
# 我的个人识别id
id: saltslave
acceptance_wait_time: 10
log_file: /var/log/salt/minion
设置dns伪解析
在/etc/hosts当中配置dns解析(方便不用写主机ip)
127.0.0.1 localhost
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.1.1 localhost.vm localhost
127.0.1.1 hcss-ecs-b72a hcss-ecs-b72a
# 加上最后两行解析的ip
124.71.140.179 saltslave
47.109.190.455 saltmain
重新分别启动salt-master和salt-minion
- 键入命令重新启动salt-master和salt-minion
systemctl restart salt-master
systemctl restart salt-minion
- 注意下,可以直接通过查看status看到这两个服务启动有没有报错
systemctl status salt-master
systemctl status salt-minion
saltstack统计服务器信息
salt密钥接受
在确定端口开放和配置没有问题之后,就可以进行这步了。
# 在master机器上运行
[root@saltmain ~]# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
saltslave # 在slave当中设置的id
Rejected Keys:
出现这个情况就是设备已经连接上了。这个时候其实就是接受到了原本机器的密钥
# 接受密钥
[root@saltmain ~]# salt-key -a saltslave
# 或者使用 -A 参数全部接受
salt-key -A
# 然后就可以看到这样的salt-key列表
[root@saltmain ~]# salt-key -L
Accepted Keys:
saltslave
Denied Keys:
Unaccepted Keys:
Rejected Keys:
# 参数描述
[root@linux-node1 ~]# 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(该状态为未被认证)
ps.在接受密钥之前,也可以查看收到的密钥是否和slave机器中匹配
# 宿主机
[root@saltmain ~]# salt-key -f saltslave
Accepted Keys:
saltslave: c9:66:e4:d2:b4:4b:4d:19:b5:c2:9a:0e:81:6c:9b:da:9b:1f:15:b5:30:12:a7:97:40:02:a9:db:fd:ce:9a:bb
# 从属机
root@saltslave1:~# salt-call --local key.finger
local:
c9:66:e4:d2:b4:4b:4d:19:b5:c2:9a:0e:81:6c:9b:da:9b:1f:15:b5:30:12:a7:97:40:02:a9:db:fd:ce:9a:bb
salt命令介绍
这里介绍一些简单命令,有需要可以查看某些大佬的模块合集:掘金
# 万能命令 cmd模块的run命令去执行命令行
salt '*' cmd.run 'ls /opt/' # 在所有的子机器当中执行ls /opt/
# 运行并显示运行概要(--summary)
salt --summary '*' cmd.run 'hostname'
# 测试机器是否联通
salt '*' test.ping
# 测试echo命令
salt '*' test.echo 'chaoge nb666'
# 查看所有模块
salt '*' sys.list_modules
# 查看test模块的所有函数(同样的也可以查看cmd模块等等)
salt '*' sys.list_functions test
# 安装包(例如nginx)
salt 'slave' pkg.install "nginx"
# 卸载包
salt 'slave' pkg.remove "nginx"
# 查看包版本
salt 'slave' pkg.version "nginx"
# 启动服务
salt 'slave' service.start "nginx"
# 查看服务状态
salt 'slave' service.status "nginx"
# 停止服务
salt 'slave' service.stop "nginx"
# --out 控制输出结果
[root@saltmain ~]# salt --out=json '*' cmd.run_all 'hostname'
{
"saltslave": {
"pid": 158105,
"retcode": 0,
"stdout": "saltslave1",
"stderr": ""
}
}
[root@saltmain ~]# salt --out=yaml '*' cmd.run_all 'hostname'
saltslave:
pid: 158112
retcode: 0
stderr: ''
stdout: saltslave1
ps.注意,通过salt执行命令时,linux是不会登录的。这样的话PATH一般都处于初始状态
[root@saltmain ~]# salt '*' cmd.run "echo $PATH"
saltslave:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
如果要检查或使用其他位置的服务。就使用绝对路径。
标签:slave,Keys,root,介绍,master,key,使用,saltstack,salt From: https://www.cnblogs.com/lmlsh/p/18399089