saltsatck02入门

1.使salt可以使用配置文件进行配置

配置文件的位置的配置在/etc/salt/master中的file_roots字段,将base的注释打开,重启salt-master生效

复制代码
# file_roots:
#   base:
#     - /srv/salt/
#   dev:
#     - /srv/salt/dev/services
#     - /srv/salt/dev/states
#   prod:
#     - /srv/salt/prod/services
#     - /srv/salt/prod/states
#
file_roots:
  base:
    - /srv/salt
复制代码

2.编写状态配置文件

可以使用: set list查看空白符,因为配置文件是使用缩进来表示层级的,对缩进严格

其中apache-install是ID,pkg.installd

复制代码
apache-install:
  pkg.installd:
    - names:
      - httpd
      - httpd-devel
apacher-service:
  service.running:
    - name: httpd
    - enable: True
    - reload: True 
复制代码

执行配置文件

其中state.sls是状态模块的sls方法,执行apache这个配置文件,其中apache后不跟“.sls”

salt '*' state.sls apache

 使用top文件,state模块的高状态,从top文件里去读需要执行的配置,其中top.sls需要放在base的配置文件目录下,即/srv/salt下

vim /srv/salt/top.sls
base:
  '10.12.20.*':
    - apache

执行

salt '*' state.highstate

 

所有机器都需要执行的放在base环境下,如zabbix的agent,安全软件的agent等。可以有多个环境应对各种配置文件

3.Grains(静态数据)

Grains是在minions端配置的

Grains的作用:

1)收集minions的信息

2)在远程执行里面匹配minions

3)在top file里匹配minions

3.1收集信息

Grains里是minions启动时收集的minions信息。是存放在minions端的,每次minions重启时收集一次配置,是静态数据。#查看grains的指标

复制代码
salt '*.14' grains.ls
#查看grains所有的指标及指标的具体内容
salt '*.14' grains.items
#查看单个指标数据,如 num_cpus
salt '*.14' grains.item num_cpus
#10.12.20.14:
#   ----------
#   num_cpus:
#      48
#或者直接获得指标值
salt '*.14' grains.get num_cpus
#10.12.20.14:
#   48
#查看多层级(字典)的数据
salt '*.14' grains.get ip_interfaces:docker0

复制代码

3.2在远程执行里匹配minions

#匹配系统为Centos的服务器执行ls,-G代表使用grains进行匹配

salt -G os:Centos cmd.run "ls"

可以在minions端配置自定义的grains参数,编辑minions的配置文件

vim /etc/salt/minion.d/grains.conf
grains:
  roles:
    - webserver
    - memcache

添加grains参数后需要重启minions才可以生效

systemctl restart salt-minion

在master执行下面命令,可以获取到数据

salt -G roles:webserver cmd.run "ls"

除了在minions的配置文件/etc/salt/minion.d/grains.conf,也可以在minions的/etc/salt/grains文件中进行配置,重启后生效。

vim /etc/salt/grains
app: nginx

其中key app不能与其他配置文件如/etc/salt/minion.d/grains.conf的key冲突,否则不生效。

3.3在top file中匹配minions

匹配grain中的app:web 执行apache

vim /srv/salt/top.sls 
base:
  'app:web':
    - match: grain
    - appache

执行top file

salt '*' state.highstate

 4.Pillar(动态数据)

在master端配置,不用重启master。

pillar需要在master配置文件中进行模块的启用及配置文件位置的指定,其中pillar_opts为一些系统的变量,这个可以关闭,只使用自定义的

vim /etc/salt/master.d/pillar.conf
pillar_opts: False pillar_roots: base:
- /srv/pillar

编写pillar配置文件

/srv/pillar/apache.sls
{% if grains['os'] == 'CentOS' %}
apache:httpd
{% elif grains['os'] == 'debian'%}
apache:apache2
{% endif %}

编写top file

vim /srv/pillar/top.sls
base:
  '*':
    - apache

pillar修改配置后只有在master上是自动刷新的,如果要用于其他minions需要手动刷新pillar配置

salt '*' saltutil.refresh_pillar

