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

系统环境:

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 


你可能感兴趣的:(配置管理,自动化,SALT,saltstack)