saltstack来敲门 |
官方求助手册:
https://docs.saltstack.com/en/latest/topics/execution/remote_execution.html
eg:模块的帮助文档
使用saltstack自带的rpo源安装saltstack
saltstack也有api。可以和运维平台组合起来;
yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest.el7.noarch.rpm
yum install salt-master
yum install salt-minion
修改配置文件
[root@salt-matser salt]# grep ^master /etc/salt/minion
master: 10.108.15.204
systemctl restart salt-minion
systemctl restart salt-master
systemctl enable salt-minion
systemctl enable salt-master
[root@salt-matser pki]# cat /etc/salt/minion_id
salt-matse
salt根据minion_id 进行资源的编排
认证: salt-key -A #添加全部未认证的keys |
salt的正则使用的---》讲究主机名的设计 dns的域名解析不能解析下划线可以解析横线。 eg: [root@salt-matser pki]# salt '*' test.ping salt-matser: True zabbix: True eg: salt 'salt*' cmd.run 'cd /tmp;wget http://10.108.15.43/PKG.tar' |
yaml语法三板斧没学好的时刻就是噩梦开始的地方
刚开始的时候master的配置文件除了打击你的积极性之外没有任何作用
vim /etc/salt/master #打开下面的注释 file_roots: base: - /srv/salt mkdir -p /srv/salt/web #配置文件目录的创建 重启master [root@salt-matser salt]# cat /srv/salt/web/apache.sls apache-install: pkg.installed: - names: - httpd - httpd-devel apache-service: service.running: - name: httpd - enable: True - reload: True |
输出如下:
[root@salt-matser salt]# salt '*' state.sls web.apache salt-matser: ---------- ID: apache-install #apache.sls中的ID Function: pkg.installed #方法是调用pkg.installed Name: httpd Result: True Comment: All specified packages are already installed Started: 20:14:01.204544 Duration: 1878.253 ms Changes: ---------- ID: apache-install Function: pkg.installed Name: httpd-devel Result: True Comment: The following packages were installed/updated: httpd-devel Started: 20:14:03.083152 Duration: 11834.305 ms Changes: #由于已经安装了apache所以对apache进行更新 ---------- apr-devel: ---------- new: 1.4.8-3.el7_4.1 old: apr-util-devel: ---------- new: 1.5.2-6.el7 old: cyrus-sasl: ---------- #统计执行的结果 Summary for salt-matser ------------ Succeeded: 3 (changed=1) Failed: 0 |
base: 'salt*': #指定主机名中带有salt的主机 - web.apache #执行web.apache的方法 [root@salt-matser salt]# cat top.sls base: 'salt*': - web.apache [root@salt-matser salt]# salt '*' state.highstate [root@salt-matser salt]# salt '*' state.highstate test=ture #先测试和sed -i一样的道理且尽量不要使用'*' |
自此以后我们后续所有的安装部署都是saltstack来写的。运维过上了幸福快乐的日子。使用salt做配置管理就要始终以saltstack为准
grains
[root@salt-matser salt]# salt 'salt*' grains.ls #键值对
salt-matser:
- SSDs
- biosreleasedate
- biosversion
- cpu_flags
- cpu_model
[root@salt-matser salt]# salt 'salt*' grains.items #主机的信息(dns,sn,ip,mac,cpu信息,os,是否是vm)
salt-matser:
----------
SSDs:
biosreleasedate:
04/14/2014
biosversion:
6.00
cpu_flags:
- fpu
- vme
- de
[root@salt-matser salt]# salt '*' grains.item os fqdn_ip4 #查看主机的OS和IP信息
zabbix:
----------
fqdn_ip4:
- 10.108.15.231
os:
CentOS
salt-matser:
----------
fqdn_ip4:
- 10.108.15.204
os:
CentOS
topfirl和-G都可以做目标选择
[root@salt-matser salt]# salt -G os:CentOS cmd.run 'w' # -G:代表使用Grains收集,使用w命令,查看os是centos的登录信息
grains的用法: 1.收集底层系统信息 2、远程执行里面匹配minion 3、top.sls里面匹配minion #写配置文件自定义grains,增加配置的灵活度, eg: [root@salt-matser salt]# cat /srv/salt/top.sls base: 'web:nginx': - match: grain - apache 4、grains的二次开发 [root@server1 salt]# pwd /srv/salt [root@salt-matser salt]# mkdir _grains;cd _grains/ [root@salt-matser _grains]# vim grains.py [root@salt-matser _grains]# cat grains.py #!/usr/bin/env python def my_grains(): grains = {} #初始化字典 grains['APP'] = '571XA' #key-value grains['DB'] = '571XA' return grains #返回字典 [root@salt-matser _grains]# salt '*' saltutil.sync_grains #推送到minion上 推送到minion的位置如下: [root@salt-matser salt]# ls minion/files/base/_grains/ grains.py [root@salt-matser salt]# pwd /var/cache/salt #查看 [root@salt-matser _grains]# salt '*' grains.item APP salt-matser: ---------- APP: 571XA zabbix: ---------- APP: 571XA granis的优先级系统自带的最高,自己写的最低 |
pillar
[root@salt-matser _grains]# vim /etc/salt/master [root@salt-matser _grains]# grep '^[a-z]' /etc/salt/master #修改配置文件 file_roots: pillar_roots: [root@salt-matser _grains]# mkdir /srv/pillar [root@salt-matser _grains]# mkdir -p /srv/pillar/web [root@salt-matser _grains]# vim /srv/pillar/web/apache.sls [root@salt-matser _grains]# cat /srv/pillar/web/apache.sls #使用jinja模板 {%if grains['os'] == 'CentOS' %} apache: httpd {% elif grains['os'] == 'Debian' %} apache: apache2 {% endif % [root@salt-matser web]# cat package.sls zabbix: package-name: zabbix version: 2.2.4 [root@salt-matser web]# cat ../top.sls base: '*': - web.apache - web.package #修改完pillar的时候需要刷新 [root@salt-matser pillar]# salt '*' saltutil.refresh_pillar 获取: [root@salt-matser web]# salt '*' pillar.items zabbix salt-matser: ---------- zabbix: ---------- package-name: zabbix version: 2.2.4 zabbix: ---------- zabbix: ---------- package-name: zabbix version: 2.2.4 |
自此以后:jinja模板+各种for循环实现自动化安装zabbix和openstack
grains在游戏运维中的应用:salt -G目标选择
Grains静态数据系统(当重新启动的时候进行收集一次)信息查询
Pillar动态数据系统
salt的远程执行 cmd.run是比较危险的什么都可以执行,可以使用自己写的模块 通配符: salt 'SSS-[571XA|571XF]-APP0?' test.ping 列表: salt -L 'salt-matser,zabbix' test.ping 也可以进行分组 100台机器要重启的话每次只重启5台 -b 5 可以自己写saltstack的模块 查看所有的arp表 salt '*' network.arp 拷贝文件: [root@salt-matser web]# salt-cp '*' /opt/zabbix/v12.3 /tmp 检查是否拷贝 [root@salt-matser web]# salt '*' cmd.run 'ls /tmp' salt '*' service.available sshd salt '*' service.reload httpd 返回tcp状态 salt '*' network.active_tcp |
官方求助使用:
配置管理:对比配置管理学习在官方文档中有详细的介绍 配置管理(一种编排)为什么是状态管理? SLS表示系统将会是什么样的一种状态,而且是以一种很简单的格式来包含这些数据。这经常也被叫做配置管理 比如你使用配置文件安装一个软件就进入一个新的状态 eg:状态是不能回滚的,你安装一个软件再把它卸载对系统是有影响的 /etc/http/conf/http.conf: file.managed: - source: salt://apache/http.conf - user: root - group: root - mode: 644 salt配置管理进行场地版本发布 在minion上安装软件就需要你先在master上安装此软件然后拷贝配置文件 排错 检查日志: cat /var/log/salt/minion master的日志改为debug模式 |