使用-I来指定pillar中的参数可以选择minions。

salt -I 'apache:httpd' test.ping

grains和pillar的区别

 5.远程执行

远程执行主要包括三个方面:

目标

模块

返回

5.1目标

https://docs.saltproject.io/en/latest/topics/targeting/globbing.html

5.1.1 基于minion id做匹配

默认id是fqdn名即主机名,但是可以自己随意设置

基于minion id做匹配支持通配符。如果要给minion改id的话不能直接改,需要先把master中的secret key通过salt-key -d '10.12.20.14'删掉,再重新加入

复制代码
salt '10.12.20.14' cmd.run 'ls'
#通配符

salt '10.12.20.*' cmd.run 'ls'
#除了*其他的正则匹配,前面都应该加上参数-E
salt -E '10.12.20.?' cmd.run 'ls'
salt -E '10.12.20.[13-14]' cmd.run 'ls'
salt -E '10.12.20.(13|15)'  test.ping
复制代码

在top文件里使用正则匹配,其中match: pcre代表指定正则匹配

base:
  '10.12.20.(13|14)':
  - match: pcre
  - webserver

 5.1.2list 使用“-L”,后加多个主机列表

salt -L 'web1,web2,web3' test.ping

5.1.3grains  使用-G进行匹配

salt -G 'os:CentOS' test.version

5.1.4pillar  使用-I进行匹配

salt -I 'apache:httpd' test.ping

5.1.5指定IP   使用-S进行匹配

id为host非ip 可以通过-S来指定服务器IP

salt -S '10.12.20.14'

还可以指定ip子网段

salt -S "10.12.20.0/24" test.ping

5.1.5混合多种匹配方式使用 使用-C进行匹配 支持与或非,and or not可以组合使用

salt -C 'S@10.12.20.0/24 and G@roles:webserver' test.ping
salt -C 'S@10.12.20.13 or G@roles:webserver' test.ping
salt -C 'S@10.12.20.0/24 not G@roles:webserver' test.ping

各匹配方法使用的参数

Letter

Match Type

Example

Alt Delimiter?

G

Grains glob

G@os:Ubuntu

Yes

E

PCRE Minion ID

E@web\d+\.(dev|qa|prod)\.loc

No

P

Grains PCRE

P@os:(RedHat|Fedora|CentOS)

Yes

L

List of minions

L@minion1.example.com,minion3.domain.com or bl*.domain.com

No

I

Pillar glob

I@pdata:foobar

Yes

J

Pillar PCRE

J@pdata:^(foo|bar)$

Yes

S

Subnet/IP address

S@192.168.1.0/24 or S@192.168.1.100

No

R

Range cluster

R@%foo.bar

No

N

Nodegroups

N@group1

No

5.1.6 节点组(慢)

在master的配置文件中进行组的配置

复制代码
vim /etc/salt/master.d/nodegroups.conf
nodegroups:
  group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com or bl*.domain.com'
  group2: 'G@os:CentOS'
  group3: 'G@os:CentOS and N@group1'
  group4:
    - 'G@foo:bar'
    - 'or'
    - 'G@foo:baz'
复制代码

节点组使用-N进行匹配

salt -N 'group2' test.ping

5.2模块

https://docs.saltproject.io/en/latest/ref/modules/all/index.html#all-salt-modules

5.2.1systemd_service(linux)

https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.systemd_service.html#module-salt.modules.systemd_service

复制代码
# 判断某服务是否在运行
salt '*' service.available sshd
# 判断某服务是否没在运行(与available相反)
salt '*' service.missing sshd
#获取14服务器在运行的所有服务
salt '*14' service.get_all
#服务重载
salt '*' service.reload nginx
#查看服务状态
salt '*' service.status nginx
#停止服务
salt '*' service.stop nginx
#重启服务
salt '*' service.restart nginx
复制代码

5.2.2network

https://docs.saltproject.io/en/latest/ref/modules/all/salt.modules.network.html#module-salt.modules.network

