Saltstack部署和简介

一、安装

master:
yum -y install salt-master
minion:
yum -y install salt-minion

二、配置
只需要配置minion端即可

[root@linux-node2 ~]# grep ^[a-z] /etc/salt/minion
master: ip地址
id(默认是使用python获取fqdn名字,也可以不配置)

三、认证(salt认证是经过加密的)

master:
[root@linux-node1 ~]# cd /etc/salt/pki/master/
[root@linux-node1 master]# ls
master.pem  master.pub  minions  minions_autosign  minions_denied  minions_pre  minions_rejected

minion:
[root@linux-node2 ~]# cd /etc/salt/pki/minion/
[root@linux-node2 minion]# ls
minion.pem  minion.pub(会把公钥发给master)

以下命令都是在master端执行(认证的命令):
[root@linux-node1 ~]# salt-key -L           #列出所有的minion

[root@linux-node1 ~]# salt-key -A           #同意所有的minion
[root@linux-node1 ~]# salt-key -a linux*    #同意含有linux的minion

[root@linux-node1 ~]# salt-key -D    #删除所有的minion
[root@linux-node1 ~]# salt-key -d linux*    #删除所有含有linux的minion

查看salt版本:
[root@linux-node2 ~]# salt-call --version
salt-call 2015.5.10 (Lithium)

四、远程执行命令

1、[root@linux-node1 ~]# salt '*' test.ping
linux-node2.example.com:
    True
linux-node3.example.com:
    True
 备注:test是一个模块,ping是test模块中的一个方法

2、[root@linux-node1 ~]# salt '*' cmd.run 'uptime'         #cmd.run  可以执行所有的shell命令
linux-node2.example.com:
     17:59:34 up 19 min,  1 user,  load average: 0.01, 0.02, 0.05
linux-node3.example.com:
     17:59:34 up 19 min,  1 user,  load average: 0.01, 0.02, 0.05

3、[root@linux-node1 ~]# salt '*' cmd.run 'df -h'

五、使用salt配置管理

1、修改master的配置文件:(base环境是必须的)
418 file_roots:
419 base:
420 - /srv/salt #这个是base环境的目录

2、[root@linux-node1 ~]# mkdir /srv/salt
3、[root@linux-node1 ~]# systemctl restart salt-master

4、写状态配置
[root@linux-node1 ~]# cd /srv/salt/
[root@linux-node1 salt]# cat apache.sls
apache-install: #这个是自定义的名称,但是必须唯一
pkg.installed:
- names:
- httpd
- httpd-devel
apache-service: #这个是自定义的名称,但是必须唯一
service.running:
- name: httpd
- enable: True
- reload: True

5、执行
[root@linux-node1 salt]# salt ‘*’ state.sls apache #在所有机器上

6、查看
[root@linux-node2 ~]# ps -ef | grep httpd

7、写一个高级的,就是一个入口文件,默认名称为top.sls,默认放在base环境下(/srv/salt),也就是基础环境
base:
‘*’:
- apache
备注:必须制定base环境,*指代所有的机器,apache指的是执行apache.sls这个配置

8、执行:[root@linux-node1 salt]# salt ‘*’ state.highstate

六、salt的数据系统(Gains和Pillar)

名称存储位置数据类型数据采集更新方式应用
Gainsminion端静态数据minion启动时定义,也可以使用saltutil.sync_grains进行刷新存储minion基本数据。比如用于匹配minion,自身数据可以用来做资产管理等
Pillarmaster端动态数据在master端定义,指定给对应的minion。可以使用saltutil.refresh_pillar刷新存储master指定的数据,只有制定的minion可以看到。用于敏感数据存储


状态模块:状态间关系       
功能:条件判断,主要用于cmd状态模块    
常用方法:    
 onlyif:检查的命令,仅当"onlyif"选项指向的命令返回true时才执行name定义的命令   
 unless:检查的命令,仅当"unless"选项指向的命令返回false时才执行name定义的命令   


