七天学会SALTSTACK自动化运维 (3)

网友投稿 872 2022-10-16

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

七天学会SALTSTACK自动化运维 (3)

七天学会SALTSTACK自动化运维 (3)

导读SLSTOP.SLSMINION选择器SLS文件的编译总结参考链接

导读

SLS

TOP.SLS

我的 file_roots

/etc/masterfile_roots: base: - /srv/salt/base dev: - /srv/salt/dev test: - /srv/salt/test

我的 top.sl

/srv/salt/base/top.slsbase: '*': - salt.minion - base/srv/salt/dev/top.slsdev: 'dev*': - development_config - dev_db/srv/salt/test/top/slstest: 'env:test': - match: grain - test_config - test_db

我的配置文件中有3个环境,不同的环境对应不同的环境配置目录,目录在 master 的file_roots中配置,意思就是说,每个minion可以读取base的配置文件, dev的可以读取dev的环境, test的可以读取test的环境,这样就可以避免把 settings.py, nginx.conf, my.cnf等等都放到同一个目录中.

现在我的/srv/salt/base/中只放一些通用配置,当执行state.highstate的时候就会执行base.sls中的所有操作到我的minion上,下面参见我的base.sls.

minion_config: file.managed: - name: /etc/base/minion.config - source: salt://minion.configapache: pkg.installed: - watch: - file: minion_config

非常简单,且saltstack自动处理的非常好,只需要告诉minion应该保存文件的位置就可以,source则完全不用配置,因为salt自己知道当前minion对应的哪个环境目录,自动去寻找minion.config文件并且同步到自己的/etc/base/minion.config下,这样就实现了不同环境的分离,不过有一个地方需要注意的是,如果/etc/base目录不存在会同步失败,所以要事先确定目录是否存在。

MINION选择器

其实就把这个东西当做是jquery的选择器来使用就好了,jquery的选择器的出现是因为dom节点非常多,需要通过一中好用的手段去选取自己要控制的节点,而saltstack的选择器也是出于同样的理由而被设计出来,那就是不同minion节点的选择,因为你可能要管理梦幻西游的服务器,梦幻西游的服务器少说也有好几千台吧,有了saltstack选择起来很容易了.

compound:

Letter Match Type ExampleG Grains glob G@os:UbuntuE PCRE Minion ID E@web\d+\.(dev|qa|prod)\.locP Grains PCRE P@os:(RedHat|Fedora|CentOS)L List of minions L@minion1.example.com,minion3.domain.com or bl*.domain.comI Pillar glob I@pdata:foobarS Subnet/IP address S@192.168.1.0/24 or S@192.168.1.100R Range cluster R@%foo.bar

上方的表格出自官方文档,有了第一次的使用经验( sudo salt -G 'env:test' test.ping) 理解起来就很容易了,而且这么多匹配方式还支持混用,也支持 and not or 之类的逻辑运算,就像nginx的配置文件一样灵活。

sudo salt -C 'G@env:dev and G@cpu_nums:8 and E@tokyo* and P@os:(CentOS)'

上面的复杂表达式虽然很长,但是一眼就可以看懂,无需多说,只是对于正则的使用是一个难关.

Node groups:

SLS文件的编译

base/top.sls文件比较特殊(其实并不特殊),因为一般情况下base的目标是所有的minion,而且在base/top.sls中也是可以配置其他环境的section的,这里有一点就是说,当在base/top.sls 发现dev的section之后,那么这个环境就会使用base/top.sls中的dev的配置,而不管dev/top.sls中是否有自己的配置,换一种方法说就是base.sls是在第一时间被解析编译的,可以通过读代码去验证,不过这是学会使用之后的事情了.(其实在ISSUE存在的情况下,上面的一段话是错误的,具体可以hack代码)

对于除base/top.sls之外的其他环境的top.sls, 也遵循与base/top.sls相同的策略,自己的top.sls不存在自己section的,按照字母表顺序去查找其他包含自己section的top.sls,找到之后就使用这个section作为自己的环境.

总结

完全基于自己的理解,基本上对SLS说明的比较清楚了,下一步可能会去debug该软件,或者按照实践去研究,不过我认为别人不一定能完全懂得我的意思,痛点几乎都找到了,下面就是看实践了,可能会开发一套基于saltstack的运维组件,毕竟是提供了api的.

参考链接

上一篇:网络干货,无论是运维还是开发都要知道的网络知识系列之(三)
下一篇:运维工作经验汇总---------高级运维工程师
相关文章

 发表评论

暂时没有评论,来抢沙发吧~