Saltstack 自动化运维工具详细介绍

本文涉及的产品
云解析 DNS,旗舰版 1个月
日志服务 SLS,月写入数据量 50GB 1个月
全局流量管理 GTM,标准版 1个月
简介:

什么是saltstack

• Saltstack是基于python开发的一套C/S架构配置管理工具

• 使用SSL证书签方的方式进行认证管理

• 底层使用ZeroMQ消息队列pub/sub方式通信

    – 号称世界上最快的消息队列ZeroMQ能快速在成千上万台主机上进行各种操作

    – 采用RSA Key方式确认身


主要功能

• Saltstack最主要的两个功能是:配置管理与远程执行

• Saltstack不只是一个配置管理工具,还是一个云计算与数据中心架构编排的利器

• Saltstack已经支持Docker相关模块

• 在友好地支持各大云平台之后,配合Saltstack的Mine实时发现功能可以实现各种云平台业务的自动扩展


Saltstack架构

• Saltstack基于C/S架构

    – 服务器端称作Master

    – 客户端称作Minion

• 可以实现传统处理方式,即:客户端发送请求给服务器,服务器收到请求后处理请求,再将结果返回

• 也可以使用消息队列中的发布与订阅(pub/sub)服务模式

1.jpg



Saltstack工作机制

• Master和Minion都以守护进程的方式运行

• Master监听配置文件里定义的ret_port(接收minion请求),和publish_port(发布消息)的端口

• 当Minion运行时,它会自动连接到配置文件里定义的Master地址ret_port端口进行连接认证

• 当Master和Minion可以正常通信后,就可以进行各种各样的配置管理工作了




Saltstack安装


依赖:

    1. python2.6 ~ python3.0

    2. ZeroMQ or RAET

    3. mako(可选):一个可选的Salt States解析器

    4. gcc(可选)


MacOS安装方法:

    1. brew install saltstack

    2. sudo port install salt

    3. sudo pip install salt


Ubuntu14.04安装方法:

    1. wget -O - https://repo.saltstack.com/apt/ubuntu/14.04/amd64/latest/SALTSTACK-GPG-KEY.pub sudo apt-key add -

     2. deb https://repo.saltstack.com/apt/ubuntu/14.04/amd64/latest trusty main

     3. apt-get install salt-api salt-cloud salt-master salt-minion salt-ssh salt-syndic


Centos 和 redhat 安装方法:

    1. sudo pip install salt

    2. sudo yum install salt-master salt-minion



Saltstack启动

    1 . 运行Master 节点

    2.  修改Minion 节点配置,填入Master节点信息

    3.  启动Minion

    4.  Master节点添加Minion


本次使用一个案例来介绍 Saltstack 

实验拓扑图:

3.jpg


服务器使用的操作系统是RHEL7


实验要求:

为六台主机配置IP 分别为     

sm          192.168.4.10  

web1     192.168.4.11

db1        192.168.4.12

web2     192.168.4.21

db2        192.168.4.22

cache    192.168.4.33


为了方便实验 六台主机全都关闭防火墙 禁用SELinux

配置yum源 


实验步骤:

安装saltstack:

在主机sm上配置 安装salt-master

    // 安装 salt-master

    # yum -y install salt-master

    // 启动 Master 

    # systemctl start salt-master

    # systemctl enable salt-master

    //验证服务

    # netstat -pantu | grep ‘ :4505 | :4506’

    tcp        0      0 0.0.0.0:4505            0.0.0.0:*               LISTEN      12434/python        

    tcp        0      0 0.0.0.0:4506            0.0.0.0:*               LISTEN      12440/python   

    // 修改/etc/hosts, 实现名称解析

    # echo '

    > 192.168.4.10 sm

    > 192.168.4.11 web1

    > 192.168.4.12  db1

    > 192.168.4.21 web2

    > 192.168.4.22 db2

    > 192.168.4.33 cache

    > ' > /etc/hosts

    // 将sm 的 /etc/hosts 文件同步共享给其他主机

    # for i in 11 12 21 22 33

    > do

    > rsync -a /etc/hosts 192.168.4.${i}:/etc/ -e 'ssh'

    > done


