SaltStack--快速入门
saltstack快速入门
saltstack介绍
salt,一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯
主要功能
远程执行
配置管理
stalstack官方文档
saltstack原理
salt
使用server-agent
通信模型,服务端组件被称为salt master
,agent
被称为salt minion
salt master
主要负责向salt minions
发送命令,然后聚合并显示这些命令的结果。一个salt master
可以管理多个minion
系统salt server
与salt minion
通信的连接由salt minion
发起,这也意味着salt minion
上不需要打开任何传入端口(从而减少攻击)。salt server
使用端口4505
和4506
,必须打开端口才能接收到访问连接
-
publisher (端口4505)所有
salt minions
都需要建立一个持续连接到他们收听消息的发布者端口。命令是通过此端口异步发送给所有连接,这使命令可以在大量系统上同时执行。
-
request server (端口4506)
salt minios
根据需要连接到请求服务器,将结果发送给salt master
,并安全地获取请求的文件或特定minion
相关的数据值(称为salt pillar
)。连接到这个端口的连接在salt master
和salt minion
之间是1:1(不是异步)。
[root@salt-master ~]# lsof -i:4505 command pid user fd type device size/off node name salt-mast 81121 root 16u ipv4 304019 0t0 tcp *:4505 (listen) salt-mast 81121 root 18u ipv4 304082 0t0 tcp salt-master:4505->salt-minion03:37240 (established) salt-mast 81121 root 19u ipv4 307610 0t0 tcp salt-master:4505->salt-minion01:47804 (established) salt-mast 81121 root 20u ipv4 307611 0t0 tcp salt-master:4505->salt-minion02:58594 (established)
快速安装
1.1 配置 yum 仓库
# 使用官方自带yum [root@salt-master ~]# yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest.el7.noarch.rpm # 或者使用阿里云的yum(建议使用阿里云的,速度快一点) [root@salt-master ~]# yum -y install https://mirrors.aliyun.com/saltstack/yum/redhat/salt-repo-latest-2.el7.noarch.rpm [root@salt-master ~]# sed -i "s/repo.saltstack.com/mirrors.aliyun.com\/saltstack/g" /etc/yum.repos.d/salt-latest.repo [root@salt-master ~]# yum clean all [root@salt-master ~]# yum makecache
1.2 安装master,并启动服务
[root@salt-master ~]# yum -y install salt-master [root@salt-master ~]# systemctl enable salt-master [root@salt-master ~]# systemctl start salt-master
1.3 安装 salt-minion 指向 salt-master 网络地址
[root@salt-minion01 ~]# yum -y install salt-minion # 可以使用主机名,也可以使用ip地址 [root@salt-minion01 ~]# cp /etc/salt/minion{,.back} [root@salt-minion01 ~]# sed -i '/#master: /c\master: salt-master' /etc/salt/minion [root@salt-minion01 ~]# systemctl enable salt-minion [root@salt-minion01 ~]# systemctl start salt-minion
saltstack认证方式
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
里。
salt认证原理总结
minion将自己的公钥发送给master master认证后再将自己的公钥也发送给minion端
master端认证示例
1)根据上面提到的认证原理,先看下未认证前的master
和minion
的pki
目录
# master上查看 [root@salt-master ~]# tree /etc/salt/pki/ /etc/salt/pki/ ├── master │ ├── master.pem │ ├── master.pub │ ├── minions │ ├── minions_autosign │ ├── minions_denied │ ├── minions_pre │ │ └── salt-minion01 │ └── minions_rejected └── minion # minion上查看 [root@salt-minion01 ~]# tree /etc/salt/pki/ /etc/salt/pki/ ├── master └── minion ├── minion.pem └── minion.pub
2)salt-key
命令解释:
[root@salt-master ~]# 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自动接受请求认证(master上配置 /etc/salt/master) auto_accept: true
3)salt-key
认证
#列出当前所有的key [root@salt-master ~]# salt-key -l accepted keys: denied keys: unaccepted keys: salt-minion01 rejected keys: #添加指定minion的key [root@salt-master ~]# salt-key -a salt-minion01 -y the following keys are going to be accepted: unaccepted keys: salt-minion01 key for minion salt-minion01 accepted. #添加所有minion的key [root@salt-master ~]# salt-key -a -y [root@salt-master ~]# salt-key -l accepted keys: salt-minion01 denied keys: unaccepted keys: rejected keys:
4)上面认证完成后再次查看master
和minion
的pki
目录
# master上 [root@salt-master ~]# tree /etc/salt/pki/ /etc/salt/pki/ ├── master │ ├── master.pem │ ├── master.pub │ ├── minions │ │ └── salt-minion01 │ ├── minions_autosign │ ├── minions_denied │ ├── minions_pre │ └── minions_rejected └── minion # minion上 [root@salt-minion01 ~]# tree /etc/salt/pki/ /etc/salt/pki/ ├── master └── minion ├── minion_master.pub ├── minion.pem └── minion.pub
saltstack远程执行
远程执行是 saltstack
的核心功能之一。主要使用 salt
模块批量给选定的 minion
端执行相应的命令,并获得返回结果。
1、判断 salt
的 minion
主机是否存活
[root@salt-master ~]# salt '*' test.ping salt-minion02: true salt-minion03: true salt-minion01: true # salt saltstack自带的一个命令 # * 表示目标主机,这里表示所有目标主机 # test.ping test是saltstack中的一个模块,ping则是这个模块下面的一个方法
2、saltstack
使用 cmd.run
模块远程执行shell命令
#在指定目标minion节点运行uptime命令 [root@salt-master ~]# salt 'salt-minion02' cmd.run 'uptime' salt-minion02: 18:13:08 up 28 min, 2 users, load average: 0.00, 0.04, 0.13
saltstack配置管理
salt
通过state
模块来进行文件的管理;通过yaml
语法来描述,后缀是.sls
的文件
1、了解 yaml
参考:
remove vim: pkg.removed: - name: vim
- 带有id和每个函数调用的行都以冒号(:)结束。
- 每个函数调用在id下面缩进两个空格。
- 参数作为列表传递给每个函数。
- 每行包含函数参数的行都以两个空格缩进开头,然后是连字符,然后是一个额外的空格。
- 如果参数采用单个值,则名称和值位于由冒号和空格分隔的同一行中。
- 如果一个参数需要一个列表,则列表从下一行开始,并缩进两个空格
2、配置sals
,定义环境 参考文档
# 定义环境目录 [root@salt-master ~]# vim /etc/salt/master file_roots: base: - /srv/salt/base dev: - /srv/salt/dev prod: - /srv/salt/prod # 创建上面定义的目录 [root@salt-master ~]# mkdir -p /srv/salt/{base,dev,prod} # 重启服务 [root@salt-master ~]# systemctl restart salt-master
3、编写第一个sls
文件
# 在base环境下编写第一个安装apache的sls文件 [root@salt-master ~]# cd /srv/salt/base/ [root@salt-master base]# cat apache.sls apache-install: pkg.installed: - name: httpd apache-service: service.running: - name: httpd - enable: true # 在dev环境下编写一个安装ftp的sls文件 [root@salt-master base]# cd /srv/salt/dev/ [root@salt-master dev]# cat vsftpd.sls vsftpd-install: pkg.installed: - name: vsftpd vsftpd-service: service.running: - name: vsftpd - enable: true
4、使用salt
命令的state
状态模块让minion
应用配置
# 让所有的minion都安装apache(由于salt默认的环境就是base,所以可以直接在后面指定调用的apache.sls文件,不要后缀sls) [root@salt-master ~]# salt '*' state.sls apache # 让所有的minion都安装vsftpd(saltenv指定环境) [root@salt-master ~]# salt '*' state.sls vsftpd saltenv=dev
5、使用salt
的高级状态使不同主机应用不同的配置
# topfile入口文件只能放在base环境 [root@salt-master ~]# cat /srv/salt/base/top.sls base: 'salt-minion01': - apache 'salt-minion03': - apache dev: 'salt-minion02': - vsftpd 'salt-minion03': - vsftpd
6、使用salt
命令执行高级状态,会将top.sls
当做入口文件,进行调用
# 将高级状态应用到所有主机 [root@salt-master ~]# salt '*' state.highstate
saltstack常用配置
1、salt master配置salt master
端的配置文件/etc/salt/master
,常用配置如下:
interface: //指定bind 的地址(默认为0.0.0.0) publish_port: //指定发布端口(默认为4505) ret_port: //指定结果返回端口, 与minion配置文件中的master_port对应(默认为4506) user: //指定master进程的运行用户,如果调整, 则需要调整部分目录的权限(默认为root) timeout: //指定timeout时间, 如果minion规模庞大或网络状况不好,建议增大该值(默认5s) keep_jobs: //minion执行结果返回master, master会缓存到本地的cachedir目录,该参数指定缓存多长时间,可查看之间执行结果会占用磁盘空间(默认为24h) job_cache: //master是否缓存执行结果,如果规模庞大(超过5000台),建议使用其他方式来存储jobs,关闭本选项(默认为true) file_recv : //是否允许minion传送文件到master 上(默认是flase) file_roots: //指定file server目录, 默认为: file_roots: base: - /srv/salt pillar_roots : //指定pillar 目录, 默认为: pillar_roots: base: - /srv/pillar log_level: //日志级别 支持的日志级别有'garbage', 'trace', 'debug', info', 'warning', 'error', ‘critical ’ ( 默认为’warning’)
2、salt minion
端的配置文件/etc/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) 时, 如果文件发送变更,指定备份目录.当前有效 providers : //指定模块对应的providers, 如在rhel系列中, pkg对应的providers 是yumpkg5 renderer: //指定配置管理系统中的渲染器(默认值为:yaml_jinja ) file_client : //指定file clinet 默认去哪里(remote 或local) 寻找文件(默认值为remote) loglevel: //指定日志级别(默认为warning) tcp_keepalive : //minion 是否与master 保持keepalive 检查, zeromq3(默认为true)