目 录CONTENT

文章目录

SaltStack入门

ZiChen D
2021-11-01 / 0 评论 / 0 点赞 / 345 阅读 / 9,185 字 / 正在检测是否收录...

SaltStack简介

SaltStack是由thomas Hatch于2011年创建的一个开源项目,设计初衷是为了实现一个快速的远程执行系统。

SaltStack是一个服务器基础架构集中化管理平台,具备配置管理、远程执行、监控等功能,基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建。

通过部署SaltStack,我们可以在成千万台服务器上做到批量执行命令,根据不同业务进行配置集中化管理、分发文件、采集服务器数据、操作系统基础及软件包管理等。

自动化运维工具介绍

系统管理员日常会进行大量的重复性操作,例如安装软件,修改配置文件,创建用户,批量执行命令等等。如果主机数量庞大,单靠人工维护实在让人难以忍受。

早期运维人员会根据自己的生产环境来写特定脚本完成大量重复性工作,这些脚本复杂且难以维护。系统管理员面临的问题主要是1、系统配置管理,2、远程执行命令,因此诞生了很多开源软件,系统维护方面有fabric、puppet、chef、ansible、saltstack等,这些软件擅长维护系统状态或方便的对大量主机进行批量的命令执行。

常用的自动化运维工具有:

  • puppet
  • ansible
  • saltstack

SaltStack灵活性强大,可以进行大规模部署,也能进行小规模的系统部署。salt的设计架构适用于任意数量的服务器,从少量本地网络系统到跨越数个数据中心,拓扑架构都是c/s模型,配置简单。

  不管是几台、几百台、几千台服务器,都可以使用salt在一个中心节点上进行管控,灵活定位任意服务器子集来运行命令。 

  Salt是python编写的,支持用户通过python自定义功能模块,也提供了大量的python API接口,用户可以根据需要进行简单快速的扩展。

SaltStack的特点

  • 基于python开发的C/S架构配置管理工具
  • 底层使用ZeroMQ消息队列pub/sub方式通信
  • 使用SSL证书签发的方式进行认证管理,传输采用AES加密

SaltStack服务架构

在安装salt之前,先理解salt架构中各个角色,主要区分是salt-master和salt-minion,顾名思义master是中心控制系统,minion是被管理的客户端。

salt架构中的一种就是master > minion。

在远程执行系统中,salt用python通过函数调用完成任务。

在Master和Minion端都是以守护进程的模式运行,一直监听配置文件里面定义的ret_port(接受minion请求)和publish_port(发布消息)的端口。

当Minion运行时会自动连接到配置文件里面定义的Master地址ret_port端口进行连接认证。

saltstack除了传统的C/S架构外,其实还有一种叫做masterless的架构,其不需要单独安装一台 master 服务器,只需要在每台机器上安装 Minion端,然后采用本机只负责对本机的配置管理机制服务的模式。

SaltStack主要功能及运行方式

  • SaltStack最主要的功能是:配置管理与远程执行
  • SaltStack还是一个云管理与事件驱动
  • SaltStack已经支持Docker相关模块
  • SaltStack友好地支持各大云平台之后,配合Saltstack的Mine实时发现功能可以实现各种云平台业务的自动扩展

四种运行方式:

  • local本地运行
  • Master/Minion传统方式
  • Syndic分布式
  • Salt ssh

SaltStack组件介绍

组件功能
Salt Master用于将命令和配置发送到在受管系统上运行的Salt minion
Salt Minions从Salt master接收命令和配置
Execution Modules从命令行针对一个或多个受管系统执行的临时命令。对...有用:
1. 实时监控,状态和库存
2. 一次性命令和脚本
3. 部署关键更新
Formulas (States)系统配置的声明性或命令式表示