在其他主机 11 12 21 22 33上:

    //安装 salt-minion

    # yum -y install salt-minion

    //修改Minion配置文件,使其可以与Master通信

    #sed -e"s/^#\(master:\).*/\1 sm/" -i /etc/salt/minion -e "s/^#\(id:\).*/\1${HOSTNAME}/" -i /etc/salt/minion

    //启动Minion

    # systemctl start salt-minion.service

    # systemctl status salt-minion.service

    

Master与Minion互信:

• Minion上线后先与Master端联系,把自己的pubkey发过去

• Master接受Minion的公钥后,互信建立完成

• 查看密钥信息

    [root@sm ~]# salt-key -L

    Accepted Keys:

    Denied Keys:

    Unaccepted Keys:

    cache

    db1

    db2

    web1

    web2

    Rejected Keys:

• 密钥管理

    [root@sm ~]# salt-key -h

    -L: 列出密钥

    -a: 接受一个密钥

    -A: 接受全部密钥

    -D: 删除全部密钥

    ... ...

• 接受密钥,完成互信

    [root@sm ~]# salt-key -A -y

    The following keys are going to be accepted:

    Unaccepted Keys:

    cache

    db1

    db2

    web1

    web2

    Key for minion cache accepted.

    Key for minion db1 accepted.

    Key for minion db2 accepted.

    Key for minion web1 accepted.

    Key for minion web2 accepted.


远程执行命令:

salt命令使用方法如下

• salt [options] '<target>' <function> [arguments]

• target指的是在哪些Minion上执行,如果在全部Minion上运行,可以采用通配符 '*’

-L 列表

-E 正则

-N 分组

-S CIDR

• function一般采用python的 模块.方法 样式

• arguments是传递给方法的参数



批量管理主机

• 测试所有主机连通性

    [root@sm ~]# salt '*' test.ping

    web1:

        True

    web2:

        True

    db2:

        True

    db1:

        True

    cache:

        True

• 在主机上执行任意命令 测试

     [root@sm ~]# salt '*' cmd.run 'uptime'

    db1:

         01:41:05 up  5:22,  1 user,  load average: 0.00, 0.01, 0.05

    db2:

         01:41:04 up  5:22,  1 user,  load average: 0.00, 0.01, 0.05

    web2:

         01:41:04 up  5:22,  1 user,  load average: 0.00, 0.01, 0.05

    cache:

         01:41:05 up  5:22,  1 user,  load average: 0.00, 0.01, 0.05

    web1:

         01:41:04 up  5:22,  1 user,  load average: 0.00, 0.01, 0.05


使用列表 -L

    # salt -L ' db1,web2' cmd.run 'uptime'

    web2:

         01:50:15 up  5:31,  1 user,  load average: 0.00, 0.01, 0.05

    db1:

         01:50:16 up  5:31,  1 user,  load average: 0.00, 0.01, 0.05


使用正则表达式 -E 

    # salt -E "web\d" test.ping

    web2:

        True

    web1:

        True

使用分组  -N

    定义分组

    # vim /etc/salt/master

    //1085 行

    nodegroups:

        test: 'L@db1,web2,cache'

        other: 'E@db[0-9] or N@test'

    使用分组

    [root@sm ~]# salt -N 'test' test.ping

    cache:

        True

    db1:

        True

    web2:

        True    

    [root@sm ~]# salt -N 'other' test.ping

    web2:

        True

    cache:

        True

    db2:

        True

    db1:

        True


传输文件:


# vim /etc/salt/master

#file_roots:

#  base:

#    - /srv/salt //master 的默认根目录


# mkdir /srv/salt            //创建根目录

# cp /etc/passwd /srv/salt/users    //添加测试文件

# salt '*' cmd.run 'mkdir /test'            //远程主机创建目录

cache:

db1:

db2:

web2:

web1:


# salt -E 'web\d' cp.get_file salt://users /test/user    //实现传输文件

web2:

    /test/user

