我的学习方法是以官方文档为准,并借鉴网友的文档,多做实验、多敲代码,整个框架流程熟悉之后再结合自己的需求来定制。
关于Saltstack的介绍,简单一句话:整合了Puppet和 Chef的功能,更加强大,更适合大规模批量管理服务器。
一、基础概念
Saltstack基于C/S架构,服务端master和客户端minions
二、安装:
准备工作:
1.安装EPEL: rpm -ivh http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
如果不行,添加下面的yum源
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
yum makecache
2.设置域名hosts文件#(当然可以直接使用IP)
cat /etc/hosts
192.168.2.81 test81.salt.cn
192.168.2.82 test82.salt.cn
192.168.2.83 test83.salt.cn
Master:192.168.2.81
Minion:192.168.2.82,192.168.2.83
Master端:
yum install salt-master
配置文件:/etc/salt/master
端口:
4505(publish_port):salt 的消息发布系统
4506(ret_port):salt 客户端与服务端通信的端口
启动:
/etc/init.d/salt-master start
netstat -lntup |grep 45*
Minion端:
yum install salt-minion
配置文件:/etc/salt/minion
master: 服务端主机名
id: 客户端主机名
配置文件注意格式统一
注意冒号: 后有一个空格
master: test81.salt.cn
id: test82.salt.cn
启动服务:
/etc/init.d/salt-minion start
三、认证
和puppet一样, salt 的 master 和 minions 是通过证书通信的,故存在证书的信任颁发问题。
在master端:salt-key -L 查看当前需要接受的keys(master和minions都需要把服务开启)
salt-key -a test82.salt.cn 接受test82.kktalk.cn的证书
salt-key -A #接受所有请求的证书
如果对客户端信任,可以让master自动接受请求,在master端/etc/salt/master配置
auto_accept: True
检测Master与两个Minion通讯是否正常: salt "test82.salt.cn" test.ping
出现 True 说明服务端到客户端通信正常,基础环境搭建成功。
四、简单例子
在minions端安装软件
配置 /etc/salt/master文件:
#file_roots Saltstack相关配置文件全部都在这个目录下
file_roots:
base:
- /srv/salt
dev:
- /srv/salt/dev
默认没有这个目录,需要创建 创建目录mkdir -p /srv/salt
Saltstack必须要有入口文件: /srv/salt/top.sls
Saltstack使用salt state system,它的核心是写sls(SaLt State file)文件,sls文件默认格式是YAML格式(以后会支持XML),并默认使用jinja模板,YAML与XML类似,是一种简单的适合用来传输数据的格式,而jinja是根据django的模板语言发展而来的语言,简单并强大,支持for if 等循环判断。salt state主要用来描述系统,软性,服务,配置文件应该出于的状态,常常被称为配置管理!
通常state,pillar,top file会用sls文件来编写。state文件默认是放在/srv/salt中,它与你的master配置文件中的file_roots设置有关
注意:sls遵从YAML规范, 它使用到两个空格代替tab,: 或 � 后面要有空格。(这里被坑过)
[root@test81 salt]# cat top.sls
base: #file_roots定义base
'*': #匹配所有主机
- dev.http #这里调用/srv/salt/dev/目录下面的http.sls文件
安装wget
1, #vi /srv/salt/top.sls
base:
'*':
- dev.wget
2, #vi /srv/salt/dev/wget.sls
http:
pkg:
- name: wget
- installed
#salt "saltminion" state.highstate
#netstat -lntup |grep wget
安装httpd
sls文件写好以后,在master执行命令 salt “test82.salt.cn” state.highstate
出现Failed:0,表示执行成功(我上图是已经执行成功过,再次执行)
在minions查看
[root@test82 ~]# rpm -qa|grep httpd
httpd-2.2.15-29.el6.centos.x86_64
httpd-tools-2.2.15-29.el6.centos.x86_64
httpd包已经安装成功
如果要在minions端执行,需要执行命令: salt-call state.highstate