saltstack
相对于ssh key方式管理 可并行,效率高 可用于
1.远程执行 2.配置管理 3.salt云管理
三种模式
1.local
2.master minion 主从 配置文件为 /etc/salt/master /etc/salt/minion
3.salt ssh
**特别注意 salt 使用 YAML 格式 严格区分空格,空格不能错 **
服务端主要配置
#设置IP,确保master minion 在同一个子网
interface: 172.16.1.61
#开启并定义salt目录,目录需要自己创建
file_roots:
base:
- /srv/salt
#开启并定义pillar目录,目录需要自己创建
pillar_roots:
base:
- /srv/pillar
#定义组,L@ 和G@ 分别表示minion和grain信息,是必加的,否则报错
nodegroups:
web: 'L@web01,web02'
lb: 'L@lb01,lb02'
db: 'L@db01,db02'
nfs: 'L@nfs01,nfs02'
#端口一般不需要改
#syndic_master_port: 4506
#publish_port: 4505
客户端主要配置
#master的主机名或IP地址,如果用主机名要有/etc/hosts解析或者DNS服务器解析
master: m01
#minion端id,这个要唯一,但没有特别的限制,只是一个代号
id: web01
#master端IP
#master_port: 4506
部署流程
master minion配置文件写好之后
systemctl enable salt-master
systemctl enable salt-minion
systemctl start salt-master
systemctl start salt-minion
#master端,添加所有minion
salt-key -A -y
#添加某个minion
salt-key -a -y minion-id
#删除所以minion
salt-key -D =y
#删除某个minion
salt-key -d -y minion-id
#测试连通性
salt '*' test.ping
常用命令
#查看cron的方法
salt '*' sys.doc 'cron'
# 查看test的方法
salt '*' sys.doc 'test'
#测试minion返回
salt '*' test.ping
#执行命令,未带空格的命令可以不加引号,有空格的必须加,避免出错,都加
salt '*' cmd.run 'df -h'
#写配置并执行 执行top.sls定义的所有文件
salt '*' state.highstate
#运行指定的文件,支持未定义在top.sls,文件名后不能加.sls后缀,否则报错
salt '*' state.sls name
#显示所有项目名称
salt '*' grains.ls
#列出所有grains项目名及值
salt '*' grains.items
#按IP选
salt -G ipv4:172.16.1.41 cmd.run 'hostname'
#按os选 ,os 字段区分大小写
salt -G os:CentOS cmd.run 'hostname'
#copy 文件 这种方法目的地址要加文件名,不加会报错
salt-cp '*' /etc/hosts /etc/ 也可用 salt '*' file.copy /etc/hosts /etc/hosts
#注意特殊字符转义的问题 用 \
salt 'lb01' cmd.run "ifconfig | awk -F \" \" 'NR==2{print \$2}' "
salt '*' file.copy /etc/hosts /etc/hosts
###查看任务
salt '*' cron.raw_cron root
### 增加任务,长命令需要用 " " 引起来 否则出错
salt 'backup' cron.set_job root '*/1' '*' '*' '*' '*' "ntpdate s2c.time.edu.cn >> /dev/null 2>&1"
###删除任务
salt 'backup' cron.rm_job root "ntpdate s2c.time.edu.cn >> /dev/null 2>&1"
简述state pillar grains三大组件
state
state是Saltstack最核心的功能,通过预先定制好的sls(salt state file)文件对被控制主机进行状态管理,支持包括程序包(pkg)、文件(file)、网络配置(network)、系统服务(service)、系统用户(user)等。
pillar
它用于给特定的minion定义任何你需要的数据,这些数据可以被Salt的其他组件使用。这里可以看出Pillar的一个特点,Pillar数据是与特定minion关联的,也就是说每一个minion都只能看到自己的数据,所以Pillar可以用来传递敏感数据(在Salt的设计中,Pillar使用独立的加密session,也是为了保证敏感数据的安全性)。 另外还可以在Pillar中处理平台差异性,比如针对不同的操作系统设置软件包的名字,然后在State中引用等。 pillar也是Saltstack最重要的组件之一,其作用是定义与被控主机相关的任何数据,定义好的数据可以被其他组件使用,如模板、state、API等。
grains
grains的作用是手机被控主机的基本信息,这些信息通常都是一些静态类的数据,包括CPU、内核、操作系统、虚拟化等,在服务器端可以根据这些信息进行灵活定制,管理员可以利用这些信息对不同业务进行个性化定制。 定义grains数据的方法有两种,一种为在被控主机定制配置文件:另一种是通过主控端扩展模块API实现。区别是模块更灵活,可以通过Python编程动态定义,而 配置文件只适合相对固定的键与值。
state sls文件的定义
必要条件
无论是state还是pillar使用sls文件的定义,必须在master配置中开启 file_root 和 pillar_root的配置项,并且手动创建相关目录和调用文件(默认是没有的),还要创建top.sls文件,/srv/salt /srv/pillar都要创建. 其它在这个问题上,如果不用
salt '*' highstate
也可以不创建top.sls.因为
salt '*' state.sls name
不需要top.sls也可以执行
创建文件及目录
mkdir -p /srv/salt
mkdir -p /srv/salt/conf
cp /etc/hosts /srv/salt/conf/
简单实例一
saltstack的任何配置严格遵循YAML语法,空格个数一定要注意 这个脚本实现拷备本地 /srv/salt/conf/hosts,替换指定主机的/etc/hosts
1.创建top.sls
vim /srv/salt/top.sls
vim top.sls
base:
#这个'*':要加,否则highstate 命令无法用,是个通配的意思
'*':
#添加的文件名,注意这个文件目录是在 /srv/salt/ ,而文件名是cp_hosts.sls
#所以请特别注意,不加后缀,否则报错会特别长,无法分析,所以一定记住
- cp_hosts
2.创建cp_hosts.sls文件
#注意实际的文件名是有.sls的,被坑过
vim /srv/salt/cp_hosts.sls
#目的文件
/etc/hosts:
#方法
file.managed:
#目录是 /srv/salt/conf 其中salt目录是master文件定义的,conf 是为了方便 管理自创建的
- source: salt://conf/hosts
- user: root
- group: root
- mode: 644
3.执行
#执行指定
salt 'web01' state.sls cp_hosts
#或 执行所有
salt 'web01' highstate
实例2 待添加
实例3 待添加
关于state.sls highstate的转载解释
1、state.highstate会读取所有环境(包括base环境)的top.sls文件,并且执行top.sls文件内容里面定义的sls文件,不在top.sls文件里面记录的sls则不会被执行; 2、state.sls默认读取base环境,但是它并不会读取top.sls文件。你可以指定state.sls执行哪个sls文件,只要这个sls文件在base环境下存在; 这里的base环境即是在master中定义的目录
file_roots:
base:
- /srv/salt/
3、state.sls也可以指定读取哪个环境:state.sls salt_env='prod' xxxx.sls,这个xxxx.sls可以不在top.sls中记录。
常用脚本(配置)
#安装salt-master
yum install -y salt-master
#这个手动改一下吧 shell取IP 差异太大
#sed -i 's#\#interface#interface '`ifconfig|sed...`'#g' /etc/salt/minion
systemctl start salt-master
systemctl enable salt-master
#安装salt-minion 以主机名一键配置,master 手动配置
yum install -y salt-minion
#手动改master 名
sed -i 's#\#master: salt#master: m1#g' /etc/salt/minion
sed -i 's#\#id:#id: '`hostname`'#g' /etc/salt/minion
systemctl start salt-minion
systemctl enable salt-minion
#配置出错时,卸载salt-minion
yum remove -y salt-minion
find /etc -name "salt" -exec \rm -rf {} \;
常见问题
minion no responed 错误解决方案
出现这个问题时,删除之前添加过的
1 在master
#删除这个minion
salt-key -d web1
rm -rf /etc/salt/pki/master/minions/web1
2 在minion上操作:
#删除
rm /etc/salt/pki/minion/* -rf
#重启服务
systemctl restart salt-minion
#查看看有无文件(minion.pem minion.pub)如果没有重启机器。
ls /etc/salt/pki/minion/
3关闭两台机器SELinux和防火墙