web1:

    /test/user


# salt '*' cmd.run 'ls /test'            //查看传输效果

db1:

cache:

db2:

web2:

    user

web1:

    user


模块及功能:


列出所有可用模块

salt '随便一台主机名' sys.list_modules


查看模块所有功能

salt '随便一台主机名'  sys.list_functions 模块名


查看模块用法

salt '随便一台主机名' sys.doc 模块名

salt '随便一台主机名' sys.doc 模块名.方法



什么是YAML:

• YAML:YAML Ain't Markup Language

• YAML的结构通过空格来展示

• 项目使用"-"来表示

• 键值对使用":"来表示

• Master和Minion的配置文件均采用YAML语法

• YAML使用一个固定的缩进风格表示数据层级结构关

• 一般每个缩进级别由两个空格组成

• 注意不要使用tab

• 缩进是初学者容易出错的地方之一

• YAML的键值对采用冒号分隔

• YAML键值对对应python的字典

• YAML表示形式

    name: test

    或

    name:

      test

• Python字典

    {'name': 'test'}

• 字典可以嵌套

    hosts:

        name: test

• 字典表示形式为

    {

        'hosts': {

       'name': 'test'

       }

    }


• 列表项使用一个短横杠加一个空格

    -  test1

    -  test2

• 列表可以作为一个键值对的value

    pkg-http:

      - httpd

      - php

• Python语法

    {'pkg-http': ['httpd', 'php']}



Grains基础:

• Grains是saltstack最重要的组件之一

• 存储minion端的基本信息,这些信息一般都是静态的,如CPU、内核、操作系统等

• Grains存储在minion本地

• 管理员可以在minion端进行grains值的修改,如增加、删除等


Grains基础应用

• 获取minion端所有grains信息

        # salt '随便一台主机名' grains.items 

• 通过grains.item获取minion端的fqdn信息

        # salt '随便一台主机名' grains.item fqdn


通过minion定义grains

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
  [root@web1 ~] # vim /etc/salt/minion
     grains:
        web:
          apache
     [root@web1 ~] # systemctl restart salt-minion.service
     
     [root@web2 ~] # vim  /etc/salt/minion
     grains:
        web:
          nginx
     [root@web2 ~] # systemctl restart salt-minion.service
     
     [root@sm ~] # salt '*' saltutil.sync_grains
     web1:
     db1:
     cache:
     web2:
     db2:
     [root@sm ~] # salt -G 'web:apache' test.ping
     web1:
         True
     [root@sm ~] # salt -G 'web:nginx' test.ping
     web2:
         True
     [root@sm ~] # salt 'web1' grains.item web
     web1:
         ----------
         web:
             apache
     [root@sm ~] # salt 'web2' grains.item web
     web2:
         ----------
         web:
             nginx

   

    

Pillar基础 

• Pillar也是saltstack最重要的组件之一

• 作用是定义与被控主机相关的任何数据,定义好的数

据可以被其他组件使用

• 存储在master端,存放需要提供给minion的信息

• 常用于敏感信息,每个minion只能访问master分配

给自己的pillar信息

• 用于经常动态变化的信息


配置pillar

• Pillar需要一个pillar_roots来维护pillar的配置

• 默认pillar_roots为/srv/pillar

• pillar_roots在Master配置文件中定义


    [root@sm ~]# vim /etc/salt/master

    pillar_roots:

      base:

        - /srv/pillar

    [root@sm ~]# mkdir /srv/pillar

    [root@sm ~]# systemctl restart salt-master


Pillar数据文件

• Pillar执行时需要一个名为top.sls的入口文件

• 通过top.sls文件作为入口,组织其它的pillar文件

• sls文件采用YAML格式

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
82
83
84
85
86
87
     [root@sm ~] # cd /srv/pillar
     [root@sm pillar] # vim top.sls
     base:                                 # 与pillar_roots定义一致
       'L@web1,web2' :           # 过滤目标
         - appweb                     # 用于包含 appweb
       'E@db\d' :
         - appdb
         - user
       'cache' :
         - user
 
     [root@sm pillar] # vim appweb.sls
     appname: web
     software:
       - apache
       - nginx
     [root@sm pillar] # vim appdb.sls 
     appname: mysql
     
     [root@sm pillar] # vim user.sls 
     users :
       zhang3: 1000
       li4: 1001
 