SaltStack工作原理

  • Stack 采用 C/S模式,server端就是salt的master,client端就是minion,minion与master之间通过ZeroMQ消息队列通信

  • minion上线后先与master端联系,把自己的pub key发过去,这时master端通过salt-key -L命令就会看到minion的key,接受该minion-key后,也就是master与minion已经互信

  • master可以发送任何指令让minion执行了,salt有很多可执行模块,比如说cmd模块,在安装minion的时候已经自带了,它们通常位于你的python库中,locate salt | grep /usr/ 可以看到salt自带的所有东西。

  • 这些模块是python写成的文件,里面会有好多函数,如cmd.run,当我们执行salt '*' cmd.run 'uptime'的时候,master下发任务匹配到的minion上去,minion执行模块函数,并返回结果。master监听4505和4506端口,4505对应的是ZMQ的PUB system,用来发送消息,4506对应的是REP system是来接受消息的。

SaltStack部署

环境说明:

主机类型IP要安装的应用
Master192.168.159.13salt-master
salt-minion
Minion192.168.159.14salt-minion

我们需要从官方网站去下载官方给的yum源:官方yum源地址

部署Master

//关闭防火墙与SELINUX
[root@master ~]# systemctl stop firewalld.service 
[root@master ~]# systemctl disable firewalld.service 
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@master ~]# setenforce 0
[root@master ~]# cat /etc/sysconfig/selinux 
SELINUX=disabled

[root@master ~]# sudo rpm --import https://repo.saltproject.io/py3/redhat/8/x86_64/latest/SALTSTACK-GPG-KEY.pub
[root@master ~]# curl -fsSL https://repo.saltproject.io/py3/redhat/8/x86_64/latest.repo | sudo tee /etc/yum.repos.d/salt.repo
[salt-latest-repo]
name=Salt repo for RHEL/CentOS 8 PY3
baseurl=https://repo.saltproject.io/py3/redhat/8/x86_64/latest
skip_if_unavailable=True
failovermethod=priority
enabled=1
enabled_metadata=1
gpgcheck=1
gpgkey=https://repo.saltproject.io/py3/redhat/8/x86_64/latest/SALTSTACK-GPG-KEY.pub

[root@master ~]# sudo yum clean expire-cache
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
缓存已过期
0 文件已删除

[root@master ~]# sudo yum install salt-master
完毕!

[root@master ~]# sudo yum install salt-minion
完毕!

//修改主控端配置文件 
[root@master ~]# sed -i '/^#master:/a master: 192.168.159.13' /etc/salt/minion
[root@master ~]# sed -n '/^master/p' /etc/salt/minion
master: 192.168.159.13

//启动主控端的salt-master和salt-minion,并设置开机自启
[root@master ~]# sudo systemctl enable salt-master && sudo systemctl start salt-master
Created symlink /etc/systemd/system/multi-user.target.wants/salt-master.service → /usr/lib/systemd/system/salt-master.service.
[root@master ~]# sudo systemctl enable salt-minion && sudo systemctl start salt-minion
Created symlink /etc/systemd/system/multi-user.target.wants/salt-minion.service → /usr/lib/systemd/system/salt-minion.service.

[root@master ~]# ss -anlt
State                     Recv-Q                    Send-Q                                       Local Address:Port                                         Peer Address:Port                    
LISTEN                    0                         128                                                0.0.0.0:22                                                0.0.0.0:*                       
LISTEN                    0                         128                                                0.0.0.0:4505                                              0.0.0.0:*                       
LISTEN                    0                         128                                                0.0.0.0:4506                                              0.0.0.0:*                       
LISTEN                    0                         128                                                   [::]:22                                                   [::]:* 

部署Minion

Minion:

//关闭防火墙与SELINUX
[root@minion ~]# systemctl disable --now firewalld.service 
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@minion ~]# setenforce 0
[root@minion ~]# cat /etc/sysconfig/selinux 
SELINUX=disabled

[root@minion ~]# sudo rpm --import https://repo.saltproject.io/py3/redhat/8/x86_64/latest/SALTSTACK-GPG-KEY.pub
[root@minion ~]# curl -fsSL https://repo.saltproject.io/py3/redhat/8/x86_64/latest.repo | sudo tee /etc/yum.repos.d/salt.repo
[salt-latest-repo]
name=Salt repo for RHEL/CentOS 8 PY3
baseurl=https://repo.saltproject.io/py3/redhat/8/x86_64/latest
skip_if_unavailable=True
failovermethod=priority
enabled=1
enabled_metadata=1
gpgcheck=1
gpgkey=https://repo.saltproject.io/py3/redhat/8/x86_64/latest/SALTSTACK-GPG-KEY.pub



