您的位置:首页 > 运维架构

运维自动化之:Saltstack配置管理工具安装配置使用攻略

2014-09-11 15:42 1036 查看
系统环境:
Centos 6.x
服务端(salt-master):10.1.2.11
客户端(salt-minion):10.1.2.10、10.1.2.11、10.1.2.12

安装:

rpm -Uvh http://ftp.linux.ncsu.edu/pub/epel/6/i386/epel-release-6-8.noarch.rpm 服务端:yum install salt-master
客户端:yum install salt-minion
服务端配置:

vim /etc/salt/master
interface: 0.0.0.0
pidfile: /var/run/salt-master.pid
log_file: /var/log/salt/master
key_logfile: /var/log/salt/key
客户端配置:
vim  /etc/salt/minion
master: 10.1.2.11
pidfile: /var/run/salt-minion.pid
id: centos12
log_file: /var/log/salt/minion
key_logfile: /var/log/salt/key


如果一切顺利,请继续!
saltstack 主控端是依靠openssl证书来与受控端主机认证通讯的,受控端启动后会发送给主控端一个公钥证书文件,在主控端用 salt-key 命令来管理证书。

salt minion和master的认证过程:
minion在第一次启动时,会在/etc/salt/pki/minion/下自动生成minion.pem(private key), minion.pub(public key),然后将minion.pub发送给master
master在接收到minion的public key后,通过salt-key命令accept minion public key,这样在master的/etc/salt/pki/master/minions下的将会存放以minion id命名的public key, 然后master就能对minion发送指令了。

证书管理:

[root@localhost ~]# salt-key -L
Accepted Keys:
Unaccepted Keys:
centos10
centos11
centos12
Rejected Keys:

[root@localhost ~]# salt-key -A
The following keys are going to be accepted:
Unaccepted Keys:
centos10
centos11
centos12
Proceed? [n/Y] y
Key for minion centos10 accepted.
Key for minion centos11 accepted.
Key for minion centos12 accepted.
通信测试:
[root@localhost salt]# salt '*' test.ping
centos10:
True
centos12:
True
centos11:
True
注意,通配符 *代表所有minion,假如你收到“True”,证明你已经成功安装和配置完成salt stack。

Salt远程执行及语法结构:
命令格式:salt '<target>' <function> [arguments]
1. target:
target部分允许你指定那些minion应该运行执行. 默认的规则是使用glob匹配minion id. 例如:
salt '*' test.ping
salt '*.example.org' test.ping
Targets可以使用Grains系统来通过minion的系统信息进行过滤:
salt -G 'os:Ubuntu' test.ping
更多参见Grains系统:http://docs.saltstack.cn/zh_CN/latest/topics/targeting/grains.html
Targets也可以使用正则表达式:
salt -E 'virtmach[0-9]' test.ping
Targets也可以指定列表:
salt -L 'foo,bar,baz,quo' test.ping
或者在一个命令中混合使用多target类型:
salt -C 'G@os:Ubuntu and webser* or E@database.*' test.ping
2. function
funcation是module提供的功能. Salt内置了大量有效的functions. 列出minions上的所有有效functions:
salt '*' sys.doc
显示当前所有有效的minions:
salt '*' test.ping
运行一个任意的shell命令:
salt '*' cmd.run 'uname -a'
所有模块列表:http://docs.saltstack.cn/zh_CN/latest/ref/modules/all/index.html
3. arguments:
function通过空格来界定参数:
salt '*' cmd.exec_code python 'import sys; print sys.version'
可选的, 也支持keyword参数:
salt '*' pip.install salt timeout=5 upgrade=True


Salt配置管理:
很多最强大、最有用的工程解决方案都是基于简单原则建立起来的。Salt States 也竭尽全力做到那样:K.I.S.S.(Keep It Stupidly Simple 简单到愚蠢)
默认,Salt使用PyAMl语法(http://pyyaml.org) 作为它的模板文件的格式,但是其他很多模板语言在Salt中是可以使用的。一定要按照正确的格式书写YAML,比如它使用到两个空格代替tab。

一个典型的SLS 文件常常看起来像这样的YAML:
httpd:            #第一行是这一组数据的ID,被叫做ID 声明
pkg:            #第二行和第四行是状态声明的开始,所以分别使用了包和服务状态。
- installed   #第三行和第五行是要运行的函数。
service:
- running
- require:    #第六行,是关键词require.它叫做需求声明,它保证httpd服务仅在httpd包被成功安装后才会启动。
- pkg: httpd
SLS文件命名:

使用子目录来做组织是个很好的选择:
a.每个子目录描述一个资源;
b.webserver.dev 用来表示子目录 webserver/dev.sls
init.sls 在一个子目录里面表示引导文件,也就表示子目录本身, 所以webserver/init.sls就是表示webserver;
如果同时存在webserver.sls和 webserver/init.sls,则 webserver/init.sls 被过滤,webserver.sls将被用来表示 webserver.

启动配置管理:
打开master配置文件,找到file_roots行,取消如***释!
# vim /etc/salt/master
file_roots:
base:
- /srv/salt
创建基础配置文件:
# vim /srv/salt/top.sls
base:  '*':
- servers
创建server.sls文件

# vim /srv/salt/server.sls   #或者vim /srv/salt/server/init.sls
httpd:
pkg:
- installed
service:
- running
- watch:
- pkg: httpd
- file: /etc/httpd/conf/httpd.conf
- user: apache
user.present:
- uid: 87
- gid: 87
- home: /var/www/html
- shell: /sbin/nologin
- require:
- group: apache
group.present:
- gid: 87
- require:
- pkg: apache
/etc/httpd/conf/httpd.conf:
file.managed:
- source: salt://apache/httpd.conf
- user: root
- group: root
- mode: 644
触发配置minion:
#所有的sls文件准备好以后,最后一步是告诉Salt配置远程机器。state.highstate 是触发这些同步的命令。使用先前的语法格式,目标位所有机器,键入以下格式的命令:
salt '*' state.highstate

注:
文件被Salt管理2种方式:1.用`file.managed`状态声明;2.使用,`file`状态声明,然后加一个`managed`属性给那个状态声明。
/mnt/test.txt
file.managed:
- source: salt://src/test.txt
- user: root
- group:root
........
#OR
/mnt/test.txt
file:
- managed
- source: salt://src/test.txt
.........


待续.....

案例:为每一个minion客户端部署zabbix-agent,并确保该进程正常启动。
zabbix_epel:
file.managed:
- name: /root/zabbix-release-2.2-1.el6.noarch.rpm
- source: salt://src/zabbix-release-2.2-1.el6.noarch.rpm
- user: root
- group: root
cmd.run:
- name: rpm -ivh /root/zabbix-release-2.2-1.el6.noarch.rpm
- unless: test -f /etc/yum.repos.d/zabbix.repo
- require:
- file: zabbix_epel

zabbix-agent:
pkg:
- installed
- require:
- file: zabbix_epel
service:
- running
- watch:
- file: /etc/zabbix/zabbix_agentd.conf
- require:
- pkg: zabbix-agent
/etc/zabbix/zabbix_agentd.conf:
file.managed:
- source: salt://src/zabbix_agentd.conf
- user: root
- group: root
- mode: 644


更多请参阅:
Saltstack知识库:http://www.saltstack.cn/projects/cssug-kb/wiki
Saltstack Doc目录:http://docs.saltstack.cn/contents.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息