//  获取pillar全部数据
     [root@sm pillar] # salt '*' pillar.items
     web1:
         ----------
         appname:
             web
         software:
             - apache
             - nginx
     cache:
         ----------
         users :
             ----------
             li4:
                 1001
             zhang3:
                 1000
     web2:
         ----------
         appname:
             web
         software:
             - apache
             - nginx
     db2:
         ----------
         appname:
             mysql
         users :
             ----------
             li4:
                 1001
             zhang3:
                 1000
     db1:
         ----------
         appname:
             mysql
         users :
             ----------
             li4:
                 1001
             zhang3:
                 1000
//  将pillar数据同步至minion
     [root@sm pillar] # salt '*' saltutil.refresh_pillar
     db2:
         True
     db1:
         True
     web2:
         True
     cache:
         True
     web1:
         True
     //  根据pillar值匹配minion    
     [root@sm pillar] # salt 'web1' pillar.item software
     web1:
         ----------
         software:
             - apache
             - nginx

    

Jinja模板:


Jinja基础

• Jinja是基于Python的模板引擎

• 在saltstack中我们使用yaml_jinja渲染器来根据模板生产对应的配置文件

• 对于不同的操作系统或者不同的情况,通过jinja可以让配置文件或者操作形成一种模板的编写方式


Jinja使用步骤

• 在state文件中使用"- template: jinja"声明

• 在模板文件中使用变量"{{ name }}"声明,name为变量,自己定义

• 在state文件中使用"- defautls: name: value"声明



States基础:

• States是satlstack中的配置语言

• 安装软件包、管理配置文件都需要编写一些statessls文件

• states sls使用YAML语法


查看所有states模块

salt '随便一台主机' sys.list_state_modules


查看states某个模块功能

salt '随便一台主机' sys.list_state_functions 模块名


查看states某个模块的某个方法用法

salt '随便一台主机' sys.state_doc  模块名.方法



为不同的环境设置不同的文件目录

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@sm ~] # vim /etc/salt/master
file_roots:
     base:
       /srv/base
     dev:
       /srv/dev
     prod:
       /srv/prod
[root@sm ~] # mkdir /srv/base /srv/dev /srv/prod
[root@sm ~] # ls /srv/
base  dev  prod
[root@sm ~] # systemctl restart salt-master.service
[root@sm ~] # cd /srv/base/

案例1  系统初始化

配置所有机器的DNS为 202.101.224.68

修改所有机器的yum 源为本机器网络yum

修改history 能显示命令执行时间

开启路由转发功能 net.ipv4.ip_forward=1

添加用户zhangsan 

为用户zhuangsan 设置默认密码 zhangsan

要求zhangsan 在第一次登录是的时候修改密码


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
82
83
84
[root@sm base] # vim top.sls 
base:
   '*' :
     - init.dns
     - init.yum
     - init.adduser
     - init. history
     - init.ip_forward
 
[root@sm base] # mkdir init
[root@sm base] # cd init/
 
[root@sm init] # vim dns.sls 
add_dns:
   file .managed:
     - name:  /etc/resolv .conf
     source : salt: //file/dns .conf
     - user: root
     - group: root
     - mode: 644
     - template: jinja
     - defaults:
         DNS_IP:  202.101.224.68
 
[root@sm init] # vim yum.sls 
create_yum:
   file .managed:
     - name:  /etc/yum .repos.d /test .repo
     source : salt: //file/yum .repo
     - user: root
     - group: root
     - mode: 644
 
unless条件
• 当unless条件不满足时,需要执行令
onlyif条件
• 当onlyif条件满足时,需要执行令
 
[root@sm init] # vim adduser.sls 
useradd  zhangsan:
   cmd.run:
     - unless:  id  zhangsan