[root@minion ~]# sudo yum clean expire-cache
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
缓存已过期
0 文件已删除
[root@minion ~]# sudo yum install salt-minion
完毕!

//修改被控端的配置文件
[root@minion ~]# sed -i '/^#master:/a master: 192.168.159.13' /etc/salt/minion
[root@minion ~]# sed -n '/^master/p' /etc/salt/minion
master: 192.168.159.13
//启动受控端的salt-minion并设置开机自启
[root@minion ~]# sudo systemctl enable salt-minion && sudo systemctl start salt-minion
Created symlink /etc/systemd/system/multi-user.target.wants/salt-minion.service → /usr/lib/systemd/system/salt-minion.service.

配置完成

saltstack配置

saltstack的配置文件在/etc/salt目录

配置文件说明
/etc/salt/master主控端(控制端)配置文件
/etc/salt/minion受控端配置文件

配置文件/etc/salt/master默认的配置就可以很好的工作,故无需修改此配置文件。

配置文件/etc/salt/minion常用配置参数
master:设置主控端的IP
id:设置受控端本机的唯一标识符,可以是ip也可以是主机名或自取某有意义的单词

Salt配置非常简单。master的默认配置适用 于大多数安装,设置minion的唯一要求是在 minion 配置文件中设置 master 的位置。

配置文件将安装到/etc/salt相应的组件中/etc/salt/master并以 /etc/salt/minion.

Master配置:
默认情况下,Salt master 侦听所有接口 (0.0.0.0) 上的端口 4505 和 4506。要将 Salt 绑定到特定 IP,请在主配置文件中重新定义“接口”指令,通常为 /etc/salt/master,如下所示:

- #interface: 0.0.0.0
+ interface: 10.0.0.1

更新配置文件后,重启 Salt Master

Minion配置:
尽管有很多 Salt Minion 配置选项,但是配置 Salt Minion 非常简单。默认情况下,Salt Minion 会尝试连接到 DNS 名称“salt”;如果 Minion 能够正确解析该名称,则不需要配置。

如果 DNS 名称“salt”未解析为指向 Master 的正确位置,则在 minion 配置文件中重新定义“master”指令,通常/etc/salt/minion如下:

- #master: salt
+ master: 10.0.0.1

在日常使用过程中,经常需要调整或修改Master配置文件,SaltStack大部分配置都已经指定了默认值,只需根据自己的实际需求进行修改即可。下面的几个参数是比较重要的

  • max_open_files:可根据Master将Minion数量进行适当的调整
  • timeout:可根据Master和Minion的网络状况适当调整
  • auto_accept和autosign_file:在大规模部署Minion时可设置自动签证
  • master_tops和所有以external开头的参数:这些参数是SaltStack与外部系统进行整合的相关配置参数

SaltStack认证机制

saltstack主控端是依靠openssl证书来与受控端主机认证通讯的,受控端启动后会发送给主控端一个公钥证书文件,在主控端用salt-key命令来管理证书。

salt-minion与salt-master的认证过程:

  • minion在第一次启动时,会在/etc/salt/pki/minion/下自动生成一对密钥,然后将公钥发给master
  • master收到minion的公钥后,通过salt-key命令接受该公钥。此时master的/etc/salt/pki/master/minions目录将会存放以minion id命名的公钥,然后master就能对minion发送控制指令了
//salt-key常用选项
    -L      //列出所有公钥信息
    -a minion    //接受指定minion等待认证的key
    -A      //接受所有minion等待认证的key
    -r minion    //拒绝指定minion等待认证的key
    -R      //拒绝所有minion等待认证的key
    -f minion   //显示指定key的指纹信息
    -F      //显示所有key的指纹信息
    -d minion   //删除指定minion的key
    -D      //删除所有minion的key
    -y      //自动回答yes

SaltStack远程执行

//测试指定受控端主机是否存活
[root@master ~]# salt "192.168.159.14" test.ping
192.168.159.14:
    True
0

评论区