老司机独爱Linux自动化运维神器saltstack,看他60分钟的真言-澳门金沙娱乐场amjs6789.com

身旁有许多运维工程师,做了几年的运维自动化,但仍然不克不及肯定挑选哪个工自动化事情?另有,如何更文雅的实行运维自动化和制止究竟傍边的坑?
马哥教诲大咖课堂-175期稀奇约请了一线资深工程师张强为我们带来了一场《saltstack正在自动化运维理论》的分享,实验带着他对事情题目的思索和布置自动化东西的履历给人人一些资助和启示。
————————————
作者引见:
张强,马哥教诲Linux大咖课堂金牌讲师,现就任于同伴伶俐运维工程师,卖力主线业务平台,3年linux一线履历,善于shell剧本、自动化_公布、web运用等,如今存眷自动化运维、分布式数据库,假造化手艺。


自动化东西对照

Puppet或许是四款东西中最不得人心的。便可用操纵、模块和用户界面而言,它是最周全的。Puppet显现了数据中心和谐的全貌,险些涵盖每个运转体系,为各大操作系统供应了深切的东西。初始设置对照简朴,只需求正在需求加以管理的每一个体系上安装主服务器和客户端署理软件。命令行接口(CLI)简朴直观,许可经由过程puppet下令下载和安装模块。然后,需求对配置文件停止变动,好让模块合适所需的义务;应接到指令的客户端取主服务器联络时,会变动配置文件,大概客户端经由过程立刻触发变动配置文件的推送(push)去停止变动。

Ansible存眷的重点是力图精简和快速,并且不需要正在节点上安装署理软件。因而,Ansible经由过程SSH实行一切功用。需求管理的节点被增加到Ansible设置情况,SSH受权密钥被附加到每一个节点上,那取运转Ansible的用户有关。一旦完成了那步,Ansible主服务器能够经由过程SSH取节点停止通讯,实行一切需要的义务。Ansible能够运用Paramiko(基于SSH2和谈的Python实现)或尺度SSH用于通讯,不外另有一种减速形式,许可更快速、更大范围的通讯。

Salt相似Ansible,由于它也是基于CLI的东西,接纳了推送要领实现客户端通讯。它能够经由过程Git或经由过程程序包管理体系安装到主服务器和客户端上。客户端会背主服务器提出恳求,恳求正在主服务器上获得接管后,便能够掌握该客户端了。Salt能够经由过程一般的SSH取客户端停止通讯,但若是运用名为minion的客户端署理软件,能够大大加强可扩展性。另外,Salt含有一个异步文件服务器,能够为客户端加速文件效劳速度,那完整是Salt注意下扩展性的一个表现。取Ansible一样,您能够间接经由过程CLI,背客户端收回下令,好比启动效劳或安装程序包;您也能够运用名为state的YAML配置文件,处置惩罚对照庞大的义务。另有“pillar”,这些是放正在集中中央的数据集,YAML配置文件能够正在运转时期接见它们。

总结:个人观点puppet最大瑕玷就是默许状况下Agent每隔30分钟背master同步状况,master自动推送功用对照微弱(2.7版本),ansible基于SSH效劳实行,若是服务器过多不发起运用,他是运用轮训的体式格局。Salt基于新闻行列。机能相称好,合适大量生产情况。

SaltStack简介取特性

SaltStack 是一种基于 C/S 架构的服务器根蒂根基架构集中化管理平台,管理端称为 Master,客户端称为 Minion。SaltStack 具有配置管理、近程实行、监控等功用,一样平常能够明白为是简化版的 Puppet 和增强版的 Func。SaltStack 自己是基于 Python 言语开辟实现,联合了轻量级的新闻行列软件 ZeroMQ 取 Python 第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack 和 PyYAML 等)构建。

经由过程布置 SaltStack 情况,运维职员能够正在不计其数台服务器上做到批量实行下令,凭据差别的业务特性停止设置集中化管理、分发文件、采集体系数据及软件包的安装取管理等。

SaltStack 具有以下特性:

1、布置简朴、轻易;

2、支撑大部分UNIX/Linux及Windows情况;

3、主从集中化管理;

4、设置简朴、功能强大、扩展性强;

5、主控端(master)和被控端(minion)基于证书认证,平安牢靠。

6、支撑API及自定义模块,可经由过程Python轻松扩大。

SaltStack 的事情道理

SaltStack 接纳 C/S 构造去对云情况内的服务器操纵管理及配置管理。为了更好的明白它的事情体式格局及管理模子,将经由过程图形体式格局对其道理停止论述。