echo  '123456'  passwd  --stdin zhangsan:
   cmd.run:
     - onlyif:  id  zhangsan
chage -d 0 zhangsan:
   cmd.run:
     - onlyif:  id  zhangsan
 
[root@sm init] # vim history.sls 
history :
   file .append:
     - name:  /etc/profile
     - text:
       export  HISTTIMEFORMAT= '%F %T'
 
[root@sm init] # cat ip_forward.sls 
alter_ip_forward:
   sysctl.present:
     - name: net.ipv4.ip_forward
     - value: 1
 
[root@sm init] # cat ip_forward.sls 
alter_ip_forward:
   sysctl.present:
     - name: net.ipv4.ip_forward
     - value: 1
 
[root@sm init] # mkdir file
[root@sm init] # cd file/
 
[root@sm  file ] # vim dns.conf 
nameserver {{DNS_IP}}
[root@sm  file ] # vim yum.repo 
[ test ]
name= test
baseurl=http: //192 .168.4.254 /rhel7
gpgcheck=0
 
state.highstate会读取所有环境的 top .sls文件,并且执行 top .sls文件内容里面定义的sls文件,不在 top .sls文件里面记录的sls则不会被执行;
state.sls也可以指定读取哪个环境 使用 saltenv = 读取环境
test  = True 测试执行  不真正执行  
# salt '*' state.highstate saltenv=base test=True
# salt '*' state.highstate saltenv=base


案例2 部署httpd web 服务器

在实验的 web1 web2 上自动安装httpd软件包

更改httpd监听端口为8080

启动httpd 服务


pkg模块

• pkg模块可以实现软件包管理

• 管理的软件包包括红帽RPM包和Ubuntu的deb包等

• 主要的方法有:

    – pkg.installed:安装软件包

    – pkg.latest:保持软件包为最新版本

    – pkg.remove:卸载软件包

    – pkg.purge:下载软件包,删除配置文件


require条件

• 只有httpd安装了才分发配置文件


service模块

• 软件部署完毕后,需要确保服务处于运行状态,并且能够实现开机自启,这就用到了service模块

    – service.running:确保服务处于运行状态

    – service.enabled:开机自启

    – service.disabled:开机不启动

    – service.dead:确保服务处于未运行状态

    

使用watch

• 服务如果能够正常启动,需要确保存在配置文件,设置如果配置文件存在,才启动服务

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
[root@sm ~] # cd /srv/prod/
[root@sm prod] # vim top.sls 
prod:
   'E@web[0-9]' :
     - install_httpd
 
[root@sm prod] # vim install_httpd.sls 
httpd_pkg_installed:
   pkg.installed:
     - name: httpd
alter_httpd:
   cmd.run:
     - name:  sed  -i  '/Listen 80/s/80/8080/'  /etc/httpd/conf/httpd .conf
     - unless:  sed  -n  '/Listen 80$/p'  /etc/httpd/conf/httpd .conf
     - require:
       - pkg: httpd_pkg_installed
running_httpd:
   service.running:
     - name: httpd
     enable true
     - restart:  true
     watch :
       - cmd: alter_httpd
# salt '*' state.highstate saltenv=prod test=True
# salt '*' state.highstate saltenv=prod


//这里因为配置文件中只需要更改一行 我使用的是sed 更改

//也可以使用 file.managed 方法 将master的配置文件分发到客户端


案例3 部署nginx 源码包


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
82
83
84
85
86
87
[root@sm ~] # cd /srv/dev/
[root@sm dev] # vim top.sls
dev:
   'L@db1,db2' :
     - nginx_install
 
[root@sm dev] # mkdir nginx_install
[root@sm dev] # cd nginx_install
[root@sm nginx_install] # vim init.sls
     include:
       - .initpkg
       - . install
       - .nginx_init
[root@sm nginx_install] # vim initpkg.sls
     init_pkg_install:
       pkg.installed:
         - names:
           - gcc
           - gcc-c++
           make
           - autoconf
           - openssl-devel
           - pcre-devel
