企业saltsatck学习(一) ------ 有关salt的知识了解
发布日期:2021-07-27 05:04:15 浏览次数:8 分类:技术文章

本文共 4656 字,大约阅读时间需要 15 分钟。

一、常见自动化运维

1、常见工具

Puppet:基于rubby开发,c/s架构,支持多平台,可管理配置文件、用户、cron任务、软件包、系统服务等。分为社区版和企业版,企业版支持图形化配置。
Saltstack:基于Python开发,c/s架构,支持多平台,比Puppet轻量,在远程执行命令时非常快捷,配置和使用比puppet容易,能实现puppet几乎所有的功能。
Ansible:更加简洁的自动化运维工具,不需要在客户端上安装客户端软件,基于Python开发的。可以实现批量操作系统配置、批量程序的部署、批量执行命令。
2.学习了解
Puppet:官网:www.puppetlabs.com ,基于rubby开发,C/S架构,支持多平台,可管理配置文件、用户、cron任务、软件包、系统服务等。
分为社区版(免费)和企业版(收费),企业版支持图形化配置。
Saltstack:官网:https://saltstack.com ,基于python开发,C/S架构,支持多平台,比puppet轻量,在远程执行命令是非常快捷,配置和使用比puppet容易,能实现puppet几乎所有的功能。
Ansible:官网:www.ansible.com ,更加简洁的自动化运维工具,不需要在客户端上安装agent,基于python开发,可以实现批量操作系统配置、批量程序的部署、批量运行命令。

二、ansible与saltstack的比较

Saltstack Ansible
SaltStack 依靠ZeroMQ速度快 Ansible SSH传输速度慢一些
ZeroMQ本身不加密,AES加密,需注意MITM攻击 SSH安全性高
Master需要守护进程 无额外开支,SSH即可
State语法需要学习 playbook语法相对简单,容易学习
excution模块+state模块,state会调用excution模块 Ansible模块+playbook
使用topfile top.sls 使用YAML playbook使用YAML
围绕Master输入命令,首次连接使用加密key,使用ZeroMQ库不会拥堵,持续连接速度更快 使用SSH通道,无固定Master,更安全,也有MQ版本
未提及 配置记录文件,原始vs生产
默认本地root,客户端root 支持多用户sudo操作
密码容易保管,命令容易审计 SSH,公钥连接
配置模块化,学习成本更高 克隆Ansible Git,语法简单

三、saltstack

1、有关saltstack

Saltstack是基于Python开发的一套C/S架构,具备Puppet、Ansible功能于一身的配置管理工具,功能十分强大,
各模块融合度及复用性极高;使用号称世界上最快的消息队列ZeroMQ使得Saltstack能够秒级在数万台服务器上进行各种操作,
而且使用RAS Key方式确认身份,传输采用AES加密,安全性能更高;
Saltstack不仅仅是一款配置管理工具,还是一款做云计算和数据中心架构编排利器。
目前Salt-cloud项目也已经合并到Saltstack主项目里,Saltstack已经支持Docker相关模块,
在友好地支持各大云平台之后,配合Saltstack的Mine实现各云平台业务自动扩展。
SaltStack是一种新型的基础设施管理软件,简单易部署,可伸缩的足以管理成千上万的服务器
和足够快的速度控制,与他们交流,以毫秒为单位
SaltStack提供了一个动态基础设施通信总线用于编排,远程执行、配置管理等等
SaltStack项目于2011年启动,年增长速度较快,五年期固定基础设施编制和配置管理的开源项目
SaltStack社区致力于保持slat项目集中、友好、健康、开放
简单来说它的两大基础功能就是:配置管理、远程命令执行
剩下就是根据你的需求自由组合,实现更复杂的功能和系统管理

2.核心内容

1.使命令发送到远程系统是并行的而不是串行的
2.使用安全加密的协议
3.使用最小最快的网络载荷
4.提供简单的编程接口

salt使用Python客户端接口

为了允许简单的扩展,Salt执行程序可以写为纯Python模块。

数据从Salt执行过程中收集到可以发送回master服务端,或者发送到任何任意程序。
Salt可以从一个简单的Python API调用,或者从命令行被调用,所以Salt可以用来执行一次性命令,
也可以作为一个更大的应用程序的一个组成部分。

SaltStack作用于仆从和主拓扑。SaltStack与特定的命令结合使用可以在一个或多个下属执行。

实现这一点,此时Salt Master可以发出命令,如salt ‘*’ cmd.run ‘ls -l /’。
除了运行远程命令,SaltStack允许管理员使用“grain”。
grain可以在SaltStack仆从运行远程查询,因此收集仆从的状态信息并允许管理员在一个中央位置存储信息。
SaltStack也可以帮助管理员定义目标系统上的期望状态。
这些状态在应用时会用到.sls文件,其中包含了如何在系统上获得所需的状态非常具体的要求。
由于它提供了在管理远程系统的灵活性,SaltStack-based产品迅速获得利益。
该功能可以对比由状态管理系统提供的功能,如Puppet和Ansible。
SaltStack很大程度上得益于快速的采用率,它包括一个在管理系统上运行远程命令的有效方式。