状态依赖关系模块:requisites    
常用方法:    
 require     我依赖某个状态  
 require_in  我被某个状态依赖  
 watch       我关注某个状态  
 watch_in    我被某个状态关注  

七、salt的数据系统 Grains(静态数据)

1、作用:①收集系统底层信息  ②在远程执行命令中匹配minion ③在top file里面匹配minion

2Grains:收集minion启动时的数据信息,这个是放在minion端,只有在minion启动的时候才会收集,只有minion重新启动的时候才会重新收集

3、命令
[root@linux-node1 ~]# salt '*' grains.ls                        #把所有的grains的key列出来
[root@linux-node1 ~]# salt '*' grains.items                     #列出所有内容
[root@linux-node1 ~]# salt '*' grains.item fqdn                 #显示单个内容
[root@linux-node1 ~]# salt '*' grains.get fqdn                  #显示单个内容
[root@linux-node1 ~]# salt '*' grains.get ip_interfaces:eth0    #显示eth0

4、匹配minion(所有centos上执行命令)
[root@linux-node1 ~]# salt '*' grains.get os          #查看操作系统
[root@linux-node1 ~]# salt -G os:CentOS cmd.run 'w'   #在所有centos机器上执行命令

-G:使用grains进行匹配
salt -G 'cpuarch:x86_64' grains.item num_cpus
salt -G 'os:CentOS' test.ping
salt -G 'ec2_tags:environment:*production*'

5、自定义grains(在minion的配置文件)
修改minion的配置文件
 88 grains:
 89   roles:
 90     - webserver
 91     - memcache

[root@linux-node1 ~]# salt -G 'roles:memcache' cmd.run 'w'  #在所有角色是memcache的机器上执行命令

备注:也可以自定义一个文件(/etc/salt/grains),
[root@linux-node1 ~]# cat  /etc/salt/grains
name: nginx
[root@linux-node1 ~]# systemctl restart salt-minion
[root@linux-node1 ~]# salt -G name:nginx cmd.run 'w'

7、在top file中匹配minion
[root@linux-node1 ~]# cat /srv/salt/top.sls
base:
  'name:nginx'           #这里没有空格
    - match: grain       #使用grains进行匹配
    - apache

备注:名称是nginx执行apache.sls

八、salt的数据系统 Pillar(给minion执行想要的数据,在master端设置)

1、作用:各种输出都是字典  ①敏感数据 ②处理变量,差异性 ③做配置管理时候,自定义一些参数 ④定义主机

2、首先在master的配置文件中把pillar打开,并重启master服务
554 pillar_opts: True
[root@linux-node1 ~]# salt '*' pillar.items          #查看

3、首先设一个入口文件,在master的配置文件中设置
pillar_opts: False    #将这个关掉
531 pillar_roots:
532   base:
533     - /srv/pillar   #设置pillar的目录

4、执行的时候哪一个minion能看到:要在top.sls中定义(这个是pillar的top,和在base环境下写的没有关系)
[root@linux-node1 ~]# cat /srv/pillar/top.sls
base:
  '*':
    - apache

[root@linux-node1 ~]# cat /srv/pillar/apache.sls
{% if grains['os'] == 'CentOS' %}
apache: httpd
{% elif grains['os'] == 'Debian' %}
apache: apache2
{% endif %}

5、执行命令
[root@linux-node1 ~]# salt '*' saltutil.refresh_pillar   #刷新下 
[root@linux-node1 ~]# salt '*' pillar.items        #查看
linux-node2.example.com:
    ----------
    apache:
        httpd

[root@linux-node1 ~]# salt -I 'apache:httpd' test.ping    #测试,使用pillar用 -I 指定

九、salt的远程执行

语法: salt '<target>' <function> [arguments]

包括的内容:
目标(target)
模块(modules)
返回(return)

