您的位置:首页 > 其它

saltstack

2016-02-25 18:35 309 查看
saltstack 安装

两台机器
192.168.1.122 192.168.1.124
设置hostname以及hosts
192.168.1.122 web1.bbs.com
192.168.1.124 web2.bbs.com
关闭selinux,清空iptables规则

122上
yum install -y epel-release
yum install -y salt-master salt-minion

124上
yum install -y epel-release
yum install -y salt-minion

启动服务
122上 vim /etc/salt/minion
master:192.168.1.122

启动服务
service salt-master start
service salt-minion start

124上
vim /etc/salt/minion
master: 192.168.1.122
启动服务
service salt-minion start
查看进程
ps aux |grep salt

配置认证
一下操作都是在122上
salt-key -a web2.bbs.com
此时在client的/etc/salt/pki/minion命令下面会多出一个minion—_master.pub文件
可以使用salt-key命令查看到已经签名的客户端
salt-key可以使用-A签名所有主机,也可以使用-d删除制定主机的key

远程执行命令
示例1 salt '*' test.ping 这里的*表示所有已经签名的客户端,也可以制定其中一个 比如web2.bbs.com
示例2 salt '*' cmd.run 'df -h'
说明这里的*是在master上已经被接受过的客户端,可以通过salt-key查到,通常是已经设定的id值,关于这部分内容,它支持通配,列表以及正则。比如两台可以端web2 web3 ,那么可以写成salt ’web*' salt 'web1[01]' sakt -L 'web2,web3' salt -E 'web(10|11)等形式,使用列表,即多个机器用逗号分隔,而且需要加-L,使用正则必须要带-E选项> . 他还支持grains,加-G选项,pillar-l选项,下面会介绍到

[root@web1 puppet]# salt '*' test.ping
web2.bbs.com:
True
web1.bbs.com:
True
[root@web1 puppet]# salt '*' cmd.run 'df -h'
web1.bbs.com:
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 2.5G 15G 15% /
tmpfs 491M 16K 491M 1% /dev/shm
/dev/sda1 190M 27M 154M 15% /boot
web2.bbs.com:
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 1.2G 16G 8% /
tmpfs 238M 12K 238M 1% /dev/shm
/dev/sda1 190M 27M 154M 15% /boot
[root@web1 puppet]# salt '*' cmd.run 'hostname'
web2.bbs.com:
web2.bbs.com
web1.bbs.com:
web1.bbs.com
[root@web1 puppet]# salt '*' cmd.run 'w'
web1.bbs.com:
11:17:25 up 2:20, 1 user, load average: 0.21, 0.13, 0.09
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.1.104 16:58 1.00s 1.59s 0.75s /usr/bin/python
web2.bbs.com:
11:17:25 up 2:20, 1 user, load average: 0.48, 0.51, 0.46
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.1.104 08Jan16 16:34 0.32s 0.32s -bas

单个执行命令
[root@web1 puppet]# salt 'web2.bbs.com' cmd.run 'w'
web2.bbs.com:
11:18:34 up 2:21, 1 user, load average: 0.52, 0.51, 0.46
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.1.104 08Jan16 17:43 0.32s 0.32s -bas

正则
salt -E 'web(1|2).bbs.com' cmd.run 'w'
列表
salt -L 'web1.bbs.com,web2.bbs.com' cmd.run 'w'

grains
grains是在minion启动时收集到的一些信息,比如操作系统类型,网卡ip,内核版本,CPU架构等。
salt 'web2.bbs.com' grains.ls 列出所有的grains项目名字
salt 'web2.bbs.com' grains.items 列出所有grains项目以及值
grains的信息并不是动态的,并不会实时变更,他只是在minion启动时收集到的 不能变化
可以根据grains收集到的一些信息,做配置管理工作
grains支持自定义信息

自定义grains
124上
vim /etc/salt/grains 添加
role: nginx
env:test
重启minion服务
service salt-minion restart
122上
获取grains:
salt '*' grains.item role env
可以借助grains的一些属性信息来执行
salt -G role:nginx cmd.run 'hostname'

pillar

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

配置自定义pillar
vim /etc/salt/mster
找到如下配置
pillar_roots:
base:
- /srv/pillar
去掉前面的警号

mkdir /srv/pillar

vim /srv/pillar/test.sls
conf: /etc/123.conf

vim /srv/pillar/top.sls 作为总入口配置文件 不定义它test.sls不生效
base:
'web2.bbs.com':
- test

