前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Saltstack 远程操作(grains,pillar)服务安装+配置管理

Saltstack 远程操作(grains,pillar)服务安装+配置管理

作者头像
老七Linux
发布2018-05-31 10:19:46
7660
发布2018-05-31 10:19:46
举报
一、Saltstack远程执行命令

如下的操作均是在Salt-master上面进行。

代码语言:javascript
复制
[root@zhdy01 sbin]# salt '*' test.ping
zhdy01:
    True
zhdy02:
    True

//如上的测试: *代表所有已经接受(salt-key)的机器去ping测试。

运行系统的命令:

代码语言:javascript
复制
[[email protected] sbin]# salt '*' cmd.run "hostname"
zhdy01:
    zhdy01
zhdy02:
    zhdy02

// cmd.run代表着运行系统命令。

针对某台client 进行远程操作:

代码语言:javascript
复制
[root@zhdy01 sbin]# salt 'zhdy02' cmd.run "whoami"
zhdy02:
    root

针对某些机器的hostname模糊查询:

代码语言:javascript
复制
[root@zhdy01 sbin]# salt 'zhdy*' cmd.run "whoami"
zhdy02:
    root
zhdy01:
    root

当然也支持正则去匹配:

代码语言:javascript
复制
[root@zhdy01 sbin]# salt -E 'zhdy0[12]+' cmd.run "pwd"
zhdy01:
    /root
zhdy02:
    /root

或者:
[root@zhdy01 sbin]# salt -E 'zhdy(01|02)' cmd.run "pwd"
zhdy02:
    /root
zhdy01:
    /root
二、grains

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

列出所有的grains项目名字

代码语言:javascript
复制
salt 'zhdy02' grains.ls

列出所有grains项目以及值

代码语言:javascript
复制
salt 'zhdy02' grains.items

//利用如上的显示值我们可以统计资产管理信息。
  • grains的信息并不是动态的,并不会实时变更,它是在minion启动时收集到的。
  • 我们可以根据grains收集到的一些信息,做配置管理工作。
grains支持自定义信息
代码语言:javascript
复制
minion上:

 vim /etc/salt/grains  //添加:
 role: nginx 
 env: test
//一个key和一个vlue
 
 重启minion服务
 systemctl restart salt-minion
代码语言:javascript
复制
master上:

 获取grains:
 
 [[email protected] sbin]# salt '*' grains.item role env
 zhdy02:
     ----------
     env:
         test
     role:
         nginx
 zhdy01:
     ----------
     env:
     role:

可以借助grains的一些属性信息来针对相关机器去操作。

代码语言:javascript
复制
salt -G role:nginx cmd.run 'hostname'

上面的作用在集群中,还是蛮强大的,例如:我们有数百台web机器。我们可以给这些机器设定role:为web,然后针对这些role去操作。

三、pillar

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

配置自定义pillar

代码语言:javascript
复制
vim  /etc/salt/master
代码语言:javascript
复制
找到如下配置://去掉前面的警号

pillar_roots:
  base: #此行前面有两个空格
    - /srv/pillar #此行前面有4个空格

systemctl restart salt-master

mkdir /srv/pillar

vim /srv/pillar/test.sls  
//内容如下
conf: /etc/123.conf

如上配置完成后,我们还不好去运行,因为这个配置文件没有入口,我们需要定义个:

代码语言:javascript
复制
vim top.sls
写入如下:

base:
  'zhdy02':
    - test

//zhdy02 机器号, test:就是我们刚刚创的test.sls
(当然我们也可以在test下面创建多个,例如test1,test2,然后,再目录下/srv/pillar去一一创建对应的即可)
vim top.sls
base:
  'zhdy02':
    - test
    - test2
    - asd

重启master

代码语言:javascript
复制
systemctl  restart salt-master

当更改完pillar配置文件后,我们可以通过刷新pillar配置来获取新的pillar状态:

代码语言:javascript
复制
[[email protected] pillar]# salt '*' saltutil.refresh_pillar
zhdy02:
    True
zhdy01:
    True

验证:

代码语言:javascript
复制
[[email protected] pillar]# salt  '*' pillar.item conf
zhdy01:
    ----------
    conf:
zhdy02:
    ----------
    conf:
        /etc/123.conf

这样就获得了咱们刚刚所设置的,例如我们再次增加一个:

代码语言:javascript
复制
vim top.sls

base:
  'zhdy02':
    - test
    - asd
    
vim asd.sls

dir: /usr/local/asd

再次刷新下:
salt '*' saltutil.refresh_pillar

[[email protected] pillar]# salt '*' pillar.item conf dir
zhdy02:
    ----------
    conf:
        /etc/123.conf
    dir:
        /usr/local/asd
zhdy01:
    ----------
    conf:
    dir:

如上配置一定要注意格式!

pillar同样可以用来作为salt的匹配对象。比如