1、target[https://docs.saltstack.com/en/latest/topics/tutorials/modules.html#target]

①根据minion id进行匹配   salt 'linux-node2.example.com' cmd.run 'w'
②根据shell通配符进行匹配
salt '*' test.ping
salt '*.example.org' test.ping
salt -G 'os:Ubuntu' test.ping                                  #使用grains进行匹配,使用-G
salt -E 'virtmach[0-9]' test.ping                              #使用正则表达式必须使用 -E 参数
salt -L 'foo,bar,baz,quo' test.ping                            #list,罗列出来
salt -S '192.168.88.134' test.ping                             #使用IP和子网段尽心匹配
salt -C 'S@10.0.0.0/24 and G@os:CentOS' test.ping              #混合使用使用 -C
salt -C 'G@os:Ubuntu and webser* or E@database.*' test.ping    #混合使用使用 -C   (and or not)

③在top里面使用正则
base:
  'web-(prod|devel)':
    - match: pcre
    - webserver

2、模块

①service
salt '*' service.available sshd          #判断当前服务是否在运行
salt '*' service.get_all                 #显示正在运行的服务
salt '*' service.reload <service name>
salt '*' service.restart <service name>

②network
salt '*' network.active_tcp       #返回所有活动的tcp链接
salt '*' network.arp              #返回arp
salt '*' network.interface eth0   #返回指定的ip地址

。。。。。

3、模块的acl访问控制(client_acl)

①授权
chmod 755 /var/cache/salt /var/cache/salt/master /var/cache/salt/master/jobs /var/run/salt /var/run/salt/master

②修改master的配置文件
247 client_acl:
248   tom:
249     - test.ping
250     - network.*

让tom用户只能运行test.ping  和network下面的所有方法
client_acl:
  tom:
    - test.ping
    - network.*
  user01:
    - linux-node2*:
      - test.ping

备注:让user01用户只能在linux-node2*机器上运行 test.ping

设置黑名单(client_acl_blacklists,master的配置文件):

4、返回,将其记录到mysql中[https://docs.saltstack.com/en/latest/ref/returners/all/index.html]

①安装python-mysqldb的模块,直接使用yum安装即可
②创建数据库,并授权 grant all on salt.* to salt@'192.168.88.0/24' identified by 'salt';
CREATE DATABASE  `salt`
  DEFAULT CHARACTER SET utf8
  DEFAULT COLLATE utf8_general_ci;

USE `salt`;

DROP TABLE IF EXISTS `jids`;
CREATE TABLE `jids` (
  `jid` varchar(255) NOT NULL,
  `load` mediumtext NOT NULL,
  UNIQUE KEY `jid` (`jid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE INDEX jid ON jids(jid) USING BTREE;

DROP TABLE IF EXISTS `salt_returns`;
CREATE TABLE `salt_returns` (
  `fun` varchar(50) NOT NULL,
  `jid` varchar(255) NOT NULL,
  `return` mediumtext NOT NULL,
  `id` varchar(255) NOT NULL,
  `success` varchar(10) NOT NULL,
  `full_ret` mediumtext NOT NULL,
  `alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  KEY `id` (`id`),
  KEY `jid` (`jid`),
  KEY `fun` (`fun`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


DROP TABLE IF EXISTS `salt_events`;
CREATE TABLE `salt_events` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`tag` varchar(255) NOT NULL,
`data` mediumtext NOT NULL,
`alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`master_id` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `tag` (`tag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


③yum -y install MySQL-python (返回数据是minion返回,所以所有的minion都要安装这个包)

④在minion的配置文件中添加以下内容:
mysql.host: 'salt'
mysql.user: 'salt'
mysql.pass: 'salt'
mysql.db: 'salt'
mysql.port: 3306


salt '*' saltutil.refresh_pillar
salt '*' test.ping --return mysql


master_job_cache:mysql
salt '*' test.ping
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值