系统环境:
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