SaltStack自动化运维部署

一.什么是SaltStack

SaltStack是一个服务器基础设施管理工具,它具有配置管理,远程执行,监控等功能,SaltStack由Python语言编写,是非常简单易用和轻量级的管理工具。

二.为什么使用SaltStack

为同时管理多台机器,与传统的Xshell不同的是它不需要与每台主机手动建立链接,而是在客户端安装客户端应用程序Minion,由客户端应用程序主动连接服务端Master。

三.SaltStack原理

SaltStack由Master和Minion构成,Master是服务端,表示一台服务器,Minion是客户服务器端,表示多台服务器

在 Master 上发送命令给符合条件的 Minion,Minion 就会执行相应的命令。Master 和 Minion 之间是通过 ZeroMQ(消息队列)进行通信。

Saltstack 的 Master 端监听 4505与 4506 端口,4505为 Saltstack 的消息发布端口,4506为 Saltstack 客户端与服务端通信的端口。Saltstack 客户端程序并不监听端口,当客户端启动后,会主动连接 Master 端注册,然后一直保持该 TCP 连接,而 Master 通过这条 TCP 连接对客户端进行控制。如果连接断开,aster 对客户端将不能进行控制。但是,当客户端检查到连接断开后,会定期的向Master 端请求注册连接。

四.SaltStack部署

1.设置系统基础环境

(1)修改host文件

192.168.10.101 master
192.168.10.102 minion01
192.168.10.103 minion02

(2)关闭防火墙和内核安全机制

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
vim /etc/selinux/config
SELINUX=disabled

(2)按要求设置主机名称

hostnamectl set-hostname  名称

2.安装Master

将所需rpm包拷贝到服务器

rpm -ivh salt-3006.4-0.x86_64.rpm


rpm -ivh salt-master-3006.4-0.x86_64.rpm 

备注:

以下软件包为扩展 saltstack 的可选组件。

salt-ssh:主要作用是不需要安装 minion,只要 ssh 协议开放,即可远程执行命令,可用作拿到一批新机器,批量配置时使用,也可以直接通过 salt-ssh 不安装 minion 进行管理。

salt-syndic:通过 Syndic,可以建立多层级的Salt拓扑,Syndic 下的Minions 即可通过 syndic所在的 Master 进行管理,也可以通过 MasterOfMaster 及更高层级的 Master 进行管理,架构变得异常灵活,

salt-cloud:salt cloud 目前已经提供了对腾讯云平台的管理支持,一些常见的云平台管理功能、管理操作已经都可以做到通过 salt cloud 集成到自有的技术平台上做统一的资源管理了。

salt-api:salt-api 是我们通过 restful-api 调用 salt-master 的接口,且调用的时候必须通过认证才能调用,认证的用户为系统用户

3. 配置Master

(1)修改Master的配置文件

[root@master ~]# vim /etc/salt/master

interface: 192.168.10.101
auto_accept: True

file_roots:
  base:
    - /srv/salt

nodegroups:
  group1: 'web01'
  group2: 'web02'

pillar_opts: True
pillar_roots:
  base:
    - /srv/pillar

备注:

file_roots:

base:

  • /srv/salt

开启SaltStack文件根目录位置,注意这个目录默认没有创建,需要手动创建

pillar_opts: True

开启pillar功能,同步文件功能

pillar_roots:

base:

  • /srv/pillar

pillar的主目录,需要自己创建

nodegroups:

group1: 'web01'

group2: 'web02'

设置主机组,group1:"web01"组中有多个成员就用逗号隔开------》group: 'web01,web02'

(2)创建相关目录

 mkdir /srv/salt
 mkdir /srv/pillar

(3)开启Master并设置为开机自启

systemctl start salt-master
systemctl enable salt-master

(4)查看相关端口(4505,4506),确保Master正常开启

[root@master ~]# netstat -anpt | grep salt
tcp        0      0 192.168.10.101:4505     0.0.0.0:*               LISTEN      1760/salt-master Pu 
tcp        0      0 192.168.10.101:4506     0.0.0.0:*               LISTEN      1766/salt-master Re 

4.安装Minion

将所需rpm包拷贝到服务器

rpm -ivh salt-3006.4-0.x86_64.rpm


rpm -ivh salt-master-3006.4-0.x86_64.rpm 

5.配置Minion

(1)修改Minion的配置文件