[root@sm nginx_install] # vim install.sls
     nginx_src_install:
       file .managed:
         - name:  /usr/local/src/nginx-1 .9.12. tar .gz
         source : salt: //nginx_install/files/nginx-1 .9.12. tar .gz
         - user: root
         - group: root
         - mode: 644
       cmd.script:
         source : salt: //nginx_install/files/build .sh
         - cwd:  /usr/local/src
         - user: root
         - unless:  test  -d  /usr/local/nginx
         - require:
           file : nginx_src_install
           - pkg:  init_pkg_install
[root@sm nginx_install] # vim nginx_init.sls 
     nginx_init:
       file .managed:
         - name:  /usr/lib/systemd/system/nginx .service
         source : salt: //nginx_install/files/nginx .service
         - user: root
         - group: root
         - mode: 644
     
     nginx_service:
       service.running:
         - name: nginx
         enable true
         - restart:  true
[root@sm nginx_install] # mkdir files
[root@sm nginx_install] # cd files 
[root@sm files ] # vim build.sh
     #!/bin/bash
     useradd  -s  /sbin/nologin  nginx
     tar  xzf nginx-1.9.12. tar .gz
     cd  nginx-1.9.12
     . /configure  --prefix= /usr/local/nginx  --user=nginx --group=nginx
     make
     make  install
[root@sm files ] # ls
     build.sh                       //  源码安装脚本
     nginx-1.9.12. tar .gz       //  nginx 源码包
     nginx.service                 //  nginx systemctl 系统启动文件
[root@sm files ] # vim nginx.service
     [Unit]
     Description=nginx - high performance web server
     Documentation=http: //nginx .org /en/docs/
     After=network.target remote-fs.target nss-lookup.target
     
     [Service]
     Type=forking
     PIDFile= /usr/local/nginx/logs/nginx .pid
     ExecStartPre= /usr/local/nginx/sbin/nginx  -t -c  /usr/local/nginx/conf/nginx .conf
     ExecStart= /usr/local/nginx/sbin/nginx  -c  /usr/local/nginx/conf/nginx .conf
     ExecReload= /usr/local/nginx/sbin/nginx  -s reload
     ExecStop= /usr/local/nginx/sbin/nginx  -s quit
     PrivateTmp= true
     
     [Install]
     WantedBy=multi-user.target
     
# salt '*' state.highstate saltenv=dev test=True
# salt '*' state.highstate saltenv=dev

扩展:

Saltstack Master  配置

Master主配置文件是/etc/salt/master,常用的配置选项与具体功能相关,所以,当应用到相关功能时再做调整,目前保持默认就好


通用配置项:

1. interface:监听的IPv4地址

#interface: 0.0.0.0

2. IPv6:监听的IPv6的地址

#ipv6: False

3. PUBLISH_PORT:与Minion通信的端口

#publish_port: 4505

4. MASTER_ID:当前Master节点的ID

5. USER:启动Master服务的用户

#user: root

6. MAX_OPEN_FILES:每一个连接到Master的Minion ,Master都会打开一个文件描述符,改选项定义打开的最大文件数。可能报错:Too many open files

#max_open_files: 100000

7. WORKER_THREADS:最大工作线程数

#worker_threads: 5

8. RET_PORT:获取Minion返回结果的端口

#ret_port: 4506

9. PIDFILE:Master进程的pid文件 比如要杀进程时可用

#pidfile: /var/run/salt-master.pid

10. ROOT_DIR:Master运行的根目录

#root_dir: /

11.CONF_FILE:Master配置文件路径

#conf_file: /etc/salt/master

12.PKI_DIR:pki验证密钥存放路径

#pki_dir: /etc/salt/pki/master

13.MODULE_DIR:Salt模版搜索路径

#module_dirs: <no default>

#   - /var/cache/salt/minion/extmods

14.CACHEDIR:默认缓存路径

#cachedir: /var/cache/salt/master

15.KEEP_JOBS:旧的任务信息保留多少个小时

#keep_jobs: 24

16.GATHER_JOB_TIMEOUT:Minion获取任务超时时间