重启master
/etc/init.d/salt-master restart
salt 'web2.bbs.com' pillar.items
salt '*' pillar.item conf

当更改玩pillar配置文件后,可以通过刷新pillar配置来获取新的pillar状态:
salt '*' saltutil.refresh_pillar
验证: salt '*' pillar.items test
pillar 同样可以用来作为salt的匹配对象 比如salt -l 'conf:/etc/123.conf test.ping
在添加模块
在 cd pillar/
vim aaa.sls
system: Centos

vim top.sls
base:
'web2.bbs.com':
- test
- aaa

salt '*' saltutil.refresh_pillar

[root@web1 pillar]# salt -I system:Centos cmd.run 'w'
web2.bbs.com:
13:36:51 up 4:39, 1 user, load average: 0.60, 0.52, 0.46
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.1.104 08Jan16 18:22 0.35s 0.35s -bash

配置管理安装Apache
122上 vim /etc/salt/master 找到file_roots
打开如下内容的注释
file_roots:
base:
- /srv/salt
mkdir /srv/salt ; cd /srv/salt
vim /srv/salt/top.sls 加入以下内容
base:
'*':
- apache
意思是。在所有的客户端上执行Apache模块
重启/etc/init.d/salt-master restart

vim apache.sls
apache-service:
pkg.installed:
- names: 这里如果只有一个服务,那么就可以写成 -name:httpd 不用在换行了
- httpd
- httpd-devel
service.running:
- name: httpd
- enables: True

说明 Apache-service是id的名字 自定义的 pkg.installed为包安装函数,下面是要安装的包的名字 service.running也是一个函数,来保证制定的服务启动 ,enable开机启动
执行salt 'web2.bbs.com' state.highstate

管理管理文件
/srv/salt
vim filetest.sls
file_test:
file.managed:
- name: /tmp/12.conf
- source: salt://test/123/1.txt
- user: root
- group: root
- mode: 644
说明:第一行的file_test为自定义名字,表示该配置段的名字,可以在别的配置段中引用它,source指定文件从哪里拷贝,这里的test相当于是/srv/salt/test
salt://==/srv/salt
/srv/salt
[root@web1 salt]# mkdir test
[root@web1 salt]# mkdir test/123
vim test/123/1.txt
执行salt 'web2.bbs.com' state.highstate

管理目录
[root@web1 salt]# vim dirtest.sls

file_dir:
file.recurse:
- name: /tmp/testdir
- source: salt://test/123
- user: root
- file_mode: 644
- dir_mode: 755
- mkdir: True
- clean: True

[root@web1 salt]# touch test/123/111111.txt
[root@web1 salt]# salt 'web2.bbs.com' state.highstate

配置管理远程命令
cmd_test:
cmd.run:
- onlyif: test -f /tmp/111.txt
- name:
- touch /tmp/111.txt
- mkdir /tmp/1233
- user: root

配置管理远程脚本
vim shelltest.sls
shell_test:
cmd.script:
- source: salt://test/1.sh
- user: root
vim /srv/salt/test/1.sh
#!/bin/bash
touch /tmp/111111.txt
if [ -d /tmp/123333 ]
then
rm -rf /tmp/123333
fi

[root@web1 salt]# vim top.sls
base:
'web2.bbs.com':
- shelltest

salt 'web2.bbs.com' state.highstate

配置管理任务计划
cron.absent:表示删除
cron_test:
cron.present:
- name: /bin/touch /tmp/1.ttt
- user: root
- minute: '*'
- hour: 20
- daymonth: '*'
- month: '*'
- dayweek: '*'

vim top.sls
base:
'web2.bbs.com':
- shelltest
- crontest

salt 'web2.bbs.com' state.highstate

可能会用到的命令
cp.get_file 拷贝master上的文件到客户端

[root@web1 salt]# salt 'web2.bbs.com' cp.get_file salt://apache.sls /tmp/apeda
web2.bbs.com:
/tmp/apeda

cp.get_dir拷贝目录
salt '*' cp.get_dir salt://test/conf /tmp/ 会自动在客户端创建conf目录,所以后面不要加conf, 如果写成/tmp/conf/则会在/tmp/conf/目录下又创建conf
[root@web1 salt]# salt 'web2.bbs.com' cp.get_dir salt://test /tmp/
web2.bbs.com:
- /tmp//test/1.sh
- /tmp//test/123/1.txt
- /tmp//test/123/111111.txt

salt-run manage.up 显示存活的minion

salt '*' cmd.script salt://test/1.sh 命令下执行master上的shell脚本
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  saltstack