自动化配置管理工具 SaltStack-01

一、SaltStack简介

SaltStack (以下简称为 Salt)是基于 Python 开发的 一套 C/S 架构配置管理工具,其底层 使用的是 ZeroMQ 消息队列 PUB/SUB 方式通信,并且使用 SSL 证书签发的方式来进行认 证管理 。

Saltstack 比 Puppet 出来晚几年,是基于Python 开发的,也是基于 C/S 架构,服务端 master 和客户端 minions ;Saltstack 和 Puppet 很像,可以说 Saltstatck 整合了 Puppet 和 Chef 的功能,更加强大,更适合大规模批量管理服务器,并且它比 Puppet 更容易配置。

三大功能: 远程命令执行,配置管理(服务,文件,cron,用户,组),云管理。

支持系统:大多数都支持,windows 上不支持安装 master。

Salt的具体步骤如下

  • 第一步:salt stack的master与minion之间通过ZeroMq进行消息传递,使用了ZeroMq的发布-订阅模式,连接方式包括tcp,ipc。
  • 第二步:salt命令,以ls查看为例,将cmd.run ls命令从salt.client.LocalClient.cmd_cli发布到master,获取一个Jobid,根据jobid获取命令执行结果。
  • 第三步:master接收到命令后,将要执行的命令发送给客户端minion。
  • 第四步:minion从消息总线上接收到要处理的命令,交给minion._handle_aes处理。
  • 第五步:minion._handle_aes发起一个本地线程调用cmdmod执行ls命令。线程执行完ls后,调用minion._return_pub方法,将执行结果通过消息总线返回给master。
  • 第六步:master接收到客户端返回的结果,调用master._handle_aes方法,将结果写的文件中。
  • 第七步:salt.client.LocalClient.cmd_cli通过轮询获取Job执行结果,将结果输出到终端

Salt的优势

  • 基于 C/S 架构设计,部署简单方便。
  • 主控端(Master)和被控端(Minion)基于证书认证,安全可靠.
  • 配置简单、功能强大,可扩展性强 。
  • 支持 API 及自定义模块,可以通过 Python 轻松扩展 。
  • 速度优于其他自动化配置管理工具 。
  • 支持现如今所有流行的云平台及 Docker 和 openstack。

二、Salt的安装

Salt 的依赖组件大家可 以参考如下网址: http://docs.saltstack.com/en/latest/topics/installation/index.html

Salt 目前的通信模式总共分为两种模式 : ZeroMQ 和 REAT。 鉴于 REAT 目前还不是太 稳定,我们在这里选择 ZeroMQ 模式 。

1、环境介绍

所有主机均已关闭selinux与防火墙

机器主机名角色IP系统
serverMaster172.17.7.101CentOS7.5 x86_64
node1Minion172.17.7.102CentOS7.5 x86_64
node2Minion172.17.7.103CentOS7.5 x86_64

2、Master安装(server)

#更改主机名
[root@linuxli ~]# hostnamectl set-hostname server

