SaltStack简单安装

SaltStack简单安装

常用的自动化管理工具

  • Puppet

Puppet是早期的Linux自动化运维工具,是一种LINUX、WINDOWS、UNIX平台的集中配置管理系统,到现在已经非常成熟,可以批量管理远程服务器,模块丰富,配置复杂,基于Ruby语言编写。是最典型的C/S结构,需要安装服务端和客户端 。
Puppet采用C/S星状的结构,所有的客户端和一个或者多个服务器交互,每个客户端周期地(默认半个小时)向服务器发送请求,获得最新的配置信息,保证和配置信息同步。

每个Puppet客户端周期地连接一次服务器,下载最新的配置文件,并且严格按照配置文件来配置客户端。配置完成后,Puppet客户端可以反馈给服务器端一个消息,如果出错也会给服务器端反馈一个消息

Puppet适用于服务器管理的整个过程,比如初始安装、配置、更新等

  • SaltStack
    SaltStack和Puppet一样,也是C/S模式,需要安装服务端和客户端,基于Python编写,加入了MQ消息同步,可以使执行命令和执行结果高效返回,但其执行过程需要等待客户端全部返回,如果客户端没有及时返回或者没有响应的话,可能会导致部分机器没有执行结果。

  • Ansible
    Ansible和SaltStack一样是基于Python开发,Ansible只需要在一台普通的服务器上运行即可,不需要在客户端服务器上安装客户端。因为Ansible基于SSH远程管理,而Linux服务器大部分都离不开SSH,所以Ansible不需要为配置添加额外的支持。

Ansible安装使用都很简单,而且基于上千个插件和模块,实现各种软件、平台、版本的管理,支持虚拟容器多层级的部署。

有时候会觉得Ansible比SaltStack执行效率慢,其实并不是软件本身的问题,二是由于SSH服务慢,可以通过优化SSH连接速度和使用Ansible加速模块提高效率.

  • 技术特点对比

在这里插入图片描述

  • 优缺点
    1、puppet优缺点
    在这里插入图片描述
    2、saltstack优缺点:

在这里插入图片描述
3、ansible优缺点:
在这里插入图片描述

saltstackt配置文件

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工作机制

  1. 命令通过发布者(publisher)端口,分发至所有已连接的 Salt minion;

  2. 每个 Salt minion 都需要检查命令,评估是否应该在节点上运行命令;

  3. 目标系统将会运行命令,并将结果返回至请求服务器。 当 Salt minion 接收到命令时,其执行过程如下:

            1.每条命令都将被分拆为一个独立的工作进程,从而 Salt minion 才能在同一时刻处理多项作业。
            2.针对 Salt 命令(结构如下图),找到正确的 module,随后以提供的 arguments 作为参数,调用 function。注意:Salt 实际上可以看做是 Python 函数的抽象层
    

在这里插入图片描述

SaltStack安装

环境

主机类型主机名ip安装
主控制机master192.168.147.33salt-master salt-minion
被控机node1192.168.147.55salt-minion
//关闭防火墙
[root@master ~]# systemctl stop firewalld
[root@master ~]# setenforce 0
[root@node1 ~]# systemctl stop firewalld
[root@node1 ~]# setenforce 0


//在主控端安装saltstack存储库和密钥
[root@master ~]# 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 | 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

//安装saltstack主控端
[root@master ~]# yum -y install salt-master salt-minion

//修改主控端的配置文件
[root@master ~]# cd /etc/salt
[root@master 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@master salt]# vim minion

#master: salt
master: 192.168.147.33  //添加这一行

//启动主控制端的salt-master和salt-minion,并设置开机自启
[root@master ~]# systemctl start salt-master
[root@master ~]# systemctl start salt-minion

[root@master ~]# systemctl enable salt-minion
Created symlink /etc/systemd/system/multi-user.target.wants/salt-minion.service → /usr/lib/systemd/system/salt-minion.service.
[root@master ~]# systemctl enable salt-master
Created symlink /etc/systemd/system/multi-user.target.wants/salt-master.service → /usr/lib/systemd/system/salt-master.service.


