标签:util hat first 关注 listen 操作 cmd date pts
这次主要介绍saltstack的配置管理,这一部分在企业应用中比较重要,也经常用到。pkg模块
列出所有状态模块
salt ‘‘ sys.list_modules
查看状态模块中的函数:如pkg模块
[root@salt-master _grains]# salt ‘‘ sys.list_state_functions pkg
salt-minion01:
pkg.uptodate
file模块
root@salt-master app]# mkdir files
[root@salt-master app]# cp /etc/resolv.conf files/
[root@salt-master app]# cat dns.sls
dns-config:
file.managed:
nameserver 101.206.4.6
nameserver 114.114.114.114
###########saltstack configure ----------》添加一行注释
salt ‘salt-minion01‘ state.sls app.dns test=True 测试
salt ‘salt-minion01‘ state.sls app.dns
查看
[root@salt-minion01 salt]# cat /etc/resolv.conf
nameserver 101.206.4.6
nameserver 114.114.114.114
###########saltstack configure
file.directory ------创建目录
[root@salt-master app]# cat dir.sls
mkdir_tmp_dns:
file.directory:
目录下发 file.recurse
[root@salt-master app]# cat xf.sls
httpd-config:
file.recurse:
clean: True #####远程强制删除
mkdir files/httpd_conf.d
[root@salt-master app]# cat files/httpd_conf.d/www.conf
server {
www
}
[root@salt-master app]# cat files/httpd_conf.d/blog.conf
erver {
blog
}
[root@salt-master app]# salt ‘salt-minion01‘ state.sls app.xf
minion01
[root@salt-minion01 tmp]# ls /etc/httpd/conf.d/
autoindex.conf fcgid.conf README userdir.conf www.conf
blog.conf manual.conf ssl.conf welcome.conf
可以直接采用以下方法:
[root@salt-master app]# cat ln.sls
Link:
cmd.run:
service模块
httpd_service:
service.running:
watch: #####监控谁
-pkg.httpd-file
cron模块
[root@salt-master app]# cat cron.sls
crontab_scripts:
cron.present:
minute: ‘/5‘
salt ‘salt-minion01‘ state.sls app.cron
结果:
[root@salt-minion01 tmp]# crontab -l
/30 /usr/sbin/ntpdate time.windows.com
/5 * /usr/bin/uptime >/dev/null 2>&1
高级状态模块,高级状态文件需要在base环境下编写
base:
‘*‘: 匹配所有minion
app.httpd #base模块下httpd目录下的安装sls文件
#webserver: #定义的分组名称进行匹配,需要定义nodegroups
‘os:centos‘: #通过grains模块匹配
此案例在prod生产环境下部署
修改master端配置文件
file_roots:
base:
systemctl restart salt-master
mkdir /srv/salt/{base,prod} -p
把之前的基础环境下写的放在base下
1 先手动安装lamp环境
yum install httpd mariadb mariadb-server php php-mysql php-gd gd -y
[root@salt-master init]# pwd
/srv/salt/prod/init
mkdir files -------相关配置写在该目录下
2 准备相应目录与对应配置文件
cp /etc/httpd/conf/httpd.conf files/
cp /etc/my.cnf files/
cp /etc/php.ini files/
在init目录下写lamp安装,配置 启动
3 部署状态文件lamp.sls
[root@salt-master init]# cat lamp.sls
#yum install httpd mariadb-server php php-mysql php-gd gd -y
httpd-install:
pkg.installed:
salt ‘salt-minion01‘ state.sls init.lamp saltenv=prod 指定为prod环境,因为默认为base环境
通过高级状态进行管理
通过高级状态来管理更方便,需要在base下写top.sls
[root@salt-master base]# cat top.sls
prod:
‘salt-minion01‘:
然后执行salt ‘salt-minion01‘ state.highstate
查看目录结构
[root@salt-master base]# tree /srv/salt/
/srv/salt/
├── base
│ ├── app
│ │ ├── cron.sls
│ │ ├── dir.sls
│ │ ├── dns.sls
│ │ ├── files
│ │ │ ├── httpd_conf.d
│ │ │ │ ├── blog.conf
│ │ │ │ └── www.conf
│ │ │ └── resolv.conf
│ │ ├── httpd.sls
│ │ ├── ln.sls
│ │ ├── service.sls
│ │ ├── vsftpd.sls
│ │ └── xf.sls
│ ├── _grains
│ │ └── my_grains.py
│ ├── top.sls
│ └── top.sls20181121
└── prod
└── init
├── files
│ ├── httpd.conf
│ ├── my.cnf
│ └── php.ini
└── lamp.sls
states状态依赖管理
可以用state模块来定义minion的状态,但是如果一个主机涉及多个状态,并且状态之间有相互关联,需要在执行顺序上有先后之分,那么必须引入requisites 来进行控制。
watch写法
httpd-service:
service.running:
[root@salt-master init]# cat mysql.sls
mysql-install:
pkg.installed:
[root@salt-master init]# mv lamp.sls apache.sls
在prod目录建立lamp.sls
[root@salt-master prod]# cat lamp.sls
include:
配置文件一般都是固定无法灵活多变,实际生产过程中,需要配置文件灵活多变,不能写死,有时还需要进行流程控制,这就需要用到jinjia,可以很灵活地进行配置管理及简化配置过程。
Jinja2模板包含变量和表达式
变量用{{...}}包围,表达式用{%...%}包围
看一个简单的例子
[root@salt-master prod]# cat var.sls
{% set var= ‘hello world!‘ %}
test_var:
cmd.run:
字典类型
{% set dict = {‘first‘:‘value‘,‘second‘:‘value1‘} %}
{{ dict[‘first‘] }}
Jinja模板使用步骤
fqdn_ip4:
- 192.168.132.31
如果想在http配置文件中使用IP:PORT
Listen {{ IPADDR}}:{{ PORT }}
apache文件中修改
defaults:
PORT: 8000
IPADDR: {{ grains[‘fqdn_ip4‘][0]}} ---取列表中的第一个值即IP地址
pillar方式:
apache:
IP: {{ grains[‘fqdn_ip4‘][0] }}
PORT: 8008
引用
{{ pillar[‘apache‘][IP] }}
{{ pillar[‘apache‘][port] }}
实际场景中,如系统有centos和ubuntu,都要安装apache,由于安装的包不一样,则可以根据grains静态数据,使用jinja2流程控制
httpd_install:
pkg.installed:
template: jinja
{% if grains[‘os_family‘] == ‘Debian‘ %}
Job概述
salt每次运行任务都会将任务发布到pub-sub总线,minion会对任务作出响应,为区分不同的任务,saltmaster每次发布一个任务都会为该任务创建一个jobid。
master默认情况下会缓存24小时内的所有job的详细操作
master缓存目录:/var/cache/salt/master/jobs/
minion端每次执行任务都会缓存在/var/cache/salt/minion/proc/目录下,任务执行完成后文件会被删除。
在master端执行一个长时间的任务
salt ‘salt-minion01‘ cmd.run "sleep 100"
在minion01上用strings查看文件内容
[root@salt-minion01 proc]# strings 20181125111411231106
tgt_type
glob
20181125111411231106
salt-minion01
user
root
sleep 100
cmd.run
Job管理
通过salt-run 命令来管理job也可以通过salt util模块
在master中执行一个长时间的命令
salt ‘salt-minion01‘ cmd.run "sleep 1000;echo hello"
然后ctrl+c结束,获取jobid后登陆查看
salt ‘salt-minion01‘ saltutil.find_job-id
salt ‘salt-minion01‘ saltutil.kill_job jobid 停掉任务
查看master上cache的所有job
salt ‘salt-minion‘ saltutil.runner jobs.list_jobs
标签:util hat first 关注 listen 操作 cmd date pts
原文地址:http://blog.51cto.com/tuwei/2326119