#gather_job_timeout: 10

17.TIMEOUT:Salt API,command执行的超时时间

#timeout: 5

18.OUTPUT_FILE:SaltStack command输出文件 比如日志

#output_file: None

19.CLI_SUMMARY:显示客户端的概要信息,目标的Minion数,返回的数目,没返回的数目

#cli_summary: False

20.MAX_MINIONS:最大管理的Minions数

21.TRANSPORT:通信模块

22.TRANSPORT:通信模块的参数

23.MAX_EVENT_SIZE:最大的事件数

#max_event_size: 1048576


安全配置项:

1.OPEN_MODE:开发模式,如果设置为true,则任何minion都能连上Master,无需验证 很危险

#open_mode: False

2.AUTO_ACCEPT:接听所有客户端的公钥

#auto_accept: False

3.TOKEN_EXPIRE:Master新生成token的存活时间

#token_expire: 43200

4.AUTOSIGN_TIMEOUT:如果Minion的keyid出现在pki_dir/minion_autosign/keyid中,Master会自动接受该Minion的链接,这个配置项,定义这个自动接受的持续时间,超时的要重新验证接受。

# autosign_timeout: 120

5.AUTOSIGN_FILE:自动接受Minion keyid存放文件 白名单

#autosign_file: /etc/salt/autosign.conf

6.AUTOREJECT_FILE:于AUTOSIGN_FILE相反 黑名单

#autoreject_file: /etc/salt/autoreject.conf

7.PUBLISHER_ACL:对指定Minion可执行指定的命令 白名单

#publisher_acl:

#  larry:

#    - test.ping

#    - network.*

8.PUBLISHER_ACL_BLACKLIST: 与PUBLISHER_ACL相反 黑名单

#publisher_acl_blacklist:

#  users:

#    - root

#    - '^(?!sudo_).*$'   #  all non sudo users

#  modules:

#    - cmd

9.EXTERNAL_AUTH:指定验证方法

#external_auth:

#  pam:

#    fred:

#      - test.*

10.FILE_RECV:允许minion向master发送文件 一个特别危险的配置项

#file_recv: False

11.FILE_RECV_MAX_SIZE:允许minion向master发送最大文件(MB)

#file_recv_max_size: 100

12.ROTATE_AES_KEY:轮换AES key

13.MASTER_SIGN_PUBKEY,

   MASTER_SIGN_KEY_NAM,

   MASTER_PUBKEY_SIGNATURE,

   MASTER_USE_PUBKEY_SIGNATURE,  网络通信签名相关



Saltstack Minion  配置

通用配置项:

1.MASTER:master的hostname,可以是多个  ip也行 域名也行

#master:

2.MASTER_TYPE:str,一对一 ; failover,容错的,这种情况下,master必须是多个,minion会逐个通信,func:动态生成的

# master_type: str

3.MAX_EVENT_SIZE:最多接受master推送过来的事件数目

#max_event_size: 1048576

4.MASTER_FAILBACK:回滚,如果设置为true,此时master_type必须是failover

#master_failback: False

5.MASTER_ALIVE_INTERVAL:心跳检测

#master_alive_interval: 30

6.RANDOM_MASTER:如果master是多个,则选择算法是否是随机的

#random_master: False

7.MASTER_PORT:Master端口

#master_port: 4506

8.USER:SaltStack启动用户

#user: root

9.SUDO_USER:可以获取sudo权限的用户

#sudo_user: root

10.ID:Minion的ID,会出现的Master的连接Minion的列表中

#id:

11.MASTER_TRIES:重连Master的次数

#master_tries: 1

12.AUTH_TRIES:auth 重试次数

#    auth_tries: 10

13.AUTH_TIMEOUT:auth超时

#auth_tries: 7

14.TCP_PUB_PORT:发布消息端口

#tcp_pub_port: 4510

15.TCP_PULL_PORT:获取消息端口

#tcp_pull_port: 4511


安全配置项:

1. open_mode:可以用来清理master key,修改为true,重启,修改为false,重启 通过这些步骤来清理master key

