salt highstate

salt 用highstate复合主机状态

  1. 简介

    1
    2
    3
    4
    通过Jinjia2和grain,pillar数据来扩展状态配置,使状态管理更加灵活.但都是单一状态的管理.
    通过highstate你将学会如何组织主机状态,把多个主机状态配置根据不同的规则进行复合,进而对整个服务器集群进行整体管控

    之前都是使用state.sls来运行一个状态文件,接下来使用highstate模块进行组织和管理单一的状态文件
  2. 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
    29
    top.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
  3. 状态文件的拆分和复用

    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这种形式
  4. 多环境的配置和管理

    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