SaltStack安装与介绍

文章目录

  • 1. 概述
  • 2. ZeroMQ介绍
  • 3. SaltStack服务架构
  • 4. SaltStack的功能和运行方式
  • 5. SaltStack组件介绍
  • 6. SaltStack安装与最小化配置
  • 7. SaltStack配置文件
  • 8. SaltStack认证机制
  • 9. salt命令用法


1. 概述


什么是saltstack?

  • saltstack是基于python开发的一套C/S自动化运维工具,通信采用了zeromq消息队列的(pub/sub),数据传输采用了AES(高级加密)保证安全性,认证采用了SSL方式。

自动化工具有哪些?

作为一个运维人员,很大一部分工作是在业务的配置管理和状态维护以及版本发布上,而当业务场景及公司规模上了一定规模后,人为手工的去做这些工作将变得极其困难,此时我们将需要利用一些自动化运维的工具来达到批量管理的目的。

常见的自动化运维工具:

  • puppet
  • ansible
  • saltstack

对比图:
SaltStack安装与介绍_第1张图片

2. ZeroMQ介绍


前面说到了saltstack通信采用了zeromq消息队列的(pub/sub),下面就来介绍一下zeromq。

ZeroMQ是由一套组件组成,内封装的有网络通信,消息队列,线程调度等功能并向上层提供了简洁的API接口,应用程序通过加载库文件,调用API函数来实现高性能网络通信。

ZeroMQ将网络通信分成4种模型:

  • 一对一结对模型(Exclusive-Pair)
  • 请求回应模型(Request-Reply)
  • 发布订阅模型(Publish-Subscribe)
  • 推拉模型(Push-Pull)

saltstack-master与minion通信就采用了zeromq的请求回应模型(request-reply)和发布订阅模型(publish-subscribe)

2.1 请求回应模型

由请求端发起请求,然后等待回应端应答。一个请求必须对应一个回应,从请求端的角度来看是发-收配对,从回应端的角度是收-发对。跟一对一结对模型的区别在于请求端可以是1~N个。该模型主要用于远程调用及任务分配等。Echo服务就是这种经典模型的应用。
SaltStack安装与介绍_第2张图片

2.2 发布订阅模型

发布端单向分发数据,且不关心是否把全部信息发送给订阅端。如果发布端开始发布信息时,订阅端尚未连接上来,则这些信息会被直接丢弃。订阅端未连接导致信息丢失的问题,可以通过与请求回应模型组合来解决。订阅端只负责接收,而不能反馈,且在订阅端消费速度慢于发布端的情况下,会在订阅端堆积数据。该模型主要用于数据分发。天气预报、微博明星粉丝可以应用这种经典模型。
SaltStack安装与介绍_第3张图片
salt-master启动时会运行两个端口4505和4506:

  • 4505:他是salt的消息发布,系统底层基于zeromq pub(发布订阅),可以在master的配置文件中publish_port修改参数。

  • 作用:负责下发命令,并且所有的minion都会连接到4505这个端口,可通过lsof -i:4505命令查看,注:可在minion的配置文件修改master参数指定主master。

  • 4506:他是salt消息收集,系统底层基于zeromq REQ/REP(请求回应模型),在master配置文件中ret_port修改参数。

  • 作用:负责接收客户端发送过来的结果。


3. SaltStack服务架构


SaltStack安装与介绍_第4张图片

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

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

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

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


4. SaltStack的功能和运行方式


SaltStack的四大功能:

  • 远程执行
  • 配置管理/状态管理
  • 云管理(cloud)
  • 事件驱动

SaltStack可以通过远程执行实现批量管理,并且通过描述状态来达到实现某些功能的目的。

SaltStack四大运行方式:

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

5. SaltStack组件介绍