#配置IP地址
[root@server ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:da:bd:33 brd ff:ff:ff:ff:ff:ff
    inet 172.17.7.101/16 brd 172.17.255.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::8670:9455:18a2:d70a/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

#安装epal源(包含salt的各种安装包)
[root@server ~]# yum -y install epel-release

#安装salt-master
[root@server ~]# yum -y install salt-master

#启动master
[root@server ~]# systemctl enable salt-master.service
Created symlink from /etc/systemd/system/multi-user.target.wants/salt-master.service to /usr/lib/systemd/system/salt-master.service.

[root@server ~]# systemctl start salt-master.service

#查看版本
[root@server ~]# salt --version
salt 2015.5.10 (Lithium)

#查看salt依赖包的版本
[root@server ~]# salt --versions-repo
           Salt: 2015.5.10
         Python: 2.7.5 (default, Apr 11 2018, 07:36:10)
         Jinja2: 2.8.1
       M2Crypto: 0.21.1
 msgpack-python: 0.5.6
   msgpack-pure: Not Installed
       pycrypto: 2.6.1
        libnacl: Not Installed
         PyYAML: 3.10
          ioflo: Not Installed
          PyZMQ: 14.7.0
           RAET: Not Installed
            ZMQ: 4.1.4
           Mako: Not Installed
        Tornado: Not Installed
        timelib: Not Installed
       dateutil: Not Installed

#查看安装目录
[root@server ~]# tree /etc/salt/

/etc/salt/
├── master
└── pki
    └── master
        ├── master.pem
        ├── master.pub
        ├── minions
        ├── minions_autosign
        ├── minions_denied
        ├── minions_pre
        └── minions_rejected


3、Minion安装(node1+node2)

#更改主机名
[root@linuxli ~]# hostnamectl set-hostname node1

#配置IP
[root@node1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:ee:07:04 brd ff:ff:ff:ff:ff:ff
    inet 172.17.7.102/16 brd 172.17.255.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::2cf0:27cb:417c:9cf5/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
    inet6 fe80::8670:9455:18a2:d70a/64 scope link tentative noprefixroute dadfailed
       valid_lft forever preferred_lft forever
 
#安装epal源(包含salt的各种安装包)
[root@node1 ~]# yum -y install epel-release

#安装salt-minion
[root@node1 ~]# yum -y install salt-minion

#修改配置文件
[root@node1 ~]# sed -i 's/#master: salt/master: 172.17.7.101/g' /etc/salt/minion			//指定master的ip

[root@node1 ~]# sed -i 's/#id:/id: node1/g' /etc/salt/minion			//设置当前minion的id号(唯一id,node2自行设置)

#启动minion
[root@node1 ~]# systemctl enable salt-minion.service
Created symlink from /etc/systemd/system/multi-user.target.wants/salt-minion.service to /usr/lib/systemd/system/salt-minion.service.

[root@node1 ~]# systemctl start salt-minion.service


4、Master中认证minion节点

#查看salt安装目录
[root@server ~]# tree /etc/salt/
/etc/salt/
├── master
└── pki
    └── master
        ├── master.pem
        ├── master.pub
        ├── minions
        ├── minions_autosign
        ├── minions_denied
        ├── minions_pre
        │   ├── node1
        │   └── node2
        └── minions_rejected

#查看证书认证管理情况
[root@server ~]# salt-key -L

Accepted Keys:
Denied Keys:
Unaccepted Keys:
node1
node2
Rejected Keys:

#接受所有的证书
[root@server ~]# salt-key -A

The following keys are going to be accepted:
Unaccepted Keys:
node1
node2
Proceed? [n/Y] y
Key for minion node1 accepted.
Key for minion node2 accepted.

[root@server ~]# salt-key -L
Accepted Keys:
node1
node2
Denied Keys:
Unaccepted Keys:
Rejected Keys:

[root@server ~]# tree /etc/salt/
/etc/salt/
├── master
└── pki
    └── master
        ├── master.pem
        ├── master.pub
        ├── minions
        │   ├── node1
        │   └── node2
        ├── minions_autosign
        ├── minions_denied
        ├── minions_pre
        └── minions_rejected
        
#测试连通性
[root@server ~]# salt '*' test.ping

node1:
    True
node2:
    True

#查看master与minion建立的连接
[root@server ~]# lsof -ni |grep 4505
salt-mast 1978   root   13u  IPv4  22129      0t0  TCP *:4505 (LISTEN)
salt-mast 1978   root   15u  IPv4  37463      0t0  TCP 172.17.7.101:4505->172.17.7.103:35400 (ESTABLISHED)
salt-mast 1978   root   16u  IPv4  37465      0t0  TCP 172.17.7.101:4505->172.17.7.102:59438 (ESTABLISHED)

[root@server ~]# lsof -ni |grep 4506
salt-mast 1998   root   21u  IPv4  22135      0t0  TCP *:4506 (LISTEN)
salt-mast 1998   root   28u  IPv4  37459      0t0  TCP 172.17.7.101:4506->172.17.7.103:53706 (ESTABLISHED)
salt-mast 1998   root   29u  IPv4  37462      0t0  TCP 172.17.7.101:4506->172.17.7.102:54892 (ESTABLISHED)


如果 Master上面没有配置“ auto_accept:True”(自动认证), 那么 Salt证书管理命令如下:

  • 查看所有的key情况:salt-key -L
  • 接受某个key:salt-key -a ID
  • 接受所有的key:salt-key -A
  • 删除某个key:salt-key -d
  • 删除所有的key:salt-key -D

5、Salt的命令格式

Salt的命令格式比较简单,具体如下所示:

salt '操作目标' 方法 [参数]

example: 

salt '*' test.ping

查看所有的minion状态:

[root@server ~]# salt-run manage.status

down:
up:
    - node1
    - node2

查看所有没在线的Minion

[root@server ~]# salt-run manage.down

查看所有在线的Minion

[root@server ~]# salt-run manage.up
- node1
- node2

查看Minion的版本, 该命令会提示哪些Minion的版本需要升级:

[root@server ~]# salt-run manage.versions
Master:
    2015.5.10
Up to date:
    ----------
    node1:
        2015.5.10
    node2:
        2015.5.10
        

三、Salt的常用组件

1、Salt常用的操作目标

Salt在工作中不仅仅只操作单 Minion机器,它还可以以范围 、 主机 ID列表及网段的 形式来集成化地操作 Minion 机器, 工作中常用的操作目标包括如下几种。

  • 1 )匹配所有目标,我们前面应该提到过其用法,即“*”,示例代码如下所示:
[root@server ~]# salt '*' test.ping

  • 2)单机操作,这里比较简单, salt后面直接带上单机的 ID 号即可,示例代码如下所示:
