SaltStack--快速初学者
原创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 来完成所有的工作。
minion在第一次创业时,/etc/salt/pki/minion/下的自动生成minion.pem(private key)和minion.pub(public key), 然后将minion.pub发送给mastermaster在第一次启动时,它将进入。/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 参考: http://docs.saltstack.cn/topics/yaml/index.html
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目录,此参数指定缓存持续的时间。,在VIEWABLE之间执行的结果将占用磁盘空间。(默认为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)

版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除
itfan123





