saltstalk 安装和使用
saltstack
文章参考链接 https://www.cnblogs.com/yanjieli/p/10864648.html
saltstack 简介
saltstack是什么?
Salt是一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯。salt底层采用动态的连接总线, 使其可以用于编配, 远程执行, 配置管理等等.
saltstack原理
Salt master主要负责向Salt minions发送命令,然后聚合并显示这些命令的结果。一个Salt master可以管理多个minion系统
Salt server与Salt minion通信的连接由Salt minion发起,这也意味着Salt minion上不需要打开任何传入端口(从而减少攻击)。Salt server使用端口4505和4506,必须打开端口才能接收到访问连接
salt的master会监听端口4505和4506,4505是salt用来发布信息的;4506是用来为salt客户端与服务端通信的端口监听返回数据。minion端不监听端口,在minion启动后会自动与master通过注册连接,通过后一直保持连接
salt的认证方式
Salt 的数据传输是通过 AES 加密,Master 和 Minion 之前在通信之前,需要进行认证。
Salt 通过认证的方式保证安全性,完成一次认证后,Master 就可以控制 Minion 来完成各项工作了.
1. minion 在第一次启动时候,会在 /etc/salt/pki/minion/ 下自动生成 minion.pem(private key) 和 minion.pub(public key),
然后将 minion.pub 发送给 master
2.master 在第一次启动时,会在 /etc/salt/pki/master/ 下自动生成 master.pem 和 master.pub ;并且会接收到 minion 的 public key ,
通过 salt-key 命令接收 minion public key, 会在 master 的 /etc/salt/pki/master/minions目录下存放以 minion id 命令的 public key ;
验证成功后同时 minion 会保存一份 master public key 在 minion 的 /etc/salt/pki/minion/minion_master.pub里。
saltstack安装
yum安装
1.管理断安装salt-master
$ yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest.el7.noarch.rpm (官方)
$ yum -y install https://mirrors.aliyun.com/saltstack/yum/redhat/salt-repo-latest-2.el7.noarch.rpm (阿里云-推荐)
$ yum -y install salt-master
$ systemctl enable salt-master
$ systemctl start salt-master
2.客户端安装salt-minion
$ yum -y install salt-minion
$ cp /etc/salt/minion{,.back}
$ sed -i '/#master: /c\master: salt-master' /etc/salt/minion (salt-master是管理端的ip或者主机名)
$ systemctl enable salt-minion
$ systemctl start salt-minion
saltstack使用
#salt-master端
[root@vm_225 ~]# salt-key # 查看相关的key
Accepted Keys: # 已经接受的key
Denied Keys: # 已经拒绝的key
Unaccepted Keys: # 还未接受的key
vm_224
Rejected Keys: # 已经拒绝的key
# 常用参数
-L #查看KEY状态
-A #允许所有
-D #删除所有
-a #认证指定的key
-d #删除指定的key
-r #注销掉指定key(该状态为未被认证)
# 添加所有的key
salt-key -A -y
# 添加指定的key
salt-key -a key_name -y
#如果觉得每次都需要手动去接受key麻烦,可以在master端配置自动接收key
#配置master自动接受请求认证(master上配置 /etc/salt/master)
auto_accept: True
salt的远程执行
#1.判断远程主机是否存活
[root@vm_225 ~]# salt '*' test.ping
vm_224:
True #存活的标志True/False
* 表示目标主机,这里表示所有目标主机
test.ping test是saltstack中的一个模块,ping则是这个模块下面的一个方法
#2. 远程执行shell命令
格式: salt 'key_name' cmd.run 'uptime'
例子
[root@vm_225 ~]# salt 'vm_224' cmd.run 'uptime'
vm_224:
15:11:23 up 32 days, 3:19, 3 users, load average: 0.18, 0.17, 0.26
[root@vm_225 ~]# salt 'vm_224' cmd.run 'echo ${HOSTNAME}'
vm_224:
vm_224
saltstack配置管理
salt通过state模块来进行文件的管理;通过yml语法来描述,后缀格式为.sls
remove vim:
pkg.removed:
- name: vim
如上所示,在yml语法中,使用缩进来表示层级关系,不建议使用tab键来缩进,除非你的编辑器设置了tab键为输入空格.
设置vim的tab键为空格的方式
set ts=4 #4个空格
set softtabstop=4
set shiftwidth=4
set expandtab
ts 表示一个 tab 显示出来是多少个空格的长度,默认 8
softtabstop 表示在编辑模式的时候按退格键的时候退回缩进的长度,当使用 expandtab时特别有用
shiftwidth 表示每一级缩进的长度,一般设置成跟 softtabstop 一样
当设置成 expandtab 时,缩进用空格来表示,noexpandtab 则是用制表符表示一个缩进
实战编写
#1. 定义环境目录
在salt-master上的master配置文件中找到
# file_roots:
# base: #salt安装软件的默认环境
# - /srv/salt/
# dev: #可以指定的环境目录
# - /srv/salt/dev/services
# - /srv/salt/dev/states
# prod: #可以指定的环境目录
# - /srv/salt/prod/services
# - /srv/salt/prod/states
#
#file_roots:
# base:
# - /srv/salt
# 创建上面的环境目录
mkdir /srv/salt/{dev,prod}/{services,states} -p
systemctl restart salt-master
#2. 实战编写
[root@localhost ~]$ cat /srv/salt/top.sls # 编辑入口配置文件,文件名固定为top.sls
base: # 指定使用哪个环境
'*': # 指定针对哪些主机进行操作
- httpd # 指定加载哪些sls文件
salt '*' state.highstate 会直接找到top文件入口去执行相关的操作.
[root@localhost ~]$ cat /srv/salt/httpd.sls # 定义httpd.sls文件,以便让入口配置文件加载
httpd-service: # httpd-service 只是一个ID,方便我们查看
pkg.installed: # pkg.installed 是一个包安装函数,- name 用来指定要安装的包的名字
- names: # service.running 也是一个函数,用来指定启动哪些服务,并设置开机启动
- httpd
- httpd-devel
service.running:
- name: httpd
- enable: True