[root@server ~]# salt 'node1' cmd.run 'free -m'

  • 3)正则匹配( -E),顾名思义,即通过正则表达式来进行匹配即可,示例代码如下所示:
[root@server ~]# salt -E '^n' test.ping

  • 4)通过主机 ID 名列表的形式进行匹配(- L),示例代码如下所示:
[root@server ~]# salt -L 'node1,node2' test.ping

  • 5)根据Minion端的IP或子网进行匹配(-S), 示例代码如下所示:
[root@server ~]# salt -S 172.17.0.0/16 test.ping

  • 6)根据 Minion 端的 grains 详细信息进行匹配过滤( -G),例如,获取主机发行版本为 7.5.1804 的 Python 版本号,示例代码如下所示:
[root@server ~]# salt -G 'osrelease:7.5.1804' cmd.run 'python -V'
node2:
    Python 2.7.5
node1:
    Python 2.7.5
    
  • 7)根据分组名称来进行匹配过滤,即“-N (…nodegroup)”, 我们一般会根据业务类型 来划分分组,因为业务类型具备相同的特点,包括部署环境 、 应用平台、配置文件等
[root@server ~]# vim /etc/salt/master.d/nodegroup.conf

nodegroups:
  backup: 'L@61.174.1.2, 61.174.1.3 ,'
  waf: 'L@192 .168.1.4,192.168.1.5,192.168.1.6,'
  hadoop: 'L@192.168.1.10,192.168.1.11,192.168.1.12,’ 
  dns: 'L@192.168.1.99,192.168.1.100,192.168.1.101,’

[root@server ~]# salt -N waf test.ping

2、Salt常用模块

Salt 提供了非常丰富的模块( Module)功能 涉及操作系统的基础功能 、 常用工具支持 等,模块是由一系列的 Python 函数组合在一起形成的函数组合 。

使用 Salt的sys模块的list_modules函数列举了 Minion上的所有模块(这里还是以上 面的俩台node机器进行举例说明):

[root@server ~]# salt 'node1' sys.list_modules

[root@server ~]# salt 'node1' sys.list_modules
node1:
    - acl
    - aliases
    - alternatives
    - archive
    - artifactory
    - augeas
    - blockdev
    - btrfs
    - buildout
    - cloud
    - cmd
    - composer
    - config
    - container_resource
    - cp
    - cron
    - data
    - defaults
    - devmap
    - disk
    - django
    - dnsmasq
    - dnsutil
    - drbd
    - elasticsearch
    - environ
    - etcd
    - event
    - extfs
    - file
    - firewalld
    - gem
    - genesis
    - git
    - gnome
    - grains
    - group
    - hashutil
    - hg
    - hipchat
    - hosts
    - http
    - img
    - incron
    - ini
    - introspect
    - ip
    - ipset
    - iptables
    - jboss7
    - jboss7_cli
    - key
    - keyboard
    - kmod
    - locale
    - locate
    - logrotate
    - lowpkg
    - lvm
    - match
    - mine
    - modjk
    - mount
    - network
    - openstack_config
    - pagerduty
    - partition
    - pillar
    - pip
    - pkg
    - pkg_resource
    - postfix
    - publish
    - pyenv
    - random
    - random_org
    - rbenv
    - ret
    - rsync
    - runit
    - rvm
    - s3
    - saltutil
    - schedule
    - scsi
    - sdb
    - seed
    - serverdensity_device
    - service
    - shadow
    - slack
    - smtp
    - sqlite3
    - ssh
    - state
    - status
    - supervisord
    - svn
    - sys
    - sysctl
    - syslog_ng
    - system
    - test
    - timezone
    - user
    - vbox_guest
    - virtualenv
    - xfs