SaltStack 客户端(Minion)正在启动时,会主动天生一套密钥,包罗公钥和公钥。以后将公钥发送给服务器端,服务器端考证并接管公钥,以此去竖立牢靠且加密的通讯衔接。同时经由过程新闻行列 ZeroMQ 正在客户端取服务端之间竖立新闻公布衔接。详细通讯原理图,如图 1 所示,下令实行如图 2 所示:

专业术语阐明:

Minion 是 SaltStack 需求管理的客户端安装组件,会自动去衔接 Master 端,并从 Master 端获得资本状况信息,同步资源管理信息。

Master 作为控制中心运转正在主机服务器上,卖力 Salt 下令运转和资本状况的管理。

ZeroMQ 是一款开源的新闻行列软件,用于正在 Minion 端取 Master 端竖立体系通讯桥梁。

Daemon 是运转于每个成员内的保卫历程,负担着公布新闻及通讯端口监听的功用。

原理图阐明:

Minion 是 SaltStack 需求管理的客户端安装组件,会自动去衔接 Master 端,并从 Master 端获得资本状况信息,同步资源管理信息。

Master 作为控制中心运转正在主机服务器上,卖力 Salt 下令运转和资本状况的管理。

Master 上实行某条指令经由过程行列下发到各个 Minions 去实行,并返回效果。

SaltStack 的架构设想-澳门金沙娱乐场js888.la

为了让人人更好的明白 SaltStack 集中化管理方面的上风,因而,凭据项目的实际情况绘制了布置架构图,并正在文中对架构图停止了具体阐明。如图 3 所示:

澳门金沙娱乐场amjs6789.com

阐明:

SaltStack 的一切被管理客户端节点(如图 3 所示 DB 和 Web),都是经由过程密钥停止加密通讯,运用端口为 4506。客户端取服务器端的内容传输,是经由过程新闻行列完成,运用端口为 4505。Master 能够发送任何指令让 Minion 实行,salt 有许多可执行模块,比如说 CMD 模块,正在安装 minion 的时刻曾经自带了,它们一般位于您的 python 库中,locate salt | grep /usr/ 能够看到 salt 自带的一切器械。

为了更好的明白架构意图,以下将展现重要的下令公布历程:

SaltStack 的 Master 取 Minion 之间经由过程 ZeroMq 停止新闻通报,运用了 ZeroMq 的公布定阅形式,衔接体式格局包孕 TCP 和 IPC。

Salt 下令,将 cmd.run ls 下令从 salt.client.LocalClient.cmd_cli 公布到 Master,获得一个 Jodid,凭据 jobid 获得下令实行效果。

Master 吸收到下令后,将要实行的下令发送给客户端 minion。

Minion 从新闻总线上吸收到要处置惩罚的下令,交给 minion._handle_aes 处置惩罚。

Minion._handle_aes 提议一个当地线程挪用 cmdmod 实行 ls 下令。线程实行完 ls 后,挪用 Minion._return_pub 要领,将实行效果经由过程新闻总线返回给 master。

Master 吸收到客户端返回的效果,挪用 master.handle_aes 要领将效果写的文件中。

Salt.client.LocalClient.cmd_cli 经由过程轮询获得 Job 实行效果,将效果输出到终端。

SaltStack 的安装取设置

对 SaltStack 有了一个开端的相识以后,经由过程现实案例操纵进一步相识 SaltStack。

一、安装Salt

Salt需求epel源支撑,一切安装前需求先安装epel源包。

1、salt-master

# yum -y install salt-master

2、salt-minion

# yum -y install salt-minion

二、设置Salt

1、master(/etc/salt/master)

# salt运转的用户,影响到salt的实行权限

user: root

#salt的运转线程,开的线程越多一样平常处置惩罚的速度越快,但一样平常不要凌驾CPU的个数

worker_threads: 10

# master的管理端口

publish_port : 4505

# master跟minion的通信端口,用于文件效劳,认证,接管返回效果等

ret_port : 4506

# 若是这个master运转的salt-syndic衔接到了一个更高层级的master,那么这个参数需求设置成衔接到的这个下层级master的监听端口

syndic_master_port : 4506

# 指定pid文件位置

pidfile: /var/run/salt-master.pid

# saltstack 能够掌握的文件系统的最先位置

root_dir: /

# 日记文件地点

log_file: /var/log/salt_master.log

# 分组设置

nodegroups:

group_all: ‘*’

# salt state实行时刻的根目录

