SaltStack 部署及入门
SaltStack部署
saltstack 简介
Salt 是一个统一配置管理工具(与 puppet 功能相似)。可以批量远程执行命令、修改配置文件、部署软件、定时执行任务…… 总之,你能想到的,从远程对服务器执行的操作,它几乎都能做,而且可以批量对一批服务器做。
Salt 采用 master(server) - minion(client) 模式。具有很好的水平拓展性,以 “支持无限多个 client” 为设计目标。
总体架构
- Salt Master 控制中心。
- Salt Minion 装在被操作的服务器上。
- Grains 是每一台 Minion 自身的 静态 属性。以 Python 字典的形式存放在 Minion 端。
- Pillar 存放 key-value 变量。存放在 Master 端,由 Master 编译好后,下发给 Minion。所以,可以存放密码之类的涉密的或是一些需要统一配置的变量。
- State 希望由 Salt 执行的一套操作。(比如 “安装 vim、配置 vim” 可以写在一个 state 里,也可以拆成两个 state 写。)执行时,Master 将 states 生成好,下发给 Minion,由 Minion 执行 states (转化成一条条命令)。
1.安装epel包
For RHEL/CentOS 5
rpm -ivh http://mirrors.ustc.edu.cn/fedora/epel/5/x86_64/epel-release-5-4.norach.rpm
For RHEL/CentOS 6
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
2.master 服务器端
安装
yum install -y salt-master
配置
打开/etc/salt/master 主配置文件;添加如下配置
vim /etc/salt/master
interface: 10.133.33.85
auto_accept: True
开机启动
chkconfig salt-master on
查看服务器端开放的端口
netstat -lntup
# 4505
# 4506
3.客户端:
安装
yum install salt-minion
配置
minion端至少需要配置两项,id和master需要指定。
1.id: 这台主机的唯一标识! 就像mac地址一样!
2.master: 指定salt master的IP地址或域名!
==注意:注意冒号后面一定要有一个空格。==
$ vim /etc/salt/minion
#id: salt.client.id 不配置,默认为主机名称
master: 192.168.178.129
4.启动
启动master
service salt-master restart
启动minion
service salt-minion restart
其他启动方式
/usr/bin/python2.6 /usr/bin/salt-master -d
/usr/bin/python2.6 /usr/bin/salt-minion -d
master与minion的认证
master 主机执行
salt-key -L #查看所有主机
#没有接受的key会显示在Unaccepted Keys下
salt-key -A #接受所有主机
salt-key -D #删除所有主机
salt-key -a node1.salt.com #接受指定的主机
salt-key -d node1.salt.com #删除指定的主机
==一般情况下,master不会在配置文件中开启自动授权==
测试连通性
master 执行
salt '*' test.ping
node1.salt.com:
True
salt 基本说明及使用
基本说明
配置文件
/etc/salt/master #master 配置文件修改之后无需重启
/etc/salt/minion #minion 客户端配置文件,修改后需要重启
文件位置
State 文件 默认存放在 /srv/salt
Pillar 文件 默认存放在 /srv/pillar
基本使用
启动 Salt
# 根据自己需要,选择以下启动方式
salt-master
salt-master -d # daemonize the process
sudo service salt-master start # linux service
salt-master --log-level=debug
salt-minion
salt-minion -d # daemonize the process
sudo service salt-minion start # linux service
执行 Salt 命令
salt '<target>' <function> [arguments]
target
用来指定对哪些 minion 执行操作。可以匹配 minion id 或 Grains。
# 支持正则表达、列表以及 id/grains 混合。
# 普通 (按 minion-id 过滤)
salt '*.example.org' test.ping
# 正则表达 (regular expression)
salt -E 'virtmach[0-9]' test.ping
# 列表 (list)
salt -L 'foo,bar,baz,quo' test.ping
# 混合型 (combined)
salt -C 'G@os:Ubuntu and webser* or E@database.*' test.ping
| Letter | Match Type | Example |
| :----- | :----------------- | :---------------------------------- |
| G | Grains glob | G@os:Ubuntu |
| E | 正则匹配 Minion ID | E@web\d+\.(dev\|qa\|prod)\.loc |
| P | Grains 正则匹配 | P@os:(RedHat\|Fedora\|CentOS) |
| L | List of minions | L@minion1,minion3 or bl*.domain.com |
| I | Pillar glob | I@pdata:foobar |
| S | Subnet/IP address | S@192.168.1.0/24 or S@192.168.1.100 |
| R | Range cluster | R@%foo.bar |
function:
指定执行哪个命令模块(module)。
要习惯从下面这个 salt builtin execution modules 列表中寻找自己需要的,点进去看详细的命令参数。
http://docs.saltstack.com/en/latest/ref/modules/all/
常用的举例:
salt '*' test.ping
salt '*' cmd.run "ls -l | awk '/foo/{print \$2}'"
salt '*' state.sls xxx
arguments:
module 的参数。通过空格分隔,加在 function 后面。 比如:-l debug 输出 debug 信息
salt 命令参数:http://docs.saltstack.com/en/latest/ref/cli/salt.html
salt module 使用指南:http://docs.saltstack.cn/topics/tutorials/modules.html
salt builtin execution modules 列表: http://docs.saltstack.com/en/latest/ref/modules/all/
salt logging 指南:http://salt.readthedocs.org/en/latest/ref/configuration/logging/index.html
saltapi
123456
crt key 123456
作者:{微尘大海}(weichenddahai),日期:2016-6-17, email:784456305@qq.com