[root@master ~]# ss -antl
State      Recv-Q     Send-Q         Local Address:Port         Peer Address:Port     Process     
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                   [::]:*                  

//在被控端安装saltstack存储库和密钥
[root@node1 ~]# rpm --import https://repo.saltproject.io/py3/redhat/8/x86_64/latest/SALTSTACK-GPG-KEY.pub

[root@node1 ~]# 
[root@node1 ~]# curl -fsSL https://repo.saltproject.io/py3/redhat/8/x86_64/latest.repo | 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

//修改被控制端的配置文件
[root@node1 ~]# cd /etc/salt
[root@node1 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@node1 salt]# vim minion

#master: salt
master: 192.168.147.33   //将master设为主控制端的ip

//开启被控制端的salt-minion并设置开机自启
[root@node1 ~]# systemctl start salt-minion
[root@node1 ~]# systemctl enable salt-minion
Created symlink /etc/systemd/system/multi-user.target.wants/salt-minion.service → /usr/lib/systemd/system/salt-minion.service.

SaltStack工作机制

saltsatck主控端是依靠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


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

//接受指定minion的新证书
[root@master ~]# salt-key -ya node1
The following keys are going to be accepted:
Unaccepted Keys:
node1
Key for minion node1 accepted.
[root@master ~]# salt-key -L
Accepted Keys:
node1
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
node1
Denied Keys:
Unaccepted Keys:
Rejected Keys:

//查看指定key的指纹信息
[root@master ~]# salt-key -f node1
Accepted Keys:
node1:  22:b2:d1:88:8f:bb:c8:ca:9c:bf:f1:d1:9a:48:d1:26:ba:0d:0b:94:21:53:8b:a1:ad:d4:2a:c7:e2:1f:34:53

//查看所有key的指纹信息
[root@master ~]# salt-key -F
Local Keys:
master.pem:  ed:c6:9b:17:43:ef:4d:33:67:32:23:84:bc:41:60:0b:69:55:61:03:2b:d3:4c:8a:00:1f:5f:fa:f7:ea:4d:97
master.pub:  36:1e:ee:05:6f:31:23:a8:b3:14:a7:19:9b:21:84:6b:7f:f8:88:da:d5:d1:f0:b7:2e:75:14:d3:d6:95:ae:7d
Accepted Keys:
master:  be:b7:6b:3b:b1:c1:1d:3d:5f:30:91:fa:62:89:3d:f4:d5:ba:ca:be:b4:f8:e3:f7:d9:f9:e7:21:8a:a8:f9:ea
node1:  22:b2:d1:88:8f:bb:c8:ca:9c:bf:f1:d1:9a:48:d1:26:ba:0d:0b:94:21:53:8b:a1:ad:d4:2a:c7:e2:1f:34:53

//拒绝指定minion等待认证的key
[root@master ~]# salt-key -yr master
The following keys are going to be rejected:
Unaccepted Keys:
master
Key for minion master rejected.
[root@master ~]# salt-key -L
Accepted Keys:
node1
Denied Keys:
Unaccepted Keys:
Rejected Keys:
master

//删除指定minion的key
[root@master ~]# salt-key -yd master
The following keys are going to be deleted:
Rejected Keys:
master
Key for minion master deleted.
[root@master ~]# salt-key -L
Accepted Keys:
node1
Denied Keys:
Unaccepted Keys:
Rejected Keys:

saltstack远程执行

//测试指定受控端主机是否存活
root@master ~]# salt "node1" test.ping
node1:
    True
[root@master ~]# salt "node1" cmd.run hostname
node1:
    node1.example.com

//测试所有受控端主机是否存活
[root@master ~]# salt '*' test.ping
node1:
    True
master:
    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值匹配

[root@master ~]# salt '*' test.ping
node1:
    True
master:
    True
[root@master ~]# salt -E 'node*' test.ping
node1:
    True
[root@master ~]# salt -L node1,master test.ping
node1:
    True
master:
    True
[root@master ~]# salt -S '192.168.147.0/24' test.ping
node1:
    True
master:
    True

版权声明:本文为itxiaoyu_lang原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。