saltstack由浅入深
1. saltstack功能
远程执行
配置管理
云管理
2. 对比软件
puppet ruby写的
ansible python写的
3. 官方网站
saltstack.com官方网站
www.saltstack.cn中文网站
https://www.unixhot.com/docs/saltstack/
4. 四种运行方式
1. local
2. minion/master C/S架构
3. Syndic
4. Salt SSH:不需要安装minion
5. saltstack的安装方法
repo.saltstack.com,在此网站上选择你要安装的版本,并选择你的操作系统。
Run the following commands to install the SaltStack repository and key: sudo yum install https://repo.saltstack.com/yum/redhat/salt-repo-2017.7-1.el7.noarch.rpm Run sudo yum clean expire-cache Install the salt-minion, salt-master, or other Salt components: sudo yum install salt-master sudo yum install salt-minion sudo yum install salt-ssh sudo yum install salt-syndic sudo yum install salt-cloud sudo yum install salt-api (Upgrade only) Restart all upgraded services, for example: sudo systemctl restart salt-minion
如果有的网络问题,可以配置
centos6
rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/epel/epel-release-latest-6.noarch.rpm
然后执行yum install salt-minion -y
centos7
rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/epel/epel-release-latest-7.noarch.rpm
然后执行yum install salt-minion -y
报错:
Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again
[root@localhost ~]# ping www.baidu.com
解决方法:
https://www.cnblogs.com/dadong616/p/5062727.html
其它安装方法:
[root@linux-node1 ~]# cat /etc/yum.repos.d/saltstack.repo [saltstack-repo] name=SaltStack repo for RHEL/CentOS $releasever baseurl=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest enabled=1 gpgcheck=0
6. salt-minion的配置文件需要配置一下master参数,然后启动服务。
master: 192.168.1.130
id: 192.168.1.29
/etc/init.d/salt-minion start
systemctl start salt-minion
7. master与minion如何进行认证的?这个过程要熟悉。
1. minion在第一次启动的时候,会创建一个pki目录,会master和minion目录,还会有minion.pem和minion.pub。
2.
3. salt-key -a minion-name 添加某个主机key
4. salt-key -L 查看所有的主机
5. salt-key -d minion-name 删除某个主机key
6. salt-key -A 添加所有主机key
7. 在master和minion上比较某台主机的密钥是否一致。
master: salt-key -f minion-one
minion: salt-call --local key.finger
两个值一致,说明密钥正确。
8. master自动签发
修改/etc/salt/master文件中的: auto_accept: True
8. salt命令
1. 语法
      • salt [options] '<target>' <function> [arguments]
                      • target指的是在哪些Minion上执行,如果在全部Minion上运行,可以采用通配符 '*’
1. 全局匹配
* 匹配所有字符
? 匹配任意一个字符,不能为空
[] 匹配中括号中的任意一个字符
salt '*' test.ping
salt 'minion-?' test.ping
salt "[a-z]inion-one" test.ping
2. 正则表达式
salt -E '^Minion.*' test.ping #主机名以Minion开头
3. 列表匹配
salt -L “Minion,Minion1” test.ping
4. 组匹配
在/etc/salt/master配置文件中,填写内容如下:
            
