SaltStack入门

saltstack介绍

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

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

自动化运维工具

常用的自动化运维工具有

  1. puppet
  2. ansible
  3. saltstack
    此三款属同类工具,皆可用来提高运维管理的效率,但它们又各有优势,目前主流的自动化运维工具是ansible和saltstack。其中ansible无需安装客户端,这是其最大的优势,而saltstack则需要安装客户端工具,类似zabbix的agent。应用场景方面,ansible常用于小型企业,而saltstack则常用于中大型企业,因为ansible无法并行执行而saltstack可以并行。但不论其特点如何,本质上均属同类,所以只需要掌握一种即可轻松胜任运维工作。

saltstack的特点

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

saltstack服务架构

在saltstack架构中服务器端叫Master,客户端叫Minion。

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

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

saltstack除了传统的C/S架构外,其实还有一种叫做masterless的架构,其不需要单独安装一台 master 服务器,只需要在每台机器上安装 Minion端,然后采用本机只负责对本机的配置管理机制服务的模式。
SaltStack有四大功能,分别是
远程执行
配置管理/状态管理
云管理(cloud)
事件驱动
SaltStack可以通过远程执行实现批量管理,并且通过描述状态来达到实现某些功能的目的。
SaltStack四大运行方式
local本地运行
Master/Minion传统方式
Syndic分布式
Salt ssh
SaltStack组件介绍

组件功能
Salt Master用于将命令和配置发送到在受管系统上运行的Salt minion
Salt Minions从Salt master接收命令和配置
Execution Modules从命令行针对一个或多个受管系统执行的临时命令。
Formulas (States)系统配置的声明性或命令式表示
GrainsGrains是有关底层受管系统的静态信息,包括操作系统,内存和许多其他系统属性。
Pillar用户定义的变量。这些安全变量被定义并存储在Salt Master中,然后使用目标“分配”给一个或多个Minion。
Top File将Formulas (States)和Salt Pillar数据与Salt minions匹配。
Runners在Salt master上执行的模块,用于执行支持任务。Salt runners报告作业状态,连接状态,从外部API读取数据,查询连接的Salt minions等。
Returners将Salt minions返回的数据发送到另一个系统,例如数据库。Salt Returners可以在Salt minion或Salt master上运行。
Reactor在SaltStack环境中发生事件时触发反应。
Salt Cloud / Salt Virt在云提供商/虚拟机管理程序上提供系统,并立即将其置于管理之下。
Salt SSH在没有Salt minion的系统上通过SSH运行Salt命令。

SaltStack安装与最小化配置

环境说明

主机类型IP要安装的应用
控制机192.168.175.150salt、salt-cloud、salt-master、salt-minion、salt-ssh、salt-syndic
被控机192.168.175.151salt-minion

官方yum源地址:https://repo.saltstack.com
在控制机上安装saltstack主控端软件

配置yum源
[root@node01 ~]# wget https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
--2020-08-15 14:10:28--  https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
正在解析主机 repo.saltstack.com (repo.saltstack.com)... 13.225.146.26, 13.225.146.60, 13.225.146.126, ...
正在连接 repo.saltstack.com (repo.saltstack.com)|13.225.146.26|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:5748 (5.6K) [application/octet-stream]
正在保存至: “salt-repo-latest-2.el7.noarch.rpm”

100%[============================================>] 5,748       --.-K/s 用时 0s      

2020-08-15 14:10:30 (238 MB/s) - 已保存 “salt-repo-latest-2.el7.noarch.rpm” [5748/5748])

[root@node01 ~]# ls
anaconda-ks.cfg  salt-repo-latest-2.el7.noarch.rpm
本地安装
[root@node01 ~]# yum -y localinstall salt-repo-latest-2.el7.noarch.rpm 

安装需要的包
[root@node01 ~]# yum -y install salt salt-master salt-minion salt-ssh salt-syndic