组件 功能
Salt Master 用于将命令和配置发送到在受管系统上运行的Salt minion
Salt Minions 从Salt master接收命令和配置
Execution Modules 从命令行针对一个或多个受管系统执行的临时命令。对…有用:
1. 实时监控,状态和库存
2. 一次性命令和脚本
3. 部署关键更新
Formulas (States) 系统配置的声明性或命令式表示
Grains Grains是有关底层受管系统的静态信息,包括操作系统,内存和许多其他系统属性。
Pillar 用户定义的变量。这些安全变量被定义并存储在Salt Master中,然后使用目标“分配”给
一个或多个Minion。Pillar数据存储诸如端口,文件路径,配置参数和密码之类的值。
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命令。

6. SaltStack安装与最小化配置


环境:

类型 主机名 IP 应用
控制机 master 172.16.78.125 salt
salt-cloud
salt-master
salt-minion
salt-ssh
salt-syndic
被控制机 minion 172.16.78.128 salt-minoin

附:SaltStack官网下载地址

1. 在master上安装saltstack主控端软件

//安装SaltStack下载源
[root@master ~]# yum -y install https://repo.saltstack.com/yum/redhat/salt-repo-3000.el7.noarch.rpm
[root@master ~]# yum clean all
[root@master ~]# yum -y install salt salt-cloud salt-master salt-minion salt-ssh salt-syndic

2. 在master上修改配置文件,并启动服务

[root@master ~]# sed -i '/^#master:/a master: 172.16.78.125' /etc/salt/minion
[root@master ~]# systemctl enable --now salt-master salt-minion
[root@master ~]# ss -antl |grep 450*
LISTEN     0      128          *:4505                     *:*                  
LISTEN     0      128          *:4506                     *:*

3. 在minion上安装salt-minion客户端

[root@minion ~]# yum -y install https://repo.saltstack.com/yum/redhat/salt-repo-3000.el7.noarch.rpm
[root@minion ~]# yum clean all
[root@minion ~]# yum -y install salt-minion

4. 修改minion的配置文件,将master设为主控端的IP

[root@minion ~]# sed -i '/^#master:/a master: 172.16.78.125' /etc/salt/minion

//启动服务
[root@minion ~]# systemctl enable --now salt-minion

5. 在master上接受指定minion的新证书

//查看当前证书情况
[root@master ~]# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
master
minion
Rejected Keys:

//接受指定minion的新证书
[root@master ~]# salt-key -ya minion
The following keys are going to be accepted:
Unaccepted Keys:
minion
Key for minion minion accepted.

//再次查看证书情况
[root@master ~]# salt-key -L
Accepted Keys:
minion
Denied Keys:
Unaccepted Keys:
master
Rejected Keys:

//接受所有minion的新证书
[root@master ~]# salt-key -yA
The following keys are going to be accepted:
Unaccepted Keys:
master
Key for minion master accepted.
[root@master ~]# salt-key -L 
Accepted Keys:
master
minion
Denied Keys:
Unaccepted Keys:
Rejected Keys:

6. 在master上测试

//测试指定主机是否存活
[root@master ~]# salt 'minion' test.ping
minion:
    True

//指定主机执行ls命令
[root@master ~]# salt 'minion' cmd.run 'ls'
minion:
    anaconda-ks.cfg
    original-ks.cfg

//测试所有主机是否存活
[root@master ~]# salt '*' test.ping
minion:
    True
master:
    True

7. SaltStack配置文件


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

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

配置文件/etc/salt/master常用配置参数:

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

配置文件/etc/salt/minion常用配置参数:

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

8. SaltStack认证机制


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

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

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

1.minion端生成一个秘钥对,并产生一个ID值,minion服务会安装ID值命名的公钥发送给 master ,直到接受为止;

2.master认证完毕后,会将minion 端发送来的,以ID值命名的公钥存放在 /etc/salt/pki/master/minions 目录中(无扩展名);

3.master认证完毕后,会将自身的公钥发送给 minion,并存储为 /etc/salt/pki/minion/minion_master.pub.

4.然后master就能对minion发送控制指令了

9. salt命令用法


语法:salt [options] '' [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值匹配

你可能感兴趣的:(SaltStack)