salt 用highstate复合主机状态
简介
1
2
3
4通过Jinjia2和grain,pillar数据来扩展状态配置,使状态管理更加灵活.但都是单一状态的管理.
通过highstate你将学会如何组织主机状态,把多个主机状态配置根据不同的规则进行复合,进而对整个服务器集群进行整体管控
之前都是使用state.sls来运行一个状态文件,接下来使用highstate模块进行组织和管理单一的状态文件top.sls文件管理状态文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29top.sls文件将pillar文件定位到不同的minion;也可以用来在状态系统中将不同状态文件定位到不同的minion中
highstate函数正式通过top.sls文件作为入口对模块和主机进行管理的
例如:
创建状态文件目录:
[root@saltserver ~]# mkdir -p /srv/salt/lamp
[root@saltserver ~]# mkdir -p /srv/salt/nginx
编写相应的state模块文件:
[root@saltserver ~]# tree /srv/salt/{lamp,nginx}
/srv/salt/lamp
├── httpd.conf
├── lamp.sls
├── my.cnf
└── php.ini
/srv/salt/nginx
├── nginx.j2
├── nginx.sls
└── test_vhost.conf
通过top.sls将lamp和nginx进行整合:
[root@saltserver ~]# vim /srv/salt/top.sls
[root@saltserver ~]# cat /srv/salt/top.sls
base:
'minion-one':
- nginx.nginx
'minion-two':
- match: list
- lamp.lamp
执行指令:
[root@saltserver ~]# salt '*' state.highstate状态文件的拆分和复用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81* 将模块目录结构化
[root@saltserver ~]# mkdir -p /srv/salt/nginx/{templates,file}
[root@saltserver ~]# tree /srv/salt/nginx/
/srv/salt/nginx/
├── file
│ └── test_vhost.conf
├── nginx.sls
└── templates
└── nginx.j2
* 对nginx.sls进行拆分
删除nginx.sls配置文件:
[root@saltserver ~]# rm -f /srv/salt/nginx/nginx.sls
创建独立的SLS文件:
[root@saltserver ~]# touch /srv/salt/nginx/{init,nginx_install,nginx_conf,nginx_running,vhost_conf}.sls
[root@saltserver ~]# tree /srv/salt/nginx/
/srv/salt/nginx/
├── file
│ └── test_vhost.conf
├── init.sls
├── nginx_conf.sls
├── nginx_install.sls
├── nginx_running.sls
├── templates
│ └── nginx.j2
└── vhost_conf.sls
用init文件作入口文件(包含其它文件):
[root@saltserver ~]# vim /srv/salt/nginx/init.sls
include:
- .nginx_install
- .nginx_running
- .nginx_conf
- .vhost_conf
nginx软件安装:
[root@saltserver ~]# vim /srv/salt/nginx/nginx_install.sls
nginx_install:
pkg.installed:
- name: nginx
nginx服务管理:
[root@saltserver ~]# cat /srv/salt/nginx/nginx_running.sls
nginx_running:
service.running:
- name: nginx
- enable: True
- require:
- pkg: nginx_install
- watch:
- file: nginx_conf
- file: vhost_conf
nginx配置模板文件管理:
[root@saltserver ~]# cat /srv/salt/nginx/nginx_conf.sls
nginx_conf:
file.managed:
- name: /etc/nginx/conf/nginx.conf
- source: salt://nginx/templates/nginx.j2
- user: root
- group: root
- template: jinja
- mode: 644
nginx虚拟主机文件管理:
[root@saltserver ~]# cat /srv/salt/nginx/vhost_conf.sls
vhost_conf:
file.managed:
- name: /etc/nginx/conf/conf.d/nginx.conf
- source: salt://nginx/file/test_vhost.conf
- user: root
- group: root
- mode: 644
修改top.sls文件:
[root@saltserver ~]# cat /srv/salt/top.sls
base:
'minion-one':
- nginx
注意: nginx模块文件夹里面有init.sls文件,salt会默认加载init.sls,不需要写成nginx.init这种形式多环境的配置和管理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43通过top.sls配置文件和模块拆分已经可以对多种状态和多组minion进行同时管理.
只需要执行"salt '*' state.highstate"就能完成base环境内的minion管理
[root@saltserver ~]# vim /etc/salt/master
# file_roots:
# base:
# - /srv/salt/
# dev:
# - /srv/salt/dev/services
# - /srv/salt/dev/states
# prod:
# - /srv/salt/prod/services
# - /srv/salt/prod/states
file_roots这个配置项指明了我们的环境目录在哪里,salt执行对应的SLS状态文件都会默认的目录去寻找.
一般企业都会有开发环境,测试环境,生产环境.对不同的环境配置不同的目录,我们修改:
[root@saltserver ~]# vim /etc/salt/master
file_roots:
base:
- /srv/salt/
dev:
- /srv/salt/dev/
prod:
- /srv/salt/prod/
重启salt-server:
[root@saltserver ~]# pkill salt-master
[root@saltserver ~]# salt-master -c /etc/salt -d
管理top.sls文件:
[root@saltserver ~]# vim /srv/salt/top.sls
base:
'minion-one':
- nginx
dev:
"test-*":
- httpd
prod:
"prod-*":
- match: list
- httpd
- php
- mysql