SaltStack简单介绍及部署

本文介绍了SaltStack服务架构,包括Master和Minion的角色,以及其四大功能:远程执行、配置管理、云管理和事件驱动。详细阐述了SaltStack的运行方式、组件作用,如Execution Modules、Formulas (States)、Grains等。此外,还涵盖了SaltStack的配置文件、认证机制和远程执行操作。在部署方面,提供了在server1和node1上安装与配置的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SaltStack简单介绍及部署

saltstack服务架构

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

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

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

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

SaltStack四大功能与四大运行方式

SaltStack有四大功能,分别是:

远程执行
配置管理/状态管理
云管理(cloud)
事件驱动
SaltStack可以通过远程执行实现批量管理,并且通过描述状态来达到实现某些功能的目的。

SaltStack四大运行方式:

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

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命令。
主机IP地址服务
server1192.168.244.131salt-Master
salt-Minion
node1192.168.244.133salt-Minion

关闭防火墙

[root@server1 ~]# systemctl disable --now  firewalld
[root@server1 ~]# vim  /etc/selinux/config 
SELINUX=disabled
[root@server1 ~]# reboot


[root@node1 ~]# systemctl disable --now  firewalld
[root@node1 ~]# vim  /etc/selinux/config 
SELINUX=disabled
[root@server1 ~]# reboot

在server1上

安装yum源

[root@server1 ~]# rpm --import https://repo.saltproject.io/py3/redhat/8/x86_64/latest/SALTSTACK-GPG-KEY.pub
[root@server1 ~]# 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@server1 ~]# cd  /etc/yum.repos.d/
[root@server1 yum.repos.d]# ls
CentOS-Base.repo  redhat.repo  salt.repo

在server1上安装master、minion

[root@server1 ~]# dnf list all | grep ^salt
Failed to set locale, defaulting to C.UTF-8
salt.noarch                                            3004-1.el8                                        @salt-latest-repo
salt-master.noarch                                     3004-1.el8                                        @salt-latest-repo
salt-minion.noarch                                     3004-1.el8                                        @salt-latest-repo
salt.src                                               3004-1.el8                                        salt-latest-repo 
salt-api.noarch                                        3004-1.el8                                        salt-latest-repo 
salt-cloud.noarch                                      3004-1.el8                                        salt-latest-repo 
salt-ssh.noarch                                        3004-1.el8                                        salt-latest-repo 
salt-syndic.noarch                                     3004-1.el8                                        salt-latest-repo 

[root@server1 ~]# yum -y install  salt*

修改server1上的minion文件

[root@server1 salt]# pwd
/etc/salt
[root@server1 salt]# vim  minion
#master: salt
master: 192.168.244.131   #server1主机ip 

启动服务

[root@server1 ~]# systemctl enable --now salt-master
Created symlink /etc/systemd/system/multi-user.target.wants/salt-master.service → /usr/lib/systemd/system/salt-master.service.
[root@server1 ~]# systemctl enable --now salt-minion
Created symlink /etc/systemd/system/multi-user.target.wants/salt-minion.service → /usr/lib/systemd/system/salt-minion.service.
[root@server1 ~]# ss -antl
State    Recv-Q   Send-Q       Local Address:Port                     Peer Address:Port                 
LISTEN   0        128                0.0.0.0:4506                          0.0.0.0:*                    
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                   [::]:22                               [::]:*     

在node1上

安装yum源

[root@node1 ~]# rpm --import https://repo.saltproject.io/py3/redhat/8/x86_64/latest/SALTSTACK-GPG-KEY.pub
[root@node1 ~]# 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

安装salt-minion

[root@node1 ~]# yum -y install salt-minion

修改minion文件


[root@node1 salt]# pwd
/etc/salt
[root@node1 salt]# vim  minion
#master: salt
master: 192.168.244.131

开启服务

[root@node1 ~]# systemctl enable --now  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目录

saltstack配置文件说明:

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

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

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

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

在日常使用过程中,经常需要调整或修改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

查看当前公钥信息 -L

[root@server1 ~]# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
node1
server1
Rejected Keys:

接受指定minion待认证的key -a

[root@server1 ~]# salt-key -a server1
The key glob 'server1' does not match any unaccepted keys.
[root@server1 ~]# salt-key -L
Accepted Keys:
node1
Denied Keys:
Unaccepted Keys:
Rejected Keys:

接受所有minion等待认证的key -A

[root@server1 ~]# salt-key -A
The key glob '*' does not match any unaccepted keys.
[root@server1 ~]# salt-key -L
Accepted Keys:
node1
server1
Denied Keys:
Unaccepted Keys:
Rejected Keys:

显示指定key的指纹信息 -f

[root@server1 ~]# salt-key -f node1
Accepted Keys:
node1:  db:6b:45:7f:ff:45:09:d9:c7:dd:c4:d2:70:9b:3b:bd:9d:ce:e4:21:f6:ce:29:1f:45:41:fd:66:d5:60:0f:39

显示所有key的指纹信息 -F

[root@server1 ~]# salt-key -F
Local Keys:
master.pem:  a0:c7:40:58:e8:9f:17:c3:55:f3:1e:f6:4c:18:b6:0e:d5:08:4d:1f:ca:38:aa:e4:b1:69:83:54:3b:21:fd:91
master.pub:  53:98:65:04:9d:2a:e2:28:b9:5a:47:8f:b8:7b:e6:0f:39:8b:ee:45:d0:63:ba:05:17:5a:51:eb:1d:3b:e2:fb
Accepted Keys:
node1:  db:6b:45:7f:ff:45:09:d9:c7:dd:c4:d2:70:9b:3b:bd:9d:ce:e4:21:f6:ce:29:1f:45:41:fd:66:d5:60:0f:39
server1:  76:ab:0b:90:7b:80:44:7b:e6:d8:d1:aa:19:20:87:45:96:1e:65:e7:cc:00:44:7e:cf:63:c3:30:31:26:8a:7e

拒绝key

[root@server1 ~]# tree  /etc/salt/pki/master/
/etc/salt/pki/master/
|-- master.pem
|-- master.pub
|-- minions
|   |-- node1
|   `-- server1
|-- minions_autosign
|-- minions_denied
|-- minions_pre
`-- minions_rejected
[root@server1 ~]# mv /etc/salt/pki/master/minions/node1  /etc/salt/pki/master/minions_rejected
[root@server1 ~]# salt-key -L
Accepted Keys:
server1
Denied Keys:
Unaccepted Keys:
Rejected Keys:
node1

允许key

[root@server1 ~]# mv /etc/salt/pki/master/minions_rejected/node1 /etc/salt/pki/master/minions/node1 
[root@server1 ~]# salt-key -LAccepted Keys:
node1
server1
Denied Keys:
Unaccepted Keys:
Rejected Keys:

SaltStack远程执行

测试指定受控端node1是否存活

[root@server1 ~]# salt node1 test.ping
node1:
    True

测试所有受控端主机是否存活

[root@server1 ~]# salt '*' test.ping
node1:
    True
server1:
    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值匹配

–version //查看saltstack的版本号

[root@server1 ~]# salt --version
salt 3004

–versions-report //查看saltstack以及依赖包的版本号

[root@server1 ~]# salt --versions-report
Salt Version:
          Salt: 3004
 
Dependency Versions:
          cffi: 1.11.5
      cherrypy: unknown
      dateutil: 2.6.1
     docker-py: Not Installed
         gitdb: Not Installed
     gitpython: Not Installed
        Jinja2: 2.10.1
       libgit2: Not Installed
      M2Crypto: 0.35.2
          Mako: Not Installed
       msgpack: 0.6.2
  msgpack-pure: Not Installed
  mysql-python: Not Installed
     pycparser: 2.14
      pycrypto: Not Installed
  pycryptodome: Not Installed
        pygit2: Not Installed
        Python: 3.6.8 (default, Dec  5 2019, 15:45:45)
  python-gnupg: Not Installed
        PyYAML: 3.12
         PyZMQ: 19.0.0
         smmap: Not Installed
       timelib: Not Installed
       Tornado: 4.5.3
           ZMQ: 4.3.4
 
System Versions:
          dist: rhel 8.2 Ootpa
        locale: UTF-8
       machine: x86_64
       release: 4.18.0-193.el8.x86_64
        system: Linux
       version: Red Hat Enterprise Linux 8.2 Ootpa

-h 查看帮助文档

[root@server1 ~]# salt -h
Usage: salt [options] '<target>' <function> [arguments]

Salt allows for commands to be executed across a swath of remote systems in
parallel, so they can be both controlled and queried with ease.

Options:
  --version             show program's version number and exit
  -V, --versions-report
                        Show program's dependencies version number and exit.
  -h, --help            show this help message and exit
........

常用参数

[root@server1 ~]# salt -E 'no*' test.ping
node1:
    True
    
[root@server1 ~]# salt -L server1,node1 test.ping
node1:
    True
server1:
    True

[root@server1 ~]# salt -S '192.168.244.0/24' test.ping
node1:
    True
server1:
    True

[root@server1 ~]#  salt -G 'os:redhat' test.ping
server1:
    True
node1:
    True

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值