修改配置文件
[root@node01 ~]# cd /etc/salt/
[root@node01 salt]# ls
cloud         cloud.deploy.d  cloud.profiles.d   master    minion    pki    proxy.d
cloud.conf.d  cloud.maps.d    cloud.providers.d  master.d  minion.d  proxy  roster
[root@node01 salt]# vim minion

修改master为master的IP
master: 192.168.175.150

设置开机自启
[root@node01 salt]# systemctl enable --now salt-master salt-minion
Created symlink from /etc/systemd/system/multi-user.target.wants/salt-master.service to /usr/lib/systemd/system/salt-master.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/salt-minion.service to /usr/lib/systemd/system/salt-minion.service.
[root@node01 salt]# ss -antl
State      Recv-Q Send-Q Local Address:Port               Peer Address:Port              
LISTEN     0      128             *:22                          *:*                  
LISTEN     0      128             *:4505                        *:*                  
LISTEN     0      100     127.0.0.1:25                          *:*                  
LISTEN     0      128             *:4506                        *:*                  
LISTEN     0      128            :::22                         :::*                  
LISTEN     0      100           ::1:25                         :::*                

查看配置文件可以看到4505是发布的而4506是接收的
[root@node01 ~]# vim /etc/salt/master
#ret_port: 4506
#publish_port: 4505

在被控机上安装salt-minion客户端

被控机安装saltstack
[root@node02 ~]# ls
anaconda-ks.cfg  salt-repo-latest-2.el7.noarch.rpm
本地安装
[root@node02 ~]# yum -y localinstall salt-repo-latest-2.el7.noarch.rpm 

安装需要的包
[root@node02 ~]# yum -y install salt-minion

查看
[root@node02 ~]# cd /etc/salt/
[root@node02 salt]# ls
cloud         cloud.deploy.d  cloud.profiles.d   master    minion    pki    proxy.d
cloud.conf.d  cloud.maps.d    cloud.providers.d  master.d  minion.d  proxy  roster

修改配置文件,把master改为master的IP
[root@node02 ~]# cd /etc/salt/
[root@node02 salt]# ls
cloud         cloud.deploy.d  cloud.profiles.d   master    minion    pki    proxy.d
cloud.conf.d  cloud.maps.d    cloud.providers.d  master.d  minion.d  proxy  roster
[root@node02 salt]# vim minion
master: 192.168.175.150

重启服务
[root@node02 salt]# systemctl enable --now salt-minion
Created symlink from /etc/systemd/system/multi-user.target.wants/salt-minion.service to /usr/lib/systemd/system/salt-minion.service.
[root@node02 salt]# ss -antl
State      Recv-Q Send-Q Local Address:Port               Peer Address:Port              
LISTEN     0      50              *:3306                        *:*                  
LISTEN     0      128             *:22                          *:*                  
LISTEN     0      100     127.0.0.1:25                          *:*                  
LISTEN     0      128            :::22                         :::*                  
LISTEN     0      100           ::1:25                         :::*                
因为是客户端所以没有端口号

saltstack配置文件

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

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

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

  1. master:设置主控端的IP
  2. id:设置受控端本机的唯一标识符,可以是ip也可以是主机名或自取某有意义的单词

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

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

SaltStack认证机制

salt-minion与salt-master的认证过程
1.minion在第一次启动时,会在/etc/salt/pki/minion/下自动生成一对密钥,然后将公钥发给master
2.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
应用
查看当前证书情况
[root@node01 ~]# salt-key -L    
Accepted Keys:
Denied Keys:
Unaccepted Keys:
node01
node02
Rejected Keys:

用a参数设置接收公钥
先查看原信息
[root@node01 salt]# cd pki/
[root@node01 pki]# ls
master  minion
[root@node01 pki]# tree
.
├── master
│   ├── master.pem
│   ├── master.pub
│   ├── minions
│   ├── minions_autosign
│   ├── minions_denied
│   ├── minions_pre
│   │   ├── node01      //此时公钥在这边
│   │   └── node02      //此时公钥在这边
│   └── minions_rejected
└── minion
    ├── minion.pem
    └── minion.pub