3、saltstack的端口

master端:4505
minion端:4506
saltstack的master端监听4505与4506端口。
4505为salt的消息发布系统,4506为salt客户端与服务端通信的端口;
salt客户端程序不监听端口,客户端启动后,会主动连接master端注册,然后一直保持该TCP连接,
master通过这条TCP连接对客户端控制,如果连接断开,master对客户端就无能为力了。
当然,客户端若检查到断开后会定期的一直连接master端的。
4.SaltStack的组件

(1)SaltStack Master

中央管理系统\服务端,这个系统是用来发送命令和配置到SaltStack Minion上运行。

(2)SaltStack Minion

接受受管理系统\客户端,该系统接收来自SaltStack Master命令和配置。

(3)执行模块过程

特别对一个或多个命令从命令行执行受管理系统。
适用于:实时监控、状态和库存;一次性命令和脚本;部署关键更新

4)规则(States)

声明或命令式表示一个系统的配置
在这里插入图片描述
(5)Grains
系统变量, Grains是静态信息基础管理系统,包括操作系统、内存和许多其他的系统属性,您还可以定义定制的Grains为任何系统

(6)Pillar

用户定义的变量,这些安全变量定义和存储在Salt Master,然后“分配”到一个或多个下属,Pillar数据存储值,文件路径,配置参数,和密码。

(8)Top File

数据匹配公式
在这里插入图片描述

(8)Runners

模块执行SaltStack Master执行支持任务,Runners报告的工作状态、连接状态读取数据从外部api,查询连接Salt Minions,和更多。
例如,安排Runners在许多系统之间协调配置部署。

(9)Returners

SaltStack Minion返回的数据发送到另一个系统,如数据库,Returners可以运行在Salt Minion或Salt Minion。

(10)Reactor

SaltStack环境中触发事件发生时的反应。

(11)Salt Cloud / Salt Virt

云提供商提供系统/管理程序并立即把他们管理下。

(12)SaltStack SSH

SaltStack使用ssh运行命令,在没有Salt Minion的情况下。

5.salt的yaml语法规则

YAML是“YAML不是一种标记语言”的外语缩写
但为了强调这种语言以数据做为中心,而不是以置标语言为重点,而用返璞词重新命名。
它是一种直观的能够被电脑识别的数据序列化格式,是一个可读性高并且容易被人类阅读,
容易和脚本语言交互,用来表达资料序列的编程语言。
前面学ansible的时候playbook文件使用的是yaml语法,其实这都是因为它是用python写的
saltstack也是用python写的,也要使用yaml语言
所以使用的yaml语法,那么我们就来具体了解一下yaml

默认的SLS文件的renderer是YAML renderer。YAML是一个有很多强大

特性的标记性语言。Salt使用了一个YAML的小型子集,映射非常常用的
数据结构,像列表和字典。YAML renderer的工作是将YAML数据格式的
结构编译成为Python数据结构给Salt使用。
尽管YAML语法可能第一眼看上去很简洁但令人畏惧,但是只要记住三个
非常简单的规则就可以使用YAML语法写SLS文件了。

规则:

(1)规则一:缩进
YAML使用一个固定的缩进风格表示数据层结构关系。Salt需要每个缩进级别
由两个空格组成。不要使用tabs。如果要使用tabls的话建议修改.vimrc,设置tab的缩进格数
(2)规则二:冒号
Python的字典当然理所当然是简单的键值对。其他语言的用户应该知道这个数据类型叫哈希表或者关联数组。 字典的keys在YAML中的表现形式是一个以冒号结尾的字符串。Values的表现形式冒号下面的每一行,用一个空格隔开: my_key: my_value 在Python中,上面的将映射为: {‘my_key’: ‘my_value’} 另一种选择,一个value可以通过缩进与key联接。 my_key:my_value 注解: 上面的语法是有效的YAML,但是在SLS文件罕见,因为通常情况下,一个key的value不是单一的,而是一个 列表 的values。 在Python中,上面的将映射为:{‘my_key’: ‘my_value’} 字典可以被嵌套: first_level_dict_key:second_level_dict_key: value_in_second_level_dict 在Python中: { ‘first_level_dict_key’: { ‘second_level_dict_key’: ‘value_in_second_level_dict’ } }
(3)规则三:短横杠
想要表示列表项,使用一个短横杠加一个空格。多个项使用同样的缩进级别作为同一列表的一部分。

- list_value_one- list_value_two- list_value_three

列表可以可以作为一个键值对的value。这个在Salt很常见:

my_dictionary:- list_value_one- list_value_two- list_value_three

在Python中,上面的将映射为:

{'my_dictionary': ['list_value_one', 'list_value_two', 'list_value_three']}

转载地址:https://blog.csdn.net/qq_45425035/article/details/103251997 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:企业saltstack学习(二)-----salt部署apache、nginx、haproxy及利用top.sls高级智能部署
下一篇:企业级ansible(一)-----ansible的基础知识了解

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年09月22日 09时46分49秒