#举例模块内的可用函数
[root@server ~]# salt 'node1' sys.list_functions test
node1:
    - test.arg
    - test.arg_repr
    - test.arg_type
    - test.assertion
    - test.attr_call
    - test.collatz
    - test.conf_test
    - test.cross_test
    - test.echo
    - test.exception
    - test.fib
    - test.get_opts
    - test.kwarg
    - test.module_report
    - test.not_loaded
    - test.opts_pkg
    - test.outputter
    - test.ping
    - test.provider
    - test.providers
    - test.rand_sleep
    - test.rand_str
    - test.retcode
    - test.sleep
    - test.stack
    - test.try_
    - test.tty
    - test.version
    - test.versions_information
    - test.versions_report

#查看某个模块中某个函数的用法
[root@server ~]# salt 'node1' sys.doc test.ping
'test.ping:'

    Used to make sure the minion is up and responding. Not an ICMP ping.

    Returns ``True``.

    CLI Example:

        salt '*' test.ping

3、远程命令执行模块

在多台主机上同时执行一条相同命令, 比如像获取所有的Minion端的内存使用情况

cmd模块可以 执行所有命令 , 这就意味着它存在安全隐患 , 使用时需要评估风险

[root@server ~]# salt '*' cmd.run 'free -m'

node2:
                  total        used        free      shared  buff/cache   available
    Mem:            991         116         455           6         419         703
    Swap:          2047           0        2047
node1:
                  total        used        free      shared  buff/cache   available
    Mem:            991         117         451           6         422         701
    Swap:          2047           0        2047

在所有的 Minion 端执行 test.sh 脚本

>此时我们应该要保证 Master端的 /srv/salt 目录里面有 test.sh程序, 它在执行 的过程会做两个动作: 首 先同 步 test.sh 到 Minion 端 的 cache 目 录(/var/cache/salt/minion/ 们Ies/base/),然后再执行之 。

[root@server ~]# salt '*' cmd.script salt://test.sh
node1:
    ----------
    cache_error:
        True
    pid:
        0
    retcode:
        1
    stderr:
    stdout:
node2:
    ----------
    cache_error:
        True
    pid:
        0
    retcode:
        1
    stderr:
    stdout:



4、用户和用户组模块(即group和user)

  • group.add

group.add:添加指定用户组

[root@server ~]# salt '*' group.add test 505
node1:
    True
node2:
    True

  • group.info

group.info:返回用户组信息

比如,我们可以用此命令查看刚才建立的 test组的信息

[root@server ~]# salt '*' group.info test
node2:
    ----------
    gid:
        505
    members:
    name:
        test
    passwd:
        x
node1:
    ----------
    gid:
        505
    members:
    name:
        test
    passwd:
        x
  • group.getent

group.getent:返回所有用户组的信息

[root@server ~]# salt '*' group.getent

  • user.add

user.add:在所有的minion端上创建一个用户

用法:

salt ‘*’ user.add name

例如,我们在所有的 Minion端上建立 test用户 , uid和 gid分别为 505, home目录为/home/test, shell 为 /bin/bash

[root@server ~]# salt '*' user.add test 505 505 test /home/test /bin/bash
node1:
    True
node2:
    True

  • user.info

user.info:返回用户信息,我们可以用此命令查看刚刚建立的test用户

[root@server ~]# salt '*' user.info test
node1:
    ----------
    fullname:
    gid:
        505
    groups:
        - test
    home:
        /home/test
    homephone:
    name:
        test
    passwd:
        x
    roomnumber:
    shell:
        /bin/bash
    uid:
        505
    workphone:
node2:
    ----------
    fullname:
    gid:
        505
    groups:
        - test
    home:
        /home/test
    homephone:
    name:
        test
    passwd:
        x
    roomnumber:
    shell:
        /bin/bash
    uid:
        505
    workphone:
    
  • group.adduser

group.adduser:添加一个用户到指定组中(必须是一个已经存在的组和已经存在的用户)

[root@server ~]# salt '*' user.add test1
node1:
    True
node2:
    True
    
[root@server ~]# salt '*' group.adduser test1 test
node1:
    True
node2:
    True
    
  • group.deluser

比如 ,我们从 test组里删除之前建立 的 test用户

[root@server ~]# salt '*' group.deluser test1 test
node1:
    True
node2:
    True
    

