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

    

    

 

  

    

    

            

posted @ 2018-04-11 18:31  奋斗史  阅读(959)  评论(0)    收藏  举报