千家信息网

Saltstack(自动化运维环境部署)

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,Saltstack介绍Saltstack是一个新的基础设施管理工具。目前处于快速发展阶段,可以看做是强化的Func+弱化的Puppet的组合。间接的反映出了saltstack的两大功能:远程执行和配置
千家信息网最后更新 2026年11月01日Saltstack(自动化运维环境部署)

Saltstack介绍

Saltstack是一个新的基础设施管理工具。目前处于快速发展阶段,可以看做是强化的Func+弱化的Puppet的组合。间接的反映出了saltstack的两大功能:远程执行和配置管理。

Saltstack使用Python开发的,非常简单易用和轻量级的管理工具。由Master和Minion构成,通过ZeroMQ进行通信。


实验环境:(需要虚拟机上网,yum源使用163网易云镜像CentOS6-Base-163.repo)


三台虚拟机(一台master、两台minion)

master:

yum install -y epel-release(salt源)

yum install salt-master -y

minion(两台):

yum install -y epel-release

yum install salt-minion -y


启动服务:

服务端启动方式:service salt-master start

客户端启动方式:service salt-minion start

日志查看路径:(有问题可查日志获取出错信息)

服务端:/var/log/salt/master

客户端:/var/log/salt/minion


服务端master配置

在以下配置中,需要注意的是,每个参数冒号后面都要带一个空格

如:

interface: 192.168.253.100

默认情况下,salt master在所有接口(0.0.0.0)上监听4505和4506两个端口. 如果想bind某个具体的IP,需要对/etc/salt/master配置文件中"interface"选项做如下修改:

interface: 192.168.253.100

注:192.168.253.100 是本机服务端(master)的IP地址


修改auto_accept为True,自动接受客户端的KEY,当然也可以这里不设置,手动接受就行,接受方式:salt-key -a keyname (keyname即为客户端刚才设置的id标识)

auto_accept: True


客户端minion配置(另一台id: 69)

需要修改minion的配置文件/etc/salt/minion中的master选项,进行如下操作:

master: 192.168.253.100

id :68

注:192.168.253.100是服务端的IP地址

id :客户端的标识,用服务端连接时,就是用此标识来连接客户端,如:salt '68' cmd.run 'df -h'


第二台minion的ID改为69

重启以上服务生效

服务端启动方式:service salt-master restart

客户端启动方式:service salt-minion restart

Master与Minion认证

1.minion在第一次启动时,会在/etc/salt/pki/minion/(该路径在/etc/salt/minion里面设置)下自动生成minion.pem(private key)和minion.pub(public key),然后将minion.pub发送给master。

2.master 在接收到minion的public key后,通过salt-key命令accept minion public key,这样在master的/etc/salt/pki/master/minions下的将会存放以minion id命名的public key, 然后master就能对minion发送指令了。

Master与Minion的连接

Saltstack master启动后默认监听4505和4506两个端口。4505(publish_port)为salt的消息发布系统,4506(ret_port)为salt客户端与服务端通信的端口。如果使用lsof查看4505端口,会发现所有的Minion在4505端口持续保持在ESTABLISHED


在master服务器上面执行以下命令:

salt-key -A (接受minion端的公钥)

salt-key -L

[root@Master ~]# salt-key -L

Accepted Keys:

68

69

Denied Keys:

Unaccepted Keys:

Rejected Keys:

[root@Master ~]# lsof -i :4505

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

salt-mast 2509 root 12u IPv4 22783 0t0 TCP 192.168.253.100:4505 (LISTEN)

salt-mast 2509 root 14u IPv4 27209 0t0 TCP 192.168.253.100:4505->192.168.253.50:46702 (ESTABLISHED)

salt-mast 2509 root 15u IPv4 27468 0t0 TCP 192.168.253.100:4505->192.168.253.150:45162 (ESTABLISHED)


KEY管理:

Salt在master和minion数据交换过程中使用AES加密, 为了保证发送给minion的指令不会被篡改,master和minion之间认证采用信任的接受(trusted, accepted )的key.

在发送命令到minion之前,minion的key需要先被master所接受(accepted). 运行salt-key可以列出当前key的状态

[root@Master ~]# salt-key -L

Accepted Keys:

68

69

Denied Keys:

Unaccepted Keys:

Rejected Keys:

注:

Accepted Keys为被服务端接受的KEY(230,68这二台客户端是被服务端接受了的KEY,其实230,68就是minion中的id标识号)

Unaccepted Keys:未被服务端接受的KEY

Rejected Keys:被服务端拒绝的KEY

salt-key命令可以接受特定的单个key或批量接受key, 使用-A选项接受当前所有的key, 接受单个key可以使用-a keyname.

认证命令为salt-key,常用的有如下命令:

-a ACCEPT, --accept=ACCEPTAccept the following key

-A, --accept-all Accept all pending keys

-r REJECT, --reject=REJECTReject the specified public key

-R, --reject-all Reject all pending keys

-d DELETE, --delete=DELETEDelete the named key

-D, --delete-all Delete all keys

发送指令:

master和minion之间可以通过运行test.ping远程命令判断是否存活

[root@Master ~]# salt -E '68|69' test.ping

68:

True

69:

True

或者对所有minion进行:salt '*' test.ping

[root@Master ~]# salt '*' test.ping

68:

True

69:

True

返回True说明测试是OK的,客户端是存活状态

执行命令:

[root@Master ~]# salt -E '68|69' cmd.run 'ifconfig'

68:

eth0 Link encap:Ethernet HWaddr 00:0C:29:71:49:53

inet addr:192.168.253.50 Bcast:192.168.253.255 Mask:255.255.255.0

inet6 addr: fe80::20c:29ff:fe71:4953/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:24971 errors:0 dropped:0 overruns:0 frame:0