也可以创建文件/etc/salt/master.d/nodegroups.conf.
salt -N groups test.ping
5. Grians匹配
salt -G 'os:CentOS' test.ping
salt "minion-one" grains.items
os:CentOS(默认存在)是Grains的键值对,数据以yaml保存在minion上,可在minion端直接编辑/etc/salt/grains,yaml格式。
6. 复合匹配
salt -C 'G@os:CentOS or L@Minion' test.ping
7. Pillar值匹配
salt -I 'key:value' test.ping
/etc/salt/master设置pillar_roots,数据以yaml保存在Master上
8. CIDR匹配(网段匹配)
salt -S '10.252.137.0/24' test.ping
9. saltstack与ZeroMQ
1. 发布与订阅模式
saltstack master运行两个网络服务,其中一个是ZeroMQ PUB系统,使用的端口是4505。
所有的minion都连接master的4505端口。
4505用来发送消息。
4506用来接收返回消息。
2. 请求与响应模式
3. 题外:安装一个包,查看salt-master的名称。
yum install -y python-setproctitle
重启一下salt-master
再查看ps -ef | grep salt
10. 模块与功能
列出所有可用模块
salt '随便一台主机名' sys.list_modules
查看模块所有功能
salt '随便一台主机名'  sys.list_functions 模块名
查看模块用法
salt '随便一台主机名' sys.doc 模块名
salt '随便一台主机名' sys.doc 模块名.方法
内置模块
http://blog.51cto.com/davideylee/1571951
远程命令执行模块cmd
salt "*" cmd.run "ifconfig"
安装包管理模块pkg
安装:salt "*" pkg.install "httpd"
查看:salt "*" pkg.version "httpd" salt '192.168.1.52' pkg.version 'elasticsearch'
删除:salt "*" pkg.remove "httpd"
管理服务模块service
启动:salt "*" service.start httpd
停止:salt "*" service.stop httpd
查看:salt "*" service.status httpd
文件管理模块file
查看:salt "*" file.stats /etc/yum.conf
修改:salt "*" file.chown /etc/passwd root root
用户管理模块
创建:salt "*" user.add "mysql"
删除:salt "*" user.delete "mysql"
查看:salt "*" user.info mysql
11. 什么是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']}
12. Grains基础
• Grains是saltstack最重要的组件之一 • 存储minion端的基本信息,这些信息一般都是静态的,如CPU、内核、操作系统等 • Grains存储在minion本地 • 管理员可以在minion端进行grains值的修改,如增加、删除等
Grains的作用:
1. 资产管理。信息查询。
salt '*' grains.ls 列出所有的keys
salt '*' grains.items
结果如下:
192.168.1.6:
    ----------
    SSDs:
    biosreleasedate:
        10/18/2011
    biosversion:
        6.1.0
    cpu_flags:
        - fpu
        - vme
        - de
        - pse
        - tsc
        - msr
        - pae
        - mce
        - cx8
        - apic
        - mtrr
        - pge
        - mca
        - cmov
        - pat
        - pse36
        - clflush
        - dts
        - acpi
        - mmx
        - fxsr
        - sse
        - sse2
        - ss
        - ht
        - tm
        - pbe
        - syscall
        - nx
        - pdpe1gb
        - rdtscp
        - lm
        - constant_tsc
        - arch_perfmon
        - pebs
        - bts
        - rep_good
        - xtopology
        - nonstop_tsc
        - aperfmperf
        - pni
        - pclmulqdq
        - dtes64
        - monitor
        - ds_cpl
        - vmx
        - smx
        - est
        - tm2
        - ssse3
        - cx16
        - xtpr
        - pdcm
        - dca
        - sse4_1
        - sse4_2
        - popcnt
        - aes
        - lahf_lm
        - arat
        - dts
        - tpr_shadow
        - vnmi
        - flexpriority
        - ept
        - vpid
    cpu_model:
        Intel(R) Xeon(R) CPU           E5606  @ 2.13GHz
    cpuarch:
        x86_64
    domain:
        zhenpin.com
    fqdn:
        b.zhenpin.com
    fqdn_ip4:
        - 119.254.106.54
    fqdn_ip6:
    gpus:
        |_
          ----------
          model:
              MGA G200eW WPCM450
          vendor:
              unknown
    host:
        b
    hwaddr_interfaces:
        ----------
        em1:
            d4:be:d9:b1:44:e3
        em2:
            d4:be:d9:b1:44:e5
        em3:
            d4:be:d9:b1:44:e7
        em4:
            d4:be:d9:b1:44:e9
        lo:
            00:00:00:00:00:00
        virbr0:
            52:54:00:d4:42:c9
        virbr0-nic:
            52:54:00:d4:42:c9
    id:
        192.168.1.6
    ip4_interfaces:
        ----------
        em1:
            - 192.168.1.6
        em2:
            - 172.168.1.2
        em3:
            - 119.254.106.54
        em4:
        lo:
            - 127.0.0.1
        virbr0:
            - 192.168.122.1
        virbr0-nic:
    ip6_interfaces:
        ----------
        em1:
        em2:
        em3:
        em4:
        lo:
        virbr0:
        virbr0-nic:
    ip_interfaces:
        ----------
        em1:
            - 192.168.1.6
        em2:
            - 172.168.1.2
        em3:
            - 119.254.106.54
        em4:
        lo:
            - 127.0.0.1
        virbr0:
            - 192.168.122.1
        virbr0-nic:
    ipv4:
        - 119.254.106.54
        - 127.0.0.1
        - 172.168.1.2
        - 192.168.1.6
        - 192.168.122.1
    ipv6:
    kernel:
        Linux
    kernelrelease:
        2.6.32-279.14.1.el6.x86_64
    locale_info:
        ----------
        defaultencoding:
            UTF8
        defaultlanguage:
            zh_CN
    localhost:
        zpdc.zhenpin.com
    lsb_distrib_codename:
        Final
    lsb_distrib_id:
        CentOS
    lsb_distrib_release:
        6.3
    machine_id:
        2248cdccd5b13b32fc845bdb00000029
    manufacturer:
        Dell Inc.
    master:
        192.168.1.130
    mem_total:
        24013
    nodename:
        zpdc.zhenpin.com
    num_cpus:
        4
    num_gpus:
        1
    os:
        CentOS
    os_family:
        RedHat
    osarch:
        x86_64
    oscodename:
        Final
    osfinger:
        CentOS-6
    osfullname:
        CentOS
    osmajorrelease:
        6
    osrelease:
        6.3
    osrelease_info:
        - 6
        - 3
    path:
        /sbin:/usr/sbin:/bin:/usr/bin
    productname:
        PowerEdge R610
    ps:
        ps -efH
    pythonexecutable:
        /usr/bin/python
    pythonpath:
        - /usr/bin
        - /usr/lib64/python26.zip
        - /usr/lib64/python2.6
        - /usr/lib64/python2.6/plat-linux2
        - /usr/lib64/python2.6/lib-tk
        - /usr/lib64/python2.6/lib-old
        - /usr/lib64/python2.6/lib-dynload
        - /usr/lib64/python2.6/site-packages
        - /usr/lib64/python2.6/site-packages/gtk-2.0
        - /usr/lib/python2.6/site-packages
        - /usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-info
    pythonversion:
        - 2
        - 6
        - 6
        - final
        - 0
    saltpath:
        /usr/lib/python2.6/site-packages/salt
    saltversion:
        2014.7.0
    saltversioninfo:
        - 2014
        - 7
        - 0
        - 0
    selinux:
        ----------
        enabled:
            False
        enforced:
            Disabled
    serialnumber:
        GFM393X
    server_id:
        1067966929
    shell:
        /bin/bash
    virtual:
        physical
    zmqversion:
        3.2.4      salt '192.168.1.6' grains.item os       