file_roots:

base:

– /etc/salt/

# 设置pillar 的根目录

pillar_roots:

base:

– /etc/pillar

2、设置minion(/etc/salt/minion)

master: mail  #那块的mail指的是正在/etc/hosts文件中所界说的主机名

id: node1

3、启动salt

service salt-master start

service salt-minion start

# saltstack 是运用python2的言语编写,对python3的兼容性欠好,请运用python2的情况

4、认证下令引见

salt-key #证书管理

# salt-key –L       #检察一切minion-key

# salt-key –a      #接管某个minion-key

# salt-key –A      #接管一切minion-key

# salt-key –d       #删除某个minion-key

# salt-key –D       #删除一切minion-key

5、salt下令引见

下令花样:salt [options] [arguments]

例:salt \* cmd.run ‘uptime’

SaltStack minion婚配体式格局

1、 Glob(salt默许的target范例,运用shell的通配符去指定一个或多个Minion ID)

# salt \* test.ping 或 salt ‘*’ test.ping

2、pcre兼容正则表达式

# salt –E ‘^[m|M]in.[e|o|u]n$’ test.ping

3、Subnet(经由过程指定一个IPv4地点或一个CIDR的IPv4子网)

# salt –S 192.168.0.42 test.ping

# salt –s 192.168.0.0/16 test.ping

4、Grains(salt能够经由过程操作系统、CPU架构及自定义信息等机械特性停止target Minion)

# salt –G ‘os:Ubuntu’ test.ping

# Salt –G ‘os_family:Debian’ test.ping

5、pillar(salt支撑经由过程pillar数据停止婚配)

# Salt –I ‘my_val:my_val’ test.ping

6、混淆(compound)

# Salt –C ‘web* or G@os:Arch’ test.ping

7、节点组(Nodegroup)

节点组需求事先界说,设置要领以下:

# vim /etc/salt/master

nodegroups:

node: ‘L@node1,node2’

# salt -N node test.ping

SaltStack常用模块

1、status模块(检察体系信息)

# salt “*” status.diskstats    #检察磁盘信息

# salt “*” status.meminfo      #检察内存信息

# salt “*” status.w            #w下令返回信息

2、检察一切module列表

3、检察指定module的一切function要领

4、检察指定module用法

5、详细模块的运用(例子)

同时到指定机械检察

cmd.run模块的运用

Grains

Static bits of information that a minion collects about the system when the minion first starts.

The grains interface is made available to Salt modules and components so that the right salt minion commands are automatically available on the right systems.

以上是官方的注释,大抵意义是道grains是minion第一次启动的时刻采集的静态数据,能够用正在salt的模块和其他组件中。比方,当os_family的Grain数据为Centos时,则会运用yum东西组件去停止软件包管理。Grains会正在Minion历程启动时加载,并缓存正在内存中。如许salt-minion历程便不必每次操纵皆从新检索系统去获得Grain,极大的进步了Minion的机能。

1、我们这里简朴做一个输出测试,能够看到minion节点的一些信息以下:

检察详细每一项信息

2、运用场景:

grains的特性–每次启动报告请示、静态决意了它没有pillar天真,要晓得pillar是随时可变的,只要正在master端修正了那一样平常都邑马上见效的。以是grains更合适做一些静态的属性值的采集,比方装备的脚色(role),磁盘个数(disk_num),操作系统版本等诸如此类异常流动的属性。简朴总结起来grains的用处以下:

(1),grains能够正在state体系运用中,用户配置管理模块。

(2),grains能够正在target中运用,用来婚配minion,好比os,用-G。

(3),grains能够用于信息查询,grains生存着收集到的客户端的信息。

那么我们便能够获得一个大抵的判定,若是你想界说的属性值是常常转变的,那请接纳pillar,若是是很流动、不容易变的那请用grains。

3、grains优先级

grains能够连结正在minion端、经由过程master端下发等多个体式格局去分发。但差别的要领有差别的优先级的(由低到高):

(1). /etc/salt/grains

(2) /etc/salt/minion

(3)./srv/salt/_grains/  master端_grains目次下

优先级递次顺次为存在在minion端/etc/salt/minion配置文件中的同名grains会掩盖/etc/salt/grains文件中的值,而经由过程master端_grains目次下grains文件下发的值能够会掩盖minion端的一切同名值。对照拗口,总之记得,经由过程master下发的grains优先级是最高的可,/etc/salt/minion次之,/etc/salt/grains最低(core grains不大懂,便不议论了,这个比/etc/salt/grains借低)。

