SaltStack 使用总结

12-04 27 views

SaltStack是一个开源的、新的基础平台管理工具,使用Python语言开发,同时提供Rest API方便二次开发以及和其他运维管理系统进行集成。相对于出道比较早的Puppet,SaltStack先天的优势就是简单、易用,可以非常快速的在团队中推广和使用,而且运行多平台。

SaltStack目前拥有四大主要功能

* 远程执行:就是在管理节点上实现在上百台、上千台机器上同时执行一个命令。
* 配置管理:也可以称之为状态管理,你可以描述一个状态。例如,某台机器要安装Nginx软件包、Nginx必须是启动的状态、Nginx有一个配置文件(内容和某个地方的一样)。你用一种描述语法描述出来后交给SaltStack,SaltStack就可以帮你实现,而不用你手动进行Nginx软件包的安装、配置文件的修改、启动等。
* 云管理:SaltStack有一个组件叫作salt-cloud,它可以帮你自动化的进行云主机的创建和管理,支持很多公有云或私有云,例如AWS、阿里云、HP云、OpenStack、CloudStack等。
* 事件驱动:事件驱动基础设施是SaltStack最强大也是最神秘的功能,前面的远程执行和配置管理是最基础的的,事件驱动是指SaltStack在日常运行中可以产生和捕捉事件,并根据捕捉到的事件触发对应的操作。

SaltStack的四种运行方式

* Local:在本地运行或者说单台使用SaltStack
* Minion/Master: 传统的客户端/服务器端(C/S)架构
* Syndic: 使用代理实现架构扩展,用于管理更多的节点
* Salt SSH: 无须安装客户端,直接通过SSH通信

目标机器匹配方法

SaltStack有以下几种方式来选择目标机器,灵活而又强大。大的来讲分为两大类:

1. 基于Minion ID

Minion ID是客户端(minion)的唯一标识符。可以在minion配置文件里面使用ID选项进行配置,如果不指定,其默认是主机的FQDN名。Minion ID是不能变动的,因为在进行key认证的时候,生成的文件名是以Minion ID命名的。如果Minion发生变动,就需要使用salt-key -d删除老的Minion ID,然后重新加入新的Minion ID。

* Globbing(通配符)
* regex(正则表达式)
* list(列表)

2. 不基于Minion ID

* 子网/IP地址
* Grains
* Grains PCRE
* Pillar
* Compound matchers(复合匹配)
* Node groups(节点组)
* Batching execution(批处理执行)

演示

指定Minion ID是最直接的选择目标的方法

查看所有minion节点

授权minion节点
可以修改/etc/salt/master的配置auto_accept:True自动认证

* salt-key -L: 显示已经或未认证的minion节点,Accepted Keys为已认证清单
* salt-key -D: 删除所有Minion节点的证书
* salt-key -d id: 删除单个minion节点的证书
* salt-key -A: 接受所有minion节点的请求
* salt-key -a id: 接受单个minion节点的请求

Globbing是指在Minion ID的基础上,通过通配符来定位Minion。SaltStack默认使用Shell风格通配符(如“*” “?” “[]”)来匹配Minion ID。不过需要注意的是,使用salt命令时必须将’*’放在单引号中,或是用’\’转义,用来避免shell解析。
匹配所有itnotebooks.com域的所有minion

匹配docker后面单个任意字符的Minion

匹配docker节点1到节点3的Minion

匹配docker不是节点1和节点3的Minion

list和直接Minion ID都是最基本的模式,可以列出每一个Minion ID来指定多个目标机器,使用选项’-L’

Salt可以使用Perl风格的正则表达式来匹配Minion ID,使用选项-E

规范的Minion ID可以很好的反映出该服务器运行的相关服务及所在位置

* redis-node1:运行的服务是Redis,这是第一个节点
* redis03:说明这个redis是Redis集群编号03里面的节点
* idc04:这台服务器运行在编号04的IDC机房中
* soa:这台服务器是给SOA服务使用的
* itnotebooks.com:运行的服务器是itnotebooks.com业务

也可以使用IP地址或CIDR子网来指定目标,目前仅支持IPv4的地址

也可以使用Grains对Trageting进行匹配,使用选项’-G’
匹配所有CentOS系统的Minion

通过Grain匹配非常灵活,如果你想进行更复杂的基于Grains的匹配,SaltStack提供了Grain PCRE,可以在Grains的基础上使用正则表达式

Pillar的数据可以用来定位Minion,为定位Minions提供了灵活性和终极控制

Compound matchers(混合匹配)可以使用布尔操作符连接多个目标条件。混合匹配可以用前面讨论的多种方式实现精确的匹配。混合配匹配默认使用Globbing,如果要使用其它匹配方式,需要加上类型前缀字母如下表所示。



前缀字母 含义 例子
G Grains glob匹配 G@os:Ubuntu
E PCRE Minion ID匹配 E@web\d+\.(dev|qa|prod)\.loc
P Grains PCRE匹配 P@os:(RedHat|Fedora|CentOS)
L 列表 L@minion1.example.com,minion3.domain.com or bl*.domain.com
I Pillar glob匹配 I@pdata:foobar
S 子网/IP地址匹配 S@192.168.1.0/24 or S@192.168.1.100
R Range cluster匹配 R@%foo.bar
D Minion Data匹配 D@key:value

复合匹配中也可以使用and、or、not操作符,例如要匹配主机名以及webserv开始且运行Debain系统的Minion,还能匹配主机名满足正则表达式web-dc1-srv.*的Minion

* G表示用shell通配符匹配Grains
* E表示用正则表达式匹配Minion ID
需要注意的是not不能用于第一个条件,需要用时可以像下面这样写:

Node group是在Master中nodegroup用复合条件字义的一组Minion

远程执行命令-查看内存使用

远程执行命令-查看操作系统类型

远程执行命令-查看指定发行版本号为6.4的主机的python版本

远程执行命令-解压文件

远程执行命令-压缩文件

除了上面所提到的外,其它类似的模块还有很多很多
如cp、cron、file、iptables、network、dnsuti、service、pkg等等,详细的自己用过就知道了,当然你也可以在cmd.run里面去完成这一切



如果想赏钱,可以用微信扫描下面的二维码,一来能刺激我写博客的欲望,二来好维护云主机的费用; 另外再次标注博客原地址 itnotebooks.com 感谢!

手把手搭建CI/CD(一)

gitlab + tekton + argoCD

阅读全文

自动分析国家关于每年的法定节假日安排公告,生成查询接口自动判断作息日

背景 工作中经常遇到需要根据作息去做排班系统、跑定时报表任务、统一告警通道、巡检等等场景,之前是比较粗暴的区分周一~周五、周六和周日这样,遇到法定节...

阅读全文

Golang Terraform 创建阿里云ECS云主机

封装NewTerraform方法 将Terraform的环境相关信息都在这个方法内定义完成 1. Terraform工作目录定义 2. Plugins初始化,考虑到在线初始化太慢,这里是提前下...

阅读全文

欢迎留言