SaltSack自动化运维:SaltSack的基础知识搭建部署

Posted Tuki_a

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SaltSack自动化运维:SaltSack的基础知识搭建部署相关的知识,希望对你有一定的参考价值。

什么是saltstack?

Salt 是:
一个配置管理系统,能够维护预定义状态的远程节点(比如,确保指定的报被安装,指定的服务在运行)。
一个分布式远程执行系统,用来在远程节点(可以是单个节点,也可以是任意规则挑选出来的节点)上执行命令和查询数据。
开发其的目的是为远程执行提供最好的解决方案,并使远程执行变得更好,更快,更简单

Salt非常容易设置和维护,而不用考虑项目的大小。
从数量可观的本地网络系统,到跨数据中心的互联网部署,Salt设计为在任意数量的server下都可工作
salt的拓扑使用简单的server/client模式,需求的功能内建在一组daemon中。
salt在几乎不改动配置的情况下就可以工作,也可以调整从而满足特定的需求。

Salt的核心功能:
使命令发送到远程系统是并行的而不是串行的
使用安全加密的协议
使用最小最快的网络载荷
提供简单的编程接口

Salt同样引入了更加细致化的领域控制系统来远程执行,使得系统成为目标不止可以通过主机名,还可以通过系统属性。

Salt在网络层使用卓越的ZeroMQ_ 网络类库构建,所以Salt的守护端包含了可行的和透明的AMQ代理。
Salt使用公钥和master守护端认证,然后使用更快的AES_ 负载通信加密; 身份认证和加密对salt是不可或缺的
Salt通过msgpack_建立通信,使得速度更快并且网络流量少。

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

Salt能够在1台或多台目标机器上快速执行命令的系统。
Salt运行快速,安装简单,高度可定制;
Salt用相同的远程执行架构满足管理不同数量服务器的需求。
Salt基础设施可以集成最好的远程执行工具,增强了Salt的能力及用途,得到功能丰富实用可以适用于任何网络的系统。

Salt是在`Apache 2.0 协议_下开发,可以被用来开发开放和私有项目。

SaltSack的工作机制

Master和Minion都以守护进程的方式运行
Master监听配置文件里定义的ret_port(接收minion请求),和publish_port(发布消息)的端口
当Minion运行时,它会自动连接到配置文件里定义的Master地址ret_port端口进行连接认证
当Master和Minion可以正常通信后,就可以进行各种各样的配置管理工作了

部署SaltSack

部署前提环境

三台虚拟机主机名/ip/角色如下所示:
server5	192.168.122.15	salt-master
server6	192.168.122.16	salt-minion(1)
server7 192.168.122.17	salt-minion(2)

##为了方便,可以在真机ssh连接虚拟机操作

搭建包含saltstack安装包的源并安装启动

在真机把包含软件包的目录放到apache的发布目录下
在这里插入图片描述

master端和minion端配置salt的源:

[root@server5 yum.repos.d]# vim salt.repo 
[root@server5 yum.repos.d]# pwd
/etc/yum.repos.d
[root@server5 yum.repos.d]# cat salt.repo 
[salt]
name=salt
baseurl=http://192.168.122.1/saltstack
gpgcheck=0
[root@server5 yum.repos.d]# yum repolist	##能列出来salt源即可
[root@server5 yum.repos.d]# scp salt.repo root@192.168.122.16:/etc/yum.repos.d/
[root@server5 yum.repos.d]# scp salt.repo root@192.168.122.17:/etc/yum.repos.d/
##将配置好的文件发给server6和7,免去在server6和7上再配一遍

在这里插入图片描述
在这里插入图片描述
server5安装master并启动

[root@server5 ]# yum install salt-master
[root@server5 ~]# systemctl enable --now salt-master

在这里插入图片描述
Salt Master需要绑定系统上2个TCP端口,分别是4505和4506。下载个lsof查看端口如图已开启

[root@server5 ~]# yum install -y lsof
[root@server5 ~]# lsof -i :4505
[root@server5 ~]# lsof -i :4506

在这里插入图片描述

server6、7端下载minion并配置后开启

[root@server6 ]# yum install salt-minion
[root@server6 ]# vim /etc/salt/minion
##修改master端为server5
[root@server6 ]# systemctl enable --now salt-minion
[root@server7 ]# yum install salt-minion
[root@server7 ]# vim /etc/salt/minion
##修改master端为server5
[root@server7 ]# systemctl enable --now salt-minion

在这里插入图片描述

master验证minion

minion启动后,它会产生一个 id 值,除非已经在之前的运行过程中产生过并且缓存在配置路径下,默认是 /etc/salt 。minion用这个值作为名称尝试去master进行验证。当minion已经运行了,它会产生秘钥对并且尝试连接master。然后折回master服务器接受新minion的公钥。
Salt通过公钥加密和认证minions
想要让minion从master端接受命令,minions的密钥需要被master接受
salt-key命令是用来管理master上所有的密钥的。
salt-key -L将列出已拒绝、已接受和待接受的密钥。
接受仆从密钥的最简单方法是接受所有挂起的密钥即使用salt-key -A

[root@server1 ~]# salt-key -L		#列出所有密钥
[root@server1 ~]# salt-key -A		#接受所有未接受的密钥

在这里插入图片描述

[root@server6 ~]# yum install python-setproctitle.x86_64 -y
在minion端下载这个软件包可以在查看进程时显示相关进程是干什么的
[root@server6 ~]# systemctl restart salt-minion

远程执行命令(salt命令)

现在minion已经连接到master并且通过认证,master可以发送命令到minion
Salt命令允许执行海量的函数库,并且可以针对特殊的minions和minions组为目标执行。

salt 命令包含命令选项,目标说明,要执行的函数,和函数的参数。
执行一个简单的命令:
[root@server5 ~]# salt '*' test.ping
* 是指向所有minions的目标。
test.ping 告诉minon运行 test.ping 函数。

在这里插入图片描述

Salt拥有一个巨大的函数库可用于执行,而且Salt函数自带文档说明,执行salt '*' sys.doc可以查看哪些函数可用。
举例:
[root@server5 ~]# salt server6 sys.doc service

cmd模块包含在minions上执行shell命令的函数
举例:
[root@server5 ~]# salt server6 cmd.run 'uname -a'

pkg 函数会自动将本地系统包管理器映射到相同的salt函数。
例如 salt '*' pkg.install vim 相当于就是在minion端安装vim
举例:
[root@server5 ~]# salt server6 pkg.version salt-minion
[root@server5 ~]# salt server6 pkg.install 'httpd'	#下载httpd
[root@server5 ~]# salt server6 service.start httpd

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

以上是关于SaltSack自动化运维:SaltSack的基础知识搭建部署的主要内容,如果未能解决你的问题,请参考以下文章

SaltSack 自动化运维2

SaltSack自动化运维:job管理

SaltSack自动化运维:编写简单的远程执行模块

SaltSack自动化运维:Zabbix的部署

SaltSack自动化运维:topmaster--syndic--master

SaltSack自动化运维:SalkStack的state模块(使用YAML格式)