4、grains的下发

grains的下发大抵能够分为两个思绪:

(1)自定义的(_grains)能够经由过程state.highstate、saltutil.sync_grains、saltutil.sync_all 等要领批量下发,牢记一切正在_grains目次下的一切自定义grains值都邑下发到minion,这是血的经验。

(2)流动寄存正在minion端配置文件中,如grains、minion文件中,能够经由过程file manager的要领去批量下发/etc/salt/grains等配置文件实现grains的批量下发,固然了也经由过程其余体式格局把这个文件批量下发下去,都是ok的。

对照:

(1)经由过程state.highstate 下发的grains优点是不必重启minion便可见效,但经由过程下发/etc/salt/grains文件下发的grains值则必需重启minion端效劳才能够见效。

(2)自定义的_grains每次正在highstate挪用的时刻便会主动下发、革新,而/etc/salt/grains文件的则不会。

Pillar-0029.com金沙

正在大多数场景中,Pillar的显示行动和Grain同等,但有个很大的区分是:Pillar正在Master上停止界说,存在于一个集中化的途径。Pillar数据是取特定minion联系关系的,也就是说每个minion皆只能看到本身的数据,以是Pillar能够用来通报敏感数据(正在Salt的设想中,Pillar运用自力的加密session,也是为了包管敏感数据的安全性)。

Pillar能够用正在那些中央:

1、敏感数据

比方ssh key,加密证书等,因为Pillar运用自力的加密session,能够确保这些敏感数据不被其他minion看到。

2、变量

能够正在Pillar中处置惩罚平台差异性,好比针对差别的操作系统设置软件包的名字,然后正在State中援用。

3、其他任何数据

能够正在Pillar中增加任何需求用到的数据。好比界说用户和UID的对应干系,mnion的脚色等。

4、用正在Targetting中

Pillar能够用来挑选minion,运用-I选项。

界说Pillar:

master配置文件中界说:

默许状况下,master配置文件中的一切数据皆增加到Pillar中,且对一切minion可用。若是要禁用那一默认值,能够正在master配置文件中增加以下数据,重启效劳后见效:

pillar_opts: False

运用SLS文件界说Pillar

Pillar运用取State类似的SLS文件。Pillar文件放正在master配置文件中pillar_roots界说的目次下。示例以下:

pillar_roots:

base:

– /srv/pillar

上面那段代码界说了base情况下的Pillar文件生存正在/srv/pillar/目次下。取State类似,Pillar也有top file,也运用雷同的婚配体式格局将数据应用到minion上。示例以下:

# cat /srv/pillar/top.sls:

base:

‘*’:

– packages

# cat /srv/pillar/packages.sls:

{% if grains[‘os’] == ‘RedHat’ %}

apache: httpd

git: git

{% elif grains[‘os’] == ‘Debian’ %}

apache: apache2

git: git-core

{% endif %}

base情况中所有的minion皆具有packages中界说的数据。Pillar接纳取file server雷同的文件映射体式格局,正在本例中,packages映射到文件/srv/pillar/packages.sls。注重key取value要用冒号加空格分开,没有空格的话将剖析失利。

怎样晓得minion具有那些Pillar数据?

正在Master上修正pillar文件后,需求用以下下令革新minion上的数据:

澳门金沙娱乐场25211.com

运用Pillar获得自定义数据:

State

简述:SLS(代表SaLt State文件)是Salt State体系的中心。SLS形貌了体系的目的状况,由花样简朴的数据组成。那常常被称作配置管理

top.sls是配置管理的入口文件,一切都是从这里最先,正在master 主机上,默许寄存正在/srv/salt/目次.

top.sls 默许从 base 标签最先剖析实行,下一级是操纵的目的,能够经由过程正则,grain模块,或分组名,去停止婚配,再下一级是要实行的state文件,不包换扩展名。

建立/srv/salt/top.sls

澳门金沙娱乐场js888.la

state实战

————告白工夫————

《马哥Linux云盘算及架构师》课程,由着名Linux传教师马哥建立,阅历了8年的生长,结合阿里巴巴、唯品会、群众点评、腾讯、陆金所等大型互联网一线公司的马哥课程团队的工程师停止深度定制开辟,课程接纳 Centos7.2体系讲授,到场了大量实战案例,讲课案例均来自于一线的手艺案例。

开课工夫:11月06号

相干消息

联络我们

400-080-6560

在线征询:

邮件:xiujiang.yang@magedu.com

工作时间:周一至周日,00:09-18:30

QR code