saltstack (2) grains、pillar、安装httpd、分发文件、目录、配置管理远程命令、计划任务、salt-ssh使用

本文介绍了SaltStack的grains和pillar的使用,包括如何自定义grains信息、配置pillar以及利用它们进行配置管理。此外,还展示了如何使用SaltStack安装httpd、分发文件和目录、执行远程命令、设置计划任务,以及盐SSH(salt-ssh)的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

24.6 grains

  • grains是在minion启动时收集到的一些信息,比如操作系统类型、网卡ip、内核版本、cpu架构等。

  • 列出所有的grains项目名字:salt "client" grains.ls

  • 列出所有grains项目以及值:salt "client" grains.items

grains的信息并不是动态的,并不会实时变更,它是在minion启动时收集到的。我们可以根据grains收集到的一些信息,做配置管理工作。

  • grains支持自定义信息

1、在minion端上编辑配置文件;(增加自定义信息,格式是 键 : 值 形式)

[root@client ~]# 
[root@client ~]# vim /etc/salt/grains
[root@client ~]# cat /etc/salt/grains
role: nginx
env: test

2、重启minion服务:systemctl restart salt-minion

3、回到master上,获取grains;salt '*' grains.item role env

[root@server ~]# salt '*' grains.item role env
server:
    ----------
    env:
    role:
client:
    ----------
    env:
        test
    role:
        nginx
获取不存在的grains信息,返回空值
[root@server ~]# salt '*' grains.item abcd efg
server:
    ----------
    abcd:
    efg:
client:
    ----------
    abcd:
    efg:

可以借助grains的一些属性信息来执行;可以起到一个匹配的作用;(salt -G role:nginx cmd.run 'hostname' )

[root@server ~]# salt -G role:nginx cmd.run 'hostname'
client:
    client

24.7 saltstack – pillar

pillar和grains不一样,是在master上定义的,并且是针对minion定义的一些信息。像一些比较重要的数据(密码)可以存在pillar里,还可以定义变量等。

1、配置自定义pillar;vim /etc/salt/master

找到如下配置://去掉前面的#号
pillar_roots:
  base: #此行前面有两个空格
    - /srv/pillar #此行前面有4个空格

**注意保留空格**

2、重启salt-master服务;systemctl restart salt-master.service

3、创建/srv/pillar目录,并且编辑一个子配置文件用于测试;

[root@server ~]# mkdir /srv/pillar
[root@server ~]# vim /srv/pillar/test.sls //添加的测试文件
[root@server ~]# cat /srv/pillar/test.sls
conf: /etc/123.conf   //添加的测试文件内容

4、编写主配置文件;vim /srv/pillar/top.sls

base:  # 表示根
  'client':  # 主机名,缩进两个空格
    - test   # 加载哪个前缀的配置文件,缩进四个空格

5、重启salt-master服务;systemctl restart salt-master.service

6、当更改完pillar配置文件后,我们可以通过刷新pillar配置来获取新的pillar状态:salt '*' saltutil.refresh_pillar

[root@server ~]# salt '*' saltutil.refresh_pillar
server:
    True
client:
    True
  • 验证:salt '*' pillar.item conf
[root@server ~]# salt  '*' pillar.item conf
client:
    ----------
    conf:
        /etc/123.conf
server:
    ----------
    conf:
  • pillar同样可以用来作为salt的匹配对象。比如 salt -I 'conf:/etc/123.conf' test.ping
[root@server ~]# salt  -I 'conf:/etc/123.conf'  test.ping
client:
    True
[root@server ~]# salt  -I 'conf:/etc/test.conf' cmd.run "hostname" //不匹配则错误提示
No minions matched the target. No command was sent, no jid was assigned.
ERROR: No return received

 

24.8 使用saltstack去安装httpd

  • master上编辑配置文件:
[root@server ~]# vim /etc/salt/master
[root@server ~]# vim /etc/salt/master    # 搜索file_roots,去掉以下几行的注释,注意保留空格
file_roots:
  base:
    - /srv/salt