不要搞反了,前面是用户名,后面是组名

  • user.delete

user.delete:在Minion端删除一个用户

[root@server ~]# salt '*' user.delete test1
node1:
    True
node2:
    True
    

5、cp模块

cp模块的功能: 实现远程文件和目录的复制,以及下载 URL等操作。

  • 1)下载指定 URL 的内 容到指定位置:
[root@server ~]# salt '*' cp.get_url http://www.baidu.com/index.html /tmp/index.html
node2:
    /tmp/index.html
node1:
    /tmp/index.html
    
  • 2)将 Master机器的 /etc/hosts文件复制到 Minion端的指定位置:
[root@server ~]# salt '*' cp.cache_local_file /etc/hosts
node1:
    /var/cache/salt/minion/localfiles/etc/hosts
node2:
    /var/cache/salt/minion/localfiles/etc/hosts
    
  • 3)将 Master机器的 test.sh文件复制到 Minion端的指定位置:
[root@server ~]# mkdir -p /srv/salt

[root@server ~]# touch /srv/salt/test.sh

[root@server ~]# salt '*' cp.get_file salt://test.sh /tmp/test.sh
node1:
    /tmp/test.sh
node2:
    /tmp/test.sh
    

如果目标目录不存在的话,带上makedirs=True 参数,则创建该目录

6、pkg包管理

pkg包管理模块的功能 : 管理 Minion端机器的程序包,例如我们最常见的 yum 和 apt­ get 等

  • 1)为所有的 Minion 端安装 Nginx 包
[root@server ~]# salt '*' pkg.install nginx

  • 2)为node1主机安装php包
[root@server ~]# salt 'node1' pkg.install php
node1:
    ----------
    httpd:
        ----------
        new:
            2.4.6-89.el7.centos
        old:
    httpd-tools:
        ----------
        new:
            2.4.6-89.el7.centos
        old:
    libzip:
        ----------
        new:
            0.10.1-8.el7
        old:
    mailcap:
        ----------
        new:
            2.1.41-2.el7
        old:
    php:
        ----------
        new:
            5.4.16-46.el7
        old:
    php-cli:
        ----------
        new:
            5.4.16-46.el7
        old:
    php-common:
        ----------
        new:
            5.4.16-46.el7
        old:
        
  • 3)为vagrantI 主机卸载php包
[root@server ~]# salt 'node1' pkg.remove php
node1:
    ----------
    php:
        ----------
        new:
        old:
            5.4.16-46.el7
            

7、service服务模块

service 服务模块的功能:Minion 端程序包服务器管理模块

  • 1)所有的 Minion 端都开启 Nginx 服务
[root@server ~]# salt '*' service.start nginx
node1:
    True
node2:
    True
  • 2)所有的 Minion端都加载 Nginx服务
[root@server ~]# salt '*' service.reload nginx
node1:
    True
node2:
    True
    
  • 3)所有 的 Minion 端都关闭 Nginx 服务
[root@server ~]# salt '*' service.stop nginx
node1:
    True
node2:
    True
  • 4)查看所有的 Minion 端的 Nginx 服务状态
[root@server ~]# salt '*' service.status nginx
node1:
    False
node2:
    False
  • 5)开启所有 的 Minion 端的 Nginx 开机 自启动服务
[root@server ~]# salt '*' service.enable nginx
node1:
    True
node2:
    True
  • 6)关闭所有 的 Minion 端的 Nginx 开机自启动服务
[root@server ~]# salt '*' service.disable nginx
node1:
    True
node2:
    True

8、file文件服务模块

file文件服务模块的功能:针对所有的 Minion端文件的常见操作,例如文件读写、权 限控制等操作

  • 1)为所有的 Minion端 /tmp/index.html文件内容追加“hello,world”内容
[root@server ~]# salt '*' file.append /tmp/index.html 'hello,world'
node1:
    Wrote 1 lines to "/tmp/index.html"
node2:
    Wrote 1 lines to "/tmp/index.html"
    
  • 2)查看 /tmp/index.html的 stats信息
[root@server ~]# salt '*' file.stats /tmp/index.html

  • 3)查看/tmp/index.html 的 mode 权限信息
[root@server ~]# salt '*' file.get_mode /tmp/index.html
node1:
    0644
node2:
    0644
  • 4)将 /tmp/route_auto.sh 的 mode 权限信息修改为 755
[root@server ~]# salt '*' file.set_mode /tmp/index.html 755
node1:
    0755