2. 用于目标选择。
salt -G 'os:CentOS' cmd.run 'ifconfig'
通过minion定义grains [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
注意1:生产环境不建议直接修改minion配置文件,建议使用/etc/salt/grains文件(在minion上)。内容如下:

添加完以后,重启一下minion,否则不生效。
/etc/init.d/salt-minion restart
也可以使用命令,直接刷新,不用重启minion。
sudo salt '192.168.1.6' saltutil.sync_grains
注意2:如果我有多个grains标签,那么如何查找呢?
sudo salt -C 'G@os:CentOS and G@name:yangjianbo' cmd.run 'ifconfig'
注意3:top.sls中也可以使用grains。
base:
  'cloud:openstack':
    - match: grain
    - zabbix.init  
3. 开发一个Grains
python.写一个python脚本,返回一个字典就可以了。
cd /srv/salt
mkdir _grains
cd _grains
编写一个python脚本,内容如下:
#!/usr/bin/env python
#-*- coding: utf-8 -*-
def my_grains():
    grains = {}
    grains['a']= 'openstack'
    grains['b']= 'haha'
    return grains
然后从master同步到minion,sudo salt '192.168.1.6' saltutil.sync_grains
这个文件会放到minion的/var/cache/salt/minion/extmods/grains。
4. grains的优先级
1. 系统自带
2. grains文件写的
3. minion配置文件写的
4. 自定义写的
13. Pillar基础
1. Pillar数据是动态的。给特定的minion指定特定的数据。只能指定的minion自己能看到自己的数据。
2.
14. saltstack远程执行-指定目标
1. 结构
命令:salt
目标:'*'
模块:cmd.run 自带150多模块 自己写模块
返回:执行后结果返回,returnners
2. 目标
与minion ID有关 通配符 列表匹配 正则匹配
与minion ID无关 grains 组匹配 混合匹配
15. saltstack远程执行-执行模块
1. 模块位置: /usr/lib/python2.6/site-packages/salt/modules
2. network模块
1. salt '*' network.active_tcp 显示活动的TCP连接数
3. service模块
1. salt '*' service.get_all 显示所有的服务
4. cp模块
1. sudo salt-cp -L '192.168.1.164,192.168.1.165' /home/scripts/iptables_script.sh /home/
5. state模块
16. saltstack远程执行-返回程序
1. 返回到mysql
安装Mysql-python
安装mysql数据库
17. 配置管理
13. 实战操作
sudo salt -L "192.168.1.46" cmd.run " rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/6/x86_64/zabbix-agent-3.0.4-1.el6.x86_64.rpm"
Server=127.0.0.1
sudo salt -L "192.168.1.46" cmd.run "sed -i 's#Server=127.0.0.1#Server=192.168.1.29#g' /etc/zabbix/zabbix_agentd.conf"
ServerActive=127.0.0.1
sudo salt -L "192.168.1.46" cmd.run "sed -i 's#ServerActive=127.0.0.1#ServerActive=192.168.1.29#g' /etc/zabbix/zabbix_agentd.conf"
Hostname=Zabbix server
sudo salt -L "192.168.1.46" cmd.run "sed -i 's#Hostname=Zabbix server#Hostname=192168146#g' /etc/zabbix/zabbix_agentd.conf"
sudo salt -L "192.168.1.47,192.168.1.48" cmd.run "/etc/init.d/zabbix-agent start"
15. top.sls的使用
base:
  '*':
    - core
    - edit
16. saltstack的master配置文件,修改如下内容:
##### Node Groups ##### ########################################## # Node groups allow for logical groupings of minion nodes. A group consists of a group # name and a compound target. nodegroups: # group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com and bl*.domain.com' # group2: 'G@os:Debian and foo.domain.com' test1: S@192.168.1.115 home: L@192.168.1.51,192.168.1.192.168.1.216,192.168.1.81,192.168.1.82,192.168.1.83,192.168.1.84 search: L@192.168.1.70,192.168.1.40,192.168.1.168,192.168.1.207,192.168.1.129,192.168.1.188 tls: L@192.168.1.166,192.168.1.211,192.168.1.188,192.168.1.182 cart: L@192.168.1.196,192.168.1.208,192.168.1.85,192.168.1.86 order: L@192.168.1.209,192.168.1.87,192.168.1.88,192.168.1.89 product: L@192.168.1.228,192.168.1.193,192.168.1.188,192.168.1.179 activity: L@192.168.1.90,192.168.1.91,192.168.1.190,192.168.1.25 uc: L@192.168.1.225,192.168.1.214,192.168.1.92,192.168.1.93 pay: L@192.168.1.114,192.168.1.195,192.168.1.94,192.168.1.95 ppt: L@192.168.1.215,192.168.1.41,192.168.1.96,192.168.1.97 home_t: L@192.168.1.128,192.168.1.169,192.168.1.135,192.168.1.78 search_t: L@192.168.1.128,192.168.1.169,192.168.1.135,192.168.1.78 tls_t: L@192.168.1.128,192.168.135,192.168.1.78 cart_t: L@192.168.1.62,192.168.1.173,192.168.1.124,192.168.1.79 order_t: L@192.168.1.62,192.168.1.173,192.168.1.124,192.168.1.79 product_t: L@192.168.1.62,192.168.1.173,192.168.1.124,192.168.1.79 activity_t: L@192.168.1.169,192.168.1.128,192.168.1.135,192.168.1.78 uc_t: L@192.168.1.135,192.168.1.128,192.168.1.169,192.168.1.78 pay_t: L@192.168.1.173,192.168.1.62,192.168.1.124,192.168.1.79 ppt_t: L@192.168.1.173,192.168.1.62,192.168.1.124,192.168.1.79
修改完成后,可以通过-n nodegroups名称来指定计算机。
17. saltstack批量安装zabbix
sudo salt -L '192.168.1.54' state.sls zabbix.init
18. saltstack报错
The key glob '192.168.1.231' does not match any unaccepted keys.
salt-key -d 192.168.1.231
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号