[root@server ~]# systemctl restart salt-master.service #重启服务
  • 创建目录及主配置文件
[root@server ~]# mkdir /srv/salt
[root@server ~]# vim /srv/salt/top.sls
base:
  '*':  # *表示所有,前面有两个空格
    - httpd   # 前面有4个空格,表示在所有的客户端上执行httpd模块
  • 增加子配置文件:
[root@server ~]# vim /srv/salt/httpd.sls
httpd-service:  # 服务的名称
  pkg.installed:   # saltstack内置模块,用于执行安装命令
    - names:  # names的值是需要安装的包的名称
      - httpd  # 安装httpd 包
      - httpd-devel    # 安装httpd-devel 包
  service.running:   # saltstack内置模块,用于启动服务
    - name: httpd  # 启动httpd服务
    - enable: True  # True表示开机启动

[root@server ~]# salt 'client' state.highstate
  • minion端查看执行的yum命令
[root@client ~]#  ps aux |grep yum
root      1160 19.0  6.9 296588 70208 ?        D    15:48   0:00 /usr/bin/python /usr/bin/yum -y install 

httpd
root      1177  0.0  0.0 112676   980 pts/0    S+   15:48   0:00 grep --color=auto yum
  • master执行完成后,在minion端上可以看到已经安装成功
[root@client ~]# ps aux |grep httpd
root      1381  0.1  0.4 223980  4976 ?        Ss   15:48   0:00 /usr/sbin/httpd -DFOREGROUND
apache    1382  0.0  0.2 223980  2960 ?        S    15:48   0:00 /usr/sbin/httpd -DFOREGROUND
apache    1383  0.0  0.2 223980  2960 ?        S    15:48   0:00 /usr/sbin/httpd -DFOREGROUND
apache    1384  0.0  0.2 223980  2960 ?        S    15:48   0:00 /usr/sbin/httpd -DFOREGROUND
apache    1385  0.0  0.2 223980  2960 ?        S    15:48   0:00 /usr/sbin/httpd -DFOREGROUND
apache    1388  0.0  0.2 223980  2960 ?        S    15:48   0:00 /usr/sbin/httpd -DFOREGROUND
root      1409  0.0  0.0 112676   984 pts/0    S+   15:49   0:00 grep --color=auto httpd
[root@client ~]# netstat -lntp |grep httpd
tcp6       0      0 :::80                   :::*                    LISTEN      1381/httpd

24.9 使用saltstack分发文件

saltstack有一个分发文件的功能,可以使用这个功能来批量分发一些文件到minion端上。我们需要在master端准备一个模板文件,并且进行相应的配置后,才能够进行分发。分发功能的好处在于,我们不需要自己一个个的将文件发送到master端上,只需要在master端执行一条命令就完成将文件发送到master端上的任务,减少了很多重复且无谓的工作。

  • 在master上编辑配置文件:
[root@server ~]# vim /srv/salt/test.sls
file_test:
  file.managed: 
    - name: /tmp/example.com
    - source: salt://test/example/example.txt
    - user: root
    - group: root
    - mode: 600

注:

  • 第一行的file_test为自定的名字,表示该配置段的名字,可以在别的配置段中引用它,

  • name指定分发到minion端上的哪个路径以及文件名称

  • source指定文件从哪里拷贝,这里的salt://test/example/example.txt相当于是/srv/salt/test/example/example.txt,

  • user和group指定文件的属主以及属组

  • mode则是指定文件的的权限

  • 创建目录以及模板文件

[root@server ~]# mkdir -p /srv/salt/test/example
[root@server ~]# vim /srv/salt/test/example/example.txt
[root@server ~]# cat /srv/salt/test/example/example.txt
test test!
  • 编辑主配置文件
[root@server ~]# vim /srv/salt/top.sls  # 修改为如下内容
base:
  '*':
    - test
  • 执行命令,将模板文件分发到minion端上