TX packets:15627 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:31456855 (29.9 MiB) TX bytes:1213916 (1.1 MiB)

lo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0

inet6 addr: ::1/128 Scope:Host

UP LOOPBACK RUNNING MTU:16436 Metric:1

RX packets:4 errors:0 dropped:0 overruns:0 frame:0

TX packets:4 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:352 (352.0 b) TX bytes:352 (352.0 b)

69:

eth0 Link encap:Ethernet HWaddr 00:0C:29:6B:80:9D

inet addr:192.168.253.150 Bcast:192.168.253.255 Mask:255.255.255.0

inet6 addr: fe80::20c:29ff:fe6b:809d/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:25444 errors:0 dropped:0 overruns:0 frame:0

TX packets:15534 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:31503884 (30.0 MiB) TX bytes:1206199 (1.1 MiB)

lo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0

inet6 addr: ::1/128 Scope:Host

UP LOOPBACK RUNNING MTU:16436 Metric:1

RX packets:4 errors:0 dropped:0 overruns:0 frame:0

TX packets:4 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:352 (352.0 b) TX bytes:352 (352.0 b)

salt -E '68|69' cmd.run 'df -h'

[root@Master ~]# salt -E '68|69' cmd.run 'df -h'

69:

Filesystem Size Used Avail Use% Mounted on

/dev/sda3 16G 1.3G 14G 9% /

tmpfs 495M 12K 495M 1% /dev/shm

/dev/sda1 2.0G 56M 1.8G 3% /boot

/dev/sr0 4.2G 4.2G 0 100% /mnt/cdrom

/dev/sr1 1.2G 1.2G 0 100% /mnt/cdrom1

68:

Filesystem Size Used Avail Use% Mounted on

/dev/sda3 16G 1.2G 14G 8% /

tmpfs 495M 12K 495M 1% /dev/shm

/dev/sda1 2.0G 56M 1.8G 3% /boot

/dev/sr0 4.2G 4.2G 0 100% /mnt/cdrom

/dev/sr1 1.2G 1.2G 0 100% /mnt/cdrom1

注:把客户端id和发送的命令,用单引号括起来,养成习惯,防止出错

在服务端salt匹配minion id

在运行salt命令进行匹配时,请使用单引号('),避免shell解析

匹配所有minion:salt '*' test.ping

匹配下边域的所有minion:salt '*.example.*' test.ping

匹配example.net域中的(web1.example.net、web2.example.net......webN.example.example.net):salt 'web?.example.net' test.ping

匹配web1到web5的minion: salt 'web[1-5]' test.ping

匹配web-x、web-y及web-z minion: salt 'web-[x-z]' test.ping

正则表达式

匹配web-prod和web1-devel minion:

salt -E 'web1-(prod|devel)' test.ping

指定列表

salt -L 'web1,web2,web3' test.ping

指定组:

在服务务端中打开master配置文件

vim /etc/salt/master

添加如下分组

nodegroups:

group1: 'L@69,68'

group2: '68'

group3: 'G@os:centos'

group4: 'G@mem:487'

值得注意的是编辑master的时候,group1和group2前面是2个空格

测试:

[root@51ou.com salt]#salt -N group2 test.ping

68:

True

[root@51ou.com salt]# salt -N group1 test.ping

230:

True

68:

True

可能大家会好奇group1中为什么会有L@,这代表什么意思?

其实L是指客户端列表,我们一组中有多个客户端,所以在前面用L表示。

除了有列表匹配外,还有很多匹配方式,如:

这些参数都可以直接在命令行使用,如:

salt -S '192.168.1.230' test.ping

salt -G 'os:Centos' test.ping

salt -L '230,68' test.ping

minion基本信息的管理

基本使用:

salt '*' grains.ls 查看grains分类

salt '*' grains.items 查看grains所有信息

salt '*' grains.item osrelease 查看grains某个信息

如:

[root@51ou.com salt]# salt '*' grains.item osrelease

230:

osrelease: 6.2

68:

osrelease: 6.2

Salt命令介绍

cmd.run

Saltstack可以远程执行shell命令,使用cmd.run。如:

salt '68' cmd.run 'df -h'

内置执行模块

官方模块地址:http://docs.saltstack.com/ref/modules/all/index.html

Saltstack 配置管理

Salt使用State模块文件进行配置管理,使用YAML编写,以.sls结尾。如果进行配置管理首先需要再Master的配置文件中指定"file roots"的选项,Salt支持环境的配置,比如测试环境和生产环境但是base环境是必须的。而且Base环境必须包含入口文件top.sls。

服务 客户 命令 客户端 配置 管理 环境 文件 方式 端口 信息 标识 端的 地址 指令 模块 测试 认证 运行 两个 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 花魁咖啡 天津市摩尔互联网科技 山东特亿宝互联网科技有限公司 国智互联网科技 互联网金融监管科技数据 互联网科技保险 互联网与科技金融数据 麻工互联网科技 上游互联网科技 互联网 科技馆 贵州叶脉互联网科技有限公司所属行业 江阴互联网智能科技产品进口 互联网科技大奖都有哪些公司 威龙国际互联网科技公司 半导体行业属于互联网高科技类吗 互联网科技包装股 安徽九吞吴互联网科技有限公司 广东猫王互联网科技有限公司电话 互联网科技创业有什么好项目 武汉亿视互联网科技有限公司 今日互联网科技 互联网金融 科技金融 深圳艾佳互联网科技 深圳前海聚择互联网科技有限公司 互联网经济与金融科技 浙江互联网科技研学营 成都互联网科技公司工作好不好 工业互联网山东科技大学 山东大美朱楼互联网科技有限公司 优雇互联网科技有限公司
0