Salt是一个基础平台管理工具。SaltStack 采用 C/S模式,server端就是salt的master,client端就是minion,minion与master之间通过ZeroMQ消息队列通信。master监听4505和4506端口,4505为master和minion认证通信端口,4506为master用来发送命令或者接收minion的命令执行返回信息。

官网docs.saltstack.com


SaltStack常用模块

pkg模块是包管理,包括增删更新。
file模块管理文件操作,包括同步文件、设置文件权限和所属用户组、删除文件等操作。
cmd模块是在Minion上执行命令或者脚本。
user模块管理系统账户操作。
service模块管理系统服务操作
cron模块管理cron服务操作


Saltstack工作机制

• MasterMinion都以守护进程的方式运行

 

• Master监听配置文件里定义的ret_port(接收minion请求),publish_port(发布消息)的端口

 

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

 

MasterMinion可以正常通信后,就可以进行各种各样的配置管理工作了




操作篇

操作环境:

192.168.80.181Master

salt-master salt-minion

192.168.80.182Minion salt-minion
192.168.80.183Minion salt-minion

注:三台都是NAT模式

----


1 修改主机名

hostnamectl set-hostname  master.saltstack.com  

hostnamectl set-hostname  web01.saltstack.com

hostnamectl set-hostname  web02.saltstack.com

init 6 重启生效

修改/etc/hosts文件(3台都做)

192.168.80.181 master.saltstack.com

192.168.80.182 web01.saltstack.com

192.168.80.183 web02.saltstack.com


3  安装

systemctl stop firewalld && setenforce 0

yum install -y epel-release 

服务器:

      yum -y install salt-master salt-minion

客户端:

      yum -y install salt-minion

服务端和客户端配置

vi /etc/salt/minion


修改配置如下

16 master: 192.168.80.181     //指定主控端IP

78 id: web01.saltstack.com     //指定被控端主机名

改成相应的主机名


5 启动被控端服务

systemctl start salt-minion

systemctl start salt-master


6 认证

salt-key -L  查看待认证的服务器

Accepted Keys:认证通过

Denied Keys:旧的的认证

Unaccepted Keys:等待认证

Rejected Keys:拒绝认证




手动添加认证

认证的方式是salt-key -a 客户端id

salt-key -a  web01

salt-key -a  web02

salt-key -a  master

说明:-a :accept ,-A:accept-all,-d:delete,-D:delete-all。可以使用 salt-key 命令查看到已经签名的客户端此时我们在客户端的 /etc/salt/pki/minion 目录下面会多出一个minion_master.pub 文件


salt-key  -L


7 在主控端测试与被控端的通信状态

salt '*' test.ping

salt '*' cmd.run 'df -h'   //远程执行命令

salt-key   //查看在 master 上已经被接受过的客户端





Saltstack几个重要的组件

grains

grains 是在 minion(客户端启动时收集到的一些信息比如操作系统类型网卡ip等静态信息

grains的信息并不是动态的并不会时时变更它只是在 minion 启动时收集到的

 

pillar

pillar  grains 不一样是在 master 上定义的并且是针对 minion 定义的一些信息像一些比较重要的数据密码可以存在 pillar 还可以定义变量等

 

State

他是saltstack的最核心功能通过预先指定好的sls文件对被控主机进行管理/文件/网络配置/系统服务/系统用户等



master服务器

vi /etc/salt/master 

file_roots:                    //416

 

   base:

 

      - /srv/salt           //saltstack文件根目录位置目录需要创建

 

nodegroups:                //710行组分类

 

  group1: 'web01.saltstack.com'

 

  group2: 'web02.saltstack.com'  

 

pillar_opts: True          //552,开启pillar功能

 

pillar_roots:              //529

 

       base:

 

       - /srv/pillar       //pillar的主目录需要创建


cat /etc/salt/master | grep -v ^$ | grep -v ^#      //查看对主配置文件做的更改



systemctl restart salt-master

netstat -anpt | egrep '4505|4506'


查看被控主机上grains所有值:(每次minion在启动是都会获取客户端信息

salt 'master' grains.ls      // 列出所有的 grains 项目名字

salt 'web01.saltstack.com' grains.items (静态数据

salt 'web01.saltstack.com' pillar.items  (动态数据






配置管理安装Apache

下面进行的演示是远程通过 yum 方式安装 Apache。步骤如下:

修改配置文件

注意:环境: base、dev(开发环境)、test(测试环境)、prod(生产环境)。


vi /srv/salt/top.sls


 base:
 
  '*':
     - apache


vi /srv/salt/apache.sls

apache-service:
  pkg.installed:
    - names:
      - httpd
      - httpd-devel
  service.running:
    - name: httpd
    - enable: True


注意:apache-service 是自定义的 id 。pkg.installed 为包安装函数下面是要安装的包的名字。service.running 也是一个函数来保证指定的服务启动,enable 表示开机启动


重启服务

systemctl restart salt-master

执行命令

salt 'web01.saltstack.com' state.highstate  

image.png

image.png

 

并且被控端已经运行了httpd服务

image.png