[root@server ~]# salt 'client' state.highstate
client:
----------
          ID: file_test
    Function: file.managed
        Name: /tmp/example.com
      Result: True
     Comment: File /tmp/example.com updated
     Started: 16:15:18.365846
    Duration: 67.243 ms
     Changes:   
              ----------
              diff:
                  New file

Summary for client
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
Total run time:  67.243 ms
  • 到minion端上查看分发过去的文件
[root@client ~]# ls -l /tmp/example.com
-rw-------. 1 root root 11 10月 18 16:15 /tmp/example.com
[root@client ~]# cat /tmp/example.com
test test!

24.10 使用saltstack分发目录

除了分发文件外,很多情况下我们还需要分发目录。

在master上编辑子配置文件 [root@server ~]# vim /srv/salt/test_dir.sls
file_dir: file.recurse: - name: /tmp/testdir - source: salt://test/example - user: root - file_mode: 640 - dir_mode: 750
- mkdir: True - clean: True

注:

  • 第一行的file_dir为自定的名字,表示该配置段的名字,可以在别的配置段中引用它,

  • name指定分发到minion端上的哪个路径以及文件名称

  • source指定文件从哪里拷贝,这里的salt://test/example 相当于是/srv/salt/test/example

  • user和group指定文件的属主以及属组

  • mode则是指定文件的的权限

  • dir_mode目录权限

  • mkdir: True 如果没有目录就创建

  • clean: True 加上它之后,源删除文件或目录,目标也会跟着删除,否则不会删除

  • 修改主配置文件

[root@server ~]# vim /srv/salt/top.sls 
base:
  '*':
    - test_dir
  • 执行以下命令分发目录:
[root@server ~]# salt 'client' state.highstate
client:
----------
          ID: file_dir
    Function: file.recurse
        Name: /tmp/testdir
      Result: True
     Comment: Recursively updated /tmp/testdir
     Started: 16:37:41.975561
    Duration: 146.891 ms
     Changes:   
              ----------
              /tmp/testdir/example.txt:
                  ----------
                  diff:
                      New file
                  mode:
                      0640

Summary for client
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
Total run time: 146.891 ms
  • 到minion端上查看分发过去的目录
[root@client ~]# ls /tmp/testdir/
example.txt
[root@client ~]# ll /tmp/testdir/example.txt
-rw-r-----. 1 root root 11 10月 18 16:37 /tmp/testdir/example.txt

注: saltstack不能分发空目录

24.11 配置管理远程命令

虽然我们可以使用cmd.run去远程执行命令,但是这样的效率太低,每次只能执行一条命令。所以我们需要批量远程执行命令来提高效率,实现批量远程执行命令我们需要使用到脚本,将这个脚本分发到各个minion端上执行,要执行这个脚本我们还得进行一些相应的配置。

  • 在master上编辑子配置文件
[root@server ~]# vim /srv/salt/shell_test.sls  # 增加以下内容
shell_test:
  cmd.script:
    - source: salt://test/example.sh  
    - user: root
  • 创建模板脚本文件
[root@server ~]# vim /srv/salt/test/example.sh
#!/bin/bash
touch /tmp/test.txt 
if [ ! -d /tmp/test ]
then
    mkdir /tmp/test
fi
  • 更改top.sls内容
[root@server ~]# vim /srv/salt/top.sls 
base:
  '*':
    - shell_test
  • 执行以下测试:
[root@server ~]# salt 'client' state.highstate
  • 到client上检查测试文件
[root@client ~]# ls -l /tmp/test.txt
-rw-r--r--. 1 root root 0 10月 18 16:54 /tmp/test.txt

24.12 配置管理计划任务

  • 在master上编辑子配置文件
[root@server ~]# vim /srv/salt/cron_test.sls
cron_test:
  cron.present:
    - name: /bin/touch/tmp/test_cron.txt  # 需要执行的命令,也可以执行一个脚本
    - user: root
    - minute: '*'   # 分
    - hour: 20   # 时
    - daymonth: '*'  # 日
    - month: '*'  # 月
    - dayweek: '*'  # 周