复制代码
#返回所有的活动的tcp链接
salt '*' network.active_tcp
#返回arp
salt '*14' network.arp
#检查服务器对某个地址的链接状态(能否链接)
salt '*' network.connect baidu.com 80 timeout=3
#做域名查询
salt '*' network.dig baidu.com
#获取hostname
salt '*' network.get_hostname
#获取interface
salt '*' network.interface eth0
复制代码

5.3返回

https://docs.saltproject.io/en/latest/ref/returners/all/index.html#all-salt-returners

默认将执行结果返回到master console 

5.3.1 返回给mysql

https://docs.saltproject.io/en/latest/ref/returners/all/salt.returners.mysql.html#module-salt.returners.mysql

yum安装MySQL-python包,返回程序是minions返回的,这样比minions先返回给master再写到数据库要快且对master的压力小,所以每个minion都需要安装MySQL-python包,由于3006版本的salt是自动安装的python3,python3不支持python-mysqldb,使用salt pip进行安装PyMySQL,每个master及minions节点都要安装

salt-pip install PyMySQL

在每台minions需要添加配置文件

vim /etc/salt/minion.d/mysql.conf 
mysql.host: 'xxxx'
mysql.user: 'salt'
mysql.pass: 'xxxx'
mysql.db: 'salt'
mysql.port: 30145

重启minions生效

systemctl restart salt-minion.service 

在数据库中创建用户,库还有表

复制代码
#创建库
CREATE DATABASE  `salt`
  DEFAULT CHARACTER SET utf8
  DEFAULT COLLATE utf8_general_ci;
#创建用户
create user salt@'%' identified by 'xxxxx';
#授权用户
GRANT ALL ON salt.* TO 'salt'@'%';
#切换库
USE `salt`;
#创建jids表
CREATE TABLE `jids` (
  `jid` varchar(255) NOT NULL,
  `load` mediumtext NOT NULL,
  UNIQUE KEY `jid` (`jid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
#创建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;
#创建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;
复制代码

 在master执行salt命令

salt '*14' test.ping --return mysql

在master配置文件中添加返回到mysql,然后重启master,执行salt命令时就不用加 --return mysql

#修改配置文件
vim /etc/salt/master.d/mysql.conf 
return: mysql

#重启master
systemctl restart salt-master.service 

此时在master直接执行如下命令,就可以实现将返回写入到mysql数据库

salt '*14' test.ping

如果不在minion上安装python包及配置mysql配置,则可以通过master的返回缓存往mysql里面写返回数据,配置master配置文件,首先先把上一步中的 return: mysql注释掉,添加master_job_cache: mysql及数据库信息,然后重启master。

复制代码
vim /etc/salt/master.d/mysql.conf 
#return: mysql
#返回缓存写入到数据库
master_job_cache: mysql
#数据库信息
mysql.host: 'xxxx'
mysql.user: 'salt'
mysql.pass: 'xxxx'
mysql.db: 'salt'
mysql.port: 30145

#重启master
systemctl restart salt-master.service 
复制代码

在master执行salt命令,测试是否写入到数据库

salt '*' cmd.run 'free -m'

 job_cache的文档https://docs.saltproject.io/en/latest/topics/jobs/job_cache.html,默认路径在/var/cache/salt/master/jobs/,可以转存储在下列外部系统中:

 

 6.二次开发

在master上添加Grains,且同步给minion。注意:只能从master同步给minion,而不能从master通过syndic同步给minion。

在master的file_roots目录下建_grains,在_grains目录下写grains的py文件,用return返回就可以拉

 vim my_grains.py
def my_grains():
  '''
    My Custom Grains
  '''
  grains = { 'hehe1': 'haha1', 'hehe2': 'haha2' }
  return grains

然后在master主机执行同步grains命令

salt '*14' saltutil.sync_grains

此时在minion主机的/var/cache/salt/minion/extmods/grains/下可以看到master中同步过来的my_grains.py文件。

在master执行下面命令可以得到对应的grains值。

salt '*14' grains.item hehe1

 salt-cp复制文件

salt-cp '*14' a.log /tmp/a.log

 

posted @   潇潇暮鱼鱼  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示