vim /etc/salt/minion

master: 192.168.10.101
id: web01                #添加到相关组

注意:

如果修改了 minion 端的 id, minion 会重新注册,向 master 发送新的 key,老的注册信息就失效了,但此时 master 仍然会连接老的 minion,于是就会报错,

解决方法:可以删除掉老的 minion 注册信息,Master目录/etc/salt/pki/master/minions,默认会使用minion 端的 ip 地址作为 key 名称。将以前注册的 ID 删掉,即可。

(2) 启动Minion并设置为开机自启

systemctl start salt-minion
systemctl enable salt-minion

备注:

当 Minion 启动后,会自动生成公钥和私钥,并将公钥发送到Master端。Minion不监听端口,全靠和Master保持长连接,可通过netstat -anpt | grep salt命令查看是否连接成功,到此SaltStack安装完成。

(3)查看端口验证

[root@minion01 ~]# netstat -anpt | grep salt
tcp        0      0 192.168.10.102:42312    192.168.10.101:4506     ESTABLISHED 2153/salt-minion Mu 
tcp        0      0 192.168.10.102:48640    192.168.10.101:4505     ESTABLISHED 2153/salt-minion Mu

(4)Master查看连接

[root@master minions]# netstat -anpt | grep salt
tcp        0      0 192.168.10.101:4505     0.0.0.0:*               LISTEN      1760/salt-master Pu 
tcp        0      0 192.168.10.101:4506     0.0.0.0:*               LISTEN      1766/salt-master Re 
tcp        0      0 192.168.10.101:4506     192.168.10.103:60084    ESTABLISHED 1766/salt-master Re 
tcp        0      0 192.168.10.101:4505     192.168.10.102:48640    ESTABLISHED 1760/salt-master Pu 
tcp        0      0 192.168.10.101:4505     192.168.10.103:60734    ESTABLISHED 1760/salt-master Pu 
tcp        0      0 192.168.10.101:4506     192.168.10.102:42312    ESTABLISHED 1766/salt-master Re 

6.Master端查看Minion密钥

在 minion 启动后,会连接master,并且会请求 master 为其签发证书,待证书签发完成后,代表master 可以信任该 minion,并且 minion 和 master 端的通信是经过加密的。我们可以通过 salt-key命令管理 minion 秘钥。

(1)Master端查看介绍的Minion端

[root@master minions]# salt-key -L
Accepted Keys:
web01
web02
Denied Keys:
Unaccepted Keys:
Rejected Keys:

(2)获取Minion端指纹码

[root@master minions]# salt-key -f web01
Accepted Keys:
web01:  05:28:c4:39:b1:55:24:2b:42:18:6a:70:d9:9f:51:fa:a3:c3:66:df:0c:bd:0c:47:d9:26:f7:c9:7c:9a:05:4e

(3)前往Minion端验证指纹码

[root@minion01 ~]# salt-call --local key.finger
local:
    05:28:c4:39:b1:55:24:2b:42:18:6a:70:d9:9f:51:fa:a3:c3:66:df:0c:bd:0c:47:d9:26:f7:c9:7c:9a:05:4e
相关推荐
VinciYan22 分钟前
基于Jenkins+Docker的自动化部署实践——整合Git与Python脚本实现远程部署
python·ubuntu·docker·自动化·jenkins·.net·运维开发
冷曦_sole44 分钟前
linux-19 根文件系统(一)
linux·运维·服务器
AI大模型学徒1 小时前
Linux(二)_清理空间
linux·运维·服务器
tntlbb1 小时前
Ubuntu20.4 VPN+Docker代理配置
运维·ubuntu·docker·容器
一条测试老狗2 小时前
【UI自动化】从WebDriver看Selenium与Appium的底层关联
selenium·appium·自动化
Linux运维技术栈2 小时前
Ansible(自动化运维)环境搭建及ansible-vault加密配置
运维·自动化·ansible
Bessssss4 小时前
centos权限大集合,覆盖多种权限类型,解惑权限后有“. + t s”问题!
linux·运维·centos
苹果醋34 小时前
Golang的文件加密工具
运维·vue.js·spring boot·nginx·课程设计
jwensh4 小时前
【Jenkins】Declarative和Scripted两种脚本模式有什么具体的区别
运维·前端·jenkins
大熊程序猿5 小时前
xxl-job docker 安装
运维·docker·容器