node2:
    0755
  • 5)复制所有的 Minion端的 /tmp/index.html文件至 /root 目录下面
[root@server ~]# salt '*' file.copy /tmp/index.html /root/index.html
node1:
    True
node2:
    True
  • 6)所有 的 Minion 端都删除/tmp/index.html 文件
[root@server ~]# salt '*' file.remove '/tmp/index.html'
node1:
    True
node2:
    True

其实这些步骤也可以用cmd.run来代替

9、Cron模块

Cron 模块的功能:实现 Minion 端的 Crontab 操作

  • 1)查看 node1 机器的 root 用户的 Crontab 清单
[root@server ~]# salt 'node1' cron.raw_cron root
node1:

  • 2)添加 Minion 端的 Crontab 定时作业

参数说明:第一个参数为用户,剩下的表示分 、 时 、 日 、 月、周、命令 、 任务描述信息 (可忽略),建议每个参数都引用起来,比如说添加定时 ntpdate对时任务

[root@server ~]# salt 'node1' cron.set_job root '*/5' '*' '*' '*' '*' '/usr/sbin/ntpdate ntp.aliyun.com >>/dev/null 2>&1'
node1:
    new

[root@server ~]# salt 'node1' cron.raw_cron root
node1:
    # Lines below here are managed by Salt, do not edit
    */5 * * * * /usr/sbin/ntpdate ntp.aliyun.com >>/dev/null 2>&1

  • 3)查看指定 Minion端的 Crontab定时作业任务,后面记得要带上用户名(如 root)
[root@server ~]# salt 'node1' cron.ls root
node1:
    ----------
    crons:
        |_
          ----------
          cmd:
              /usr/sbin/ntpdate ntp.aliyun.com >>/dev/null 2>&1
          comment:
              None
          daymonth:
              *
          dayweek:
              *
          hour:
              *
          identifier:
              None
          minute:
              */5
          month:
              *
    env:
    pre:
    special:
    
  • 4)删除指定 Minion端的 Crontab定时作业任务.

例如,我们要删除刚才添加的 ntpdate对时任务( cmd记得带上)

[root@server ~]# salt 'node1' cron.rm_job root '/usr/sbin/ntpdate ntp.aliyun.com >>/dev/null 2>&1'
node1:
    removed
    

10、network模块

network模块的功能:返回 Minion端的详细网络信息。

  • 1)获取 node1 机器的网卡配置
[root@server ~]# salt 'node1' network.interfaces

  • 2)获取 node1 机器的 IP 地址配置信息
[root@server ~]# salt 'node1' network.ip_addrs
node1:
    - 172.17.7.102
  • 3)在 node1 机器上执行 dig 指定网站并获取相关信息
[root@server ~]# salt 'node1' cmd.run 'yum -y install bind-utils'

[root@server ~]# salt 'node1' network.dig www.baidu.com
node1:

    ; <<>> DiG 9.9.4-RedHat-9.9.4-74.el7_6.1 <<>> www.baidu.com
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60071
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ;; QUESTION SECTION:
    ;www.baidu.com.			IN	A

    ;; ANSWER SECTION:
    www.baidu.com.		1194	IN	CNAME	www.a.shifen.com.
    www.a.shifen.com.	218	IN	A	220.181.38.150
    www.a.shifen.com.	218	IN	A	220.181.38.149

    ;; Query time: 54 msec
    ;; SERVER: 8.8.8.8#53(8.8.8.8)
    ;; WHEN: Wed Jul 10 13:09:33 CST 2019
    ;; MSG SIZE  rcvd: 104

11、iptables模块

iptables 模块的功能:操作 Minion 端机器的 iptables 规则

  • 1)为所有的 Minion 端机器添加允许 172.17.7.101 访问的规则
[root@server ~]# salt '*' iptables.insert filter INPUT position=1 rule='-s 172.17.7.101 -j ACCEPT'
node1:
node2:
  • 2)为所有的 Minion 端机器删除 192.168.185.10 的相关规则
[root@server ~]# salt '*' iptables.delete filter INPUT rule='-s 172.17.7.101 -j ACCEPT'
node1:
node2:

  • 3)为所有的 Minion 端机器保存 iptables 规则
[root@server ~]# salt '*' iptables.save /etc/sysconfig/iptables
node1:
    Wrote 1 lines to "/etc/sysconfig/iptables"
node2:
    Wrote 1 lines to "/etc/sysconfig/iptables"
    


版权声明:本文为weixin_38787592原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。