#open_mode: False

2.MASTER_FINGER:master指纹,用来验证master,在master上运行salt-key-F master获取

#master_finger: ''

3.VERIFY_MASTER_PUBKEY_SIGN:是否验证PUBKEY的签名文件

4.MASTER_SIGN_KEY_NAME:签名文件

5.ALWAYS_VERIFY_SIGNATURE:是否必须验证











本文转自 Xuenqlve 51CTO博客,原文链接:http://blog.51cto.com/13558754/2063243,如需转载请自行联系原作者
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
1月前
|
运维 Linux Apache
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
53 3
|
9天前
|
安全 前端开发 测试技术
如何选择合适的自动化安全测试工具
选择合适的自动化安全测试工具需考虑多个因素,包括项目需求、测试目标、系统类型和技术栈,工具的功能特性、市场评价、成本和许可,以及集成性、误报率、社区支持、易用性和安全性。综合评估这些因素,可确保所选工具满足项目需求和团队能力。
|
10天前
|
运维 Ubuntu 应用服务中间件
自动化运维工具Ansible的实战应用
【10月更文挑战第36天】在现代IT基础设施管理中,自动化运维已成为提升效率、减少人为错误的关键手段。本文通过介绍Ansible这一流行的自动化工具,旨在揭示其在简化日常运维任务中的实际应用价值。文章将围绕Ansible的核心概念、安装配置以及具体使用案例展开,帮助读者构建起自动化运维的初步认识,并激发对更深入内容的学习兴趣。
32 4
|
8天前
|
机器学习/深度学习 数据采集 人工智能
智能运维:从自动化到AIOps的演进与实践####
本文探讨了智能运维(AIOps)的兴起背景、核心组件及其在现代IT运维中的应用。通过对比传统运维模式,阐述了AIOps如何利用机器学习、大数据分析等技术,实现故障预测、根因分析、自动化修复等功能,从而提升系统稳定性和运维效率。文章还深入分析了实施AIOps面临的挑战与解决方案,并展望了其未来发展趋势。 ####
|
12天前
|
运维 监控 数据安全/隐私保护
自动化运维工具的设计与实现
【10月更文挑战第34天】在现代IT基础设施管理中,自动化运维工具扮演着至关重要的角色。它们不仅提高了运维效率,还确保了服务的连续性和稳定性。本文将深入探讨如何设计并实现一个自动化运维工具,从需求分析到功能实现,再到最终的测试与部署。我们将通过一个简单的代码示例来展示如何自动执行常见的运维任务,如日志清理和性能监控。文章旨在为读者提供一套完整的方法论,以便他们能够构建自己的自动化运维解决方案。
|
17天前
|
机器学习/深度学习 数据采集 运维
智能化运维:机器学习在故障预测和自动化响应中的应用
智能化运维:机器学习在故障预测和自动化响应中的应用
42 4
|
1月前
|
运维 关系型数据库 MySQL
自动化运维工具Ansible的实战应用
【10月更文挑战第9天】在现代IT运维领域,效率和可靠性是衡量一个系统是否健康的重要指标。自动化运维工具Ansible因其简洁、易用的特性,成为了众多企业和开发者的首选。本文将通过实际案例,展示如何利用Ansible进行日常的运维任务,包括配置管理、软件部署以及批量操作等,帮助读者深入理解Ansible的应用场景及其带来的效益。
|
1月前
|
JavaScript 前端开发 搜索推荐
Gulp:构建自动化与任务管理的强大工具
【10月更文挑战第13天】Gulp:构建自动化与任务管理的强大工具
68 0
|
1月前
|
机器学习/深度学习 人工智能 运维
构建高效运维体系:从自动化到智能化的演进
本文探讨了如何通过自动化和智能化手段,提升IT运维效率与质量。首先介绍了自动化在简化操作、减少错误中的作用;然后阐述了智能化技术如AI在预测故障、优化资源中的应用;最后讨论了如何构建一个既自动化又智能的运维体系,以实现高效、稳定和安全的IT环境。
65 4
|
1月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
54 4