7 directories, 6 files

接受指定minion的新证书
[root@node01 ~]# salt-key -a node02   
The following keys are going to be accepted:
Unaccepted Keys:
node02
Proceed? [n/Y] Y
Key for minion node02 accepted.
查看
[root@node01 pki]# tree
.
├── master
│   ├── master.pem
│   ├── master.pub
│   ├── minions
│   │   └── node02     //位置发生了变化
│   ├── minions_autosign
│   ├── minions_denied
│   ├── minions_pre
│   │   └── node01
│   └── minions_rejected
└── minion
    ├── minion.pem
    └── minion.pub

7 directories, 6 files

使用yA接收所有minion的新证书且自动回答yes
[root@node01 ~]# salt-key -yA 
The following keys are going to be accepted:
Unaccepted Keys:
node01
Key for minion node01 accepted.
[root@node01 pki]# tree
.
├── master
│   ├── master.pem
│   ├── master.pub
│   ├── minions
│   │   ├── node01    //接收成功
│   │   └── node02
│   ├── minions_autosign
│   ├── minions_denied
│   ├── minions_pre
│   └── minions_rejected
└── minion
    ├── minion_master.pub
    ├── minion.pem
    └── minion.pub

7 directories, 7 files

node02的公钥接受了之后就有了master的公钥
[root@node02 ~]# cd /etc/salt/pki/minion/
[root@node02 minion]# ls
minion_master.pub  minion.pem  minion.pub

SaltStack远程执行

查看node02能不能ping通,看到True即代表成功,如果ping不通,后面就不能进行
[root@node01 ~]# salt 'node02' test.ping
node02:
    True

查看多台是否能成功ping通
[root@node01 ~]# salt '*' test.ping    //*外面的引号既可以用双引号也可以用单引号
node01:
    True
node02:
    True

salt命令使用

//语法:salt [options] '<target>' <function> [arguments]

//常用的options
    --version       //查看saltstack的版本号
    --versions-report   //查看saltstack以及依赖包的版本号
    -h      //查看帮助信息
    -c CONFIG_DIR   //指定配置文件目录(默认为/etc/salt/)
    -t TIMEOUT      //指定超时时间(默认是5s)
    --async     //异步执行
    -v      //verbose模式,详细显示执行过程
    --username=USERNAME     //指定外部认证用户名
    --password=PASSWORD     //指定外部认证密码
    --log-file=LOG_FILE     //指定日志记录文件
    
//常用target参数
    -E      //正则匹配
    -L      //列表匹配 
    -S      //CIDR匹配网段
    -G      //grains匹配
    --grain-pcre    //grains加正则匹配
    -N      //组匹配
    -R      //范围匹配
    -C      //综合匹配(指定多个匹配)
    -I      //pillar值匹配

应用
使用-E参数正则表达式主机名去匹配
[root@node01 ~]# salt -E 'node*' test.ping
node02:
    True
node01:
    True

使用-S参数IP去匹配
[root@node01 ~]# salt -S '192.168.175.151' test.ping
node02:
    True

使用-L参数多个主机名去匹配
[root@node01 ~]# salt -L node01,node02 test.ping
node01:
    True
node02:
    True

使用网段去匹配
[root@node01 ~]# salt -S '192.168.175.0/24' test.ping
node01:
    True
node02:
    True

万能模块应用

在tmp下创建abc(是一个万能模块)
[root@node01 ~]# salt '*' cmd.run 'touch /tmp/abc'
node02:
node01:
两台虚拟机查看是否创建成功
[root@node01 ~]# ls /tmp/
abc  systemd-private-a446919781734e1ca9ed1d8b9d0545f1-vmtoolsd.service-NLGv2a
[root@node02 ~]# ls /tmp/
abc
systemd-private-4c82dc38245a431b9411111fb0867ef7-mariadb.service-0XX9et
systemd-private-4c82dc38245a431b9411111fb0867ef7-vmtoolsd.service-ZGAA0m
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下 4载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值