代码语言:javascript
复制
[root@zhdy01 pillar]# salt -I 'conf:/etc/123.conf' cmd.run "w"
zhdy02:
     16:40:25 up  1:52,  1 user,  load average: 0.00, 0.01, 0.05
    USER     TTY      FROM             [email protected]   IDLE   JCPU   PCPU WHAT
    root     pts/0    192.168.59.1     14:49    1:02m  0.03s  0.03s -bash
四、远程安装服务

master上

代码语言:javascript
复制
vi /etc/salt/master
//搜索找到file_roots
打开如下内容的注释:
file_roots:
  base: #前面有两个空格
    - /srv/salt #前面有4个空格
代码语言:javascript
复制
mkdir  /srv/salt ; cd /srv/salt

编辑入口配置文件:

代码语言:javascript
复制
vi /srv/salt/top.sls  
//加入如下内容
base:
  '*':  #前面有两个空格
    - httpd #前面有4个空格

*:代表着所有的机器(当然也可以指定机器), httpd是需要安装的服务。

//在所有的客户端上执行httpd模块

重启

代码语言:javascript
复制
systemctl restart salt-master

master上:编辑配置文件

代码语言:javascript
复制
vi /srv/salt/httpd.sls

//加入如下内容,这个就是httpd模块的内容
httpd-service:
  pkg.installed:
    - names:    //这里如果只有一个服务,那么就可以写成 –name: httpd 不用再换一行了。
      - httpd
      - httpd-devel
  service.running:
    - name: httpd
    - enable: True

 说明: 
 httpd-service是id的名字,自定义的。
 pkg.installed 为包安装函数。
 下面是要安装的包的名字。
 service.running也是一个函数,来保证指定的服务启动(其主目录在ls /lib/systemd/system/)
 enable表示开机启动。

执行:

先来检测下httpd服务有没有安装:

代码语言:javascript
复制
[[email protected] ~]# ps aux | grep httpd
root       3939  0.0  0.0 112668   972 pts/0    R+   17:01   0:00 grep --color=auto httpd

执行httpd服务安装:

代码语言:javascript
复制
salt 'zhdy02' state.highstate     

//执行过程会比较慢,因为客户端上在 yum install httpd httpd-devel

当然,如果不使用这种模式,使用之前所学的:(server端:)

代码语言:javascript
复制
salt 'zhdy02' cmd.run "yum install -y httpd*"
错误解析:

自己的粗心大意导致了如下错误:

mark
mark

大家仔细看:我的配置(错误前):

mark
mark

错误在 top.sls 缺少了两个 :

正确的配置:

代码语言:javascript
复制
[[email protected] salt]# cat top.sls 
base:
  '*':
    - httpd
五、配置管理文件

日常运维中,少不了对集群内的一组机器进行修改配置文件,首先我们先把模板搞好(详细到具体配置)然后告诉minion把配置文件分发到哪个具体位置:

master上
代码语言:javascript
复制
vi /srv/salt/test.sls  //加入如下内容

file_test:
  file.managed:
    - name: /tmp/zhdy.com
    - source: salt://test/123/1.txt
    - user: root
    - group: root
    - mode: 600
    
说明:第一行的file_test为自定的名字,表示该配置段的名字,可以在别的配置段中引用它。
source指定文件从哪里拷贝,这里的salt://test/123/1.txt相当于是/srv/salt/test/123/1.txt
user,group,mode  分别定义如上文件的所属主所属组以及文件权限是什么。

根据如上配置文件操作:

代码语言:javascript
复制
[[email protected] salt]# vim test.sls
[[email protected] salt]# mkdir -p /test/123/
[[email protected] salt]# cd !$
cd /test/123/
[[email protected] 123]# cp /etc/inittab 1.txt
代码语言:javascript
复制
vi /srv/salt/top.sls //改为如下内容
base:
  '*':
    - test

执行:

代码语言:javascript
复制
[[email protected] salt]# salt 'zhdy02' state.highstate
zhdy02:
----------
          ID: file_test
    Function: file.managed
        Name: /tmp/zhdy.com
      Result: True
     Comment: File /tmp/zhdy.com updated
     Started: 00:00:43.073267
    Duration: 88.68 ms
     Changes:   
              ----------
              diff:
                  New file

Summary for zhdy02
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
Total run time:  88.680 ms

检查zhdy02上是否有/tmp/aminglinux.com,检查内容以及权限

代码语言:javascript
复制
[[email protected] ~]# ll /tmp/zhdy.com 
-rw------- 1 root root 511 11月  4 00:00 /tmp/zhdy.com
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016/11/04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Saltstack远程执行命令
  • 二、grains
    • grains支持自定义信息
    • 三、pillar
    • 四、远程安装服务
      • 错误解析:
      • 五、配置管理文件
        • master上
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档