注:

  • 需要用单引号引起来。
  • 更改top.sls文件
[root@server ~]# vim /srv/salt/top.sls 
base:
  '*':
    - cron_test
  • 执行命令测试
[root@server ~]# salt 'client' state.highstate
  • 到client上检查测试结果
[root@client ~]# crontab -l
# Lines below here are managed by Salt, do not edit
# SALT_CRON_IDENTIFIER:/bin/touch/tmp/test_cron.txt
* 20 * * * /bin/touch/tmp/test_cron.txt
[root@client ~]#

删除cron

  • 修改/srv/salt/cron_test.sls文件内容如下:
cron_test:
  cron.absent:
    - name: /bin/touch/tmp/test_cron.txt
  • 执行命令测试
[root@server ~]# salt 'client' state.highstate
  • 到client上检查测试结果
[root@client ~]# crontab -l
# Lines below here are managed by Salt, do not edit

24.13 其他命令

  • 拷贝master上的文件到客户端:cp.get_file
[root@server ~]# echo "test test" > /srv/salt/test/cp.txt
[root@server ~]# salt 'client' cp.get_file salt://test/cp.txt  /tmp/cp.txt
client:
    /tmp/cp.txt
  • 到client上检查测试结果
[root@client ~]# ls /tmp/cp.txt 
/tmp/cp.txt
[root@client ~]# cat /tmp/cp.txt
test test
  • 拷贝目录:cp.get_dir
[root@server ~]# salt 'client' cp.get_dir salt://test/  /tmp/ 

client:
    - /tmp//test/cp.txt
    - /tmp//test/example.sh
    - /tmp//test/example/example.txt
  • 到client上检查测试结果
[root@client ~]# ls /tmp/test
cp.txt  example  example.sh
  • 查看存活的minion
[root@server ~]# salt-run manage.up
- client
- server
  • 执行shell脚本:cmd.script
[root@server ~]#  salt 'client' cmd.script salt://test/example.sh
client:
    ----------
    pid:
        3793
    retcode:
        0
    stderr:
    stdout:

24.14 salt-ssh使用

salt-ssh不需要对客户端做认证,客户端也不用安装salt-minion或者启动什么服务,它类似ssh/expect

  • 安装salt-ssh:
[root@server ~]# yum install -y https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
[root@server ~]# yum install -y salt-ssh
  • 编辑配置文件:
[root@server ~]# vim /etc/salt/roster  # 文件末尾加上以下内容
client:
  host: 192.168.222.113
  user: root  
  passwd: ******

注:

  • client:主机名

  • host:登录的ip

  • user: 登录的用户

  • passwd: 用户的密码

  • 执行命令测试:

[root@server ~]# salt-ssh --key-deploy '*' -r 'w'
client:
    ----------
    retcode:
        254
    stderr:
    stdout:
        The host key needs to be accepted, to auto accept run salt-ssh with the -i flag:
        The authenticity of host '192.168.222.113 (192.168.222.113)' can't be established.
        ECDSA key fingerprint is SHA256:wYze5ycgD9rMzbhqVkxphS0yHTJ2C1r/EEBMvIEU0xc.
        ECDSA key fingerprint is MD5:60:a7:f8:e1:85:e8:d3:01:ea:7a:24:02:c6:d0:11:08.
        Are you sure you want to continue connecting (yes/no)?
[root@server ~]# salt-ssh --key-deploy '*' -r 'w'
client:
    ----------
    retcode:
        0
    stderr:
    stdout:
         11:56:31 up 20:26,  1 user,  load average: 0.00, 0.01, 0.05
        USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
        root     pts/0    192.168.222.1    四15   37:03   0.11s  0.11s -bash

注:第一次执行的时候会自动把本机的公钥放到对方机器上,在这之后就可以把roster文件里面的密码给去掉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值