CentOS 7 下 Saltstack 的安装和基本使用

1. 安装

按照saltstack官网的引导准备安装。官网地址:

http://docs.saltstack.cn/topics/installation/rhel.html

配置好repo,发现 repo 网络不通

[saltstack-repo]
name=SaltStack repo for RHEL/CentOS $releasever
baseurl=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest
enabled=1
gpgcheck=1
gpgkey=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest/SALTSTACK-GPG-KEY.pub

由于使用了 centos 7.6 的操作系统,无奈之下,在 epel 源网站中下载相应软件包。
网址:

http://download.fedoraproject.org/pub/archive/epel/7.2019-05-29/x86_64/Packages/s/

软件包:
salt-2015.5.10-2.el7.noarch.rpm
salt-master-2015.5.10-2.el7.noarch.rpm
salt-minion-2015.5.10-2.el7.noarch.rpm

在这里插入图片描述
上传软件包,在 salt-master 节点使用 yum 安装并启动

yum install salt-2015.5.10-2.el7.noarch.rpm  salt-master-2015.5.10-2.el7.noarch.rpm
systemctl start salt-master.service

启动报错,需要安装 zeromq

yum install zeromq-devel

在这里插入图片描述
安装 zeromq 之后,salt-master 可以顺利启动了。
在这里插入图片描述
同理,在 salt-minion 节点使用 yum 安装,安装 zeromq,并启动

yum install salt-2015.5.10-2.el7.noarch.rpm  salt-minion-2015.5.10-2.el7.noarch.rpm

2. 基础配置

修改 /etc/salt/minion 中 master 值为 master server 地址,如果使用域名,需要确保能 ping 通。

在这里插入图片描述

在 /etc/salt/pki/master 路径下,使用 tree 和 salt-key 命令查看。图中 2 台需要 master 进行认证
在这里插入图片描述
在这里插入图片描述

salt 通过公钥加密和认证 minions。想要让 minion 从 master 端接受命令,minions 的密钥需要被 master 接受。使用 salt-key -a 命令确认主机。
在这里插入图片描述
使用 salt-key -L 命令查询所有minion ID
在这里插入图片描述

3. 使用示例

3.1 创建状态目录结构

修改 /etc/salt/master,取消第416-418行注释。
在这里插入图片描述

以安装 httpd 为例,创建状态目录结构

mkdir -p /srv/salt/httpd/files
/srv/salt/
├── top.sls            # 状态入口文件
├── httpd/            # 状态模块目录
    ├── init.sls
    └── files/         # 相关文件
        └── httpd.conf
3.2 编写 top.sls
base:
  '*':
    - httpd
3.3 创建状态文件

/srv/salt/httpd/init.sls:

# 安装httpd软件包
httpd_pkg:
  pkg.installed:
    - name: httpd

# 管理主配置文件
httpd_config:
  file.managed:
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://httpd/files/httpd.conf
    - user: root
    - group: root
    - mode: 644
    - template: jinja
    - require:
      - pkg: httpd_pkg

# 确保服务运行并开机启动
httpd_service:
  service.running:
    - name: httpd
    - enable: True
    - watch:
      - file: httpd_config
    - require:
      - pkg: httpd_pkg
      - file: httpd_config

# 开放防火墙端口(可选)
httpd_firewall:
  firewalld.present:
    - name: public
    - services:
      - http
      - https
    - permanent: True
    - immediate: True
3.4 准备配置文件模板

从原始配置复制并修改:

cp /etc/httpd/conf/httpd.conf /srv/salt/httpd/files/
3.5 应用状态
# 测试运行(dry-run)
salt 'minion-id' state.apply httpd test=True

# 实际应用
salt 'minion-id' state.apply httpd

# 或者使用highstate(推荐)
salt 'minion-id' state.highstate
3.6 验证安装
# 检查服务状态
salt 'minion-id' cmd.run 'systemctl status httpd'

# 检查监听端口
salt 'minion-id' cmd.run 'netstat -tulnp | grep httpd'

# 测试网页访问
salt 'minion-id' cmd.run 'curl -I localhost'
3.7 最佳实践
  1. 模块化设计:按功能/服务拆分状态文件
  2. 版本控制:所有状态文件应纳入Git等VCS
  3. 环境分离:使用不同环境(dev/stage/prod)
  4. 先测试后应用:始终先用 test=True 测试
  5. 文档化:为每个状态添加注释说明

Salt States 的强大之处在于将基础设施配置转化为可版本控制、可测试、可重复应用的代码,是实现DevOps自动化运维的关键工具。

4. 远程执行与状态管理的区别

SaltStack 的远程执行 (Remote Execution) 和状态管理 (State Management) 是两大核心功能,它们在自动化运维中扮演不同角色。

4.1 远程执行 (Remote Execution)

定义:直接在目标minion上执行命令或脚本,立即获得结果。

特点:

  • 即时性:立即执行并返回结果

  • 命令式:明确指定要运行的命令

  • 无状态性:不关心系统当前状态,只执行命令

  • 临时操作:适合一次性任务或紧急修复

常见用途:

  • 查询系统信息(如 salt ‘*’ disk.usage)

  • 服务管理(如 salt ‘*’ service.restart nginx)

  • 软件包安装(如 salt ‘*’ pkg.install httpd)

  • 文件传输(如 salt ‘*’ cp.get_file)

示例:

# 在所有minion上查看内存使用情况
salt '*' cmd.run 'free -h'

# 在web服务器组上重启Apache
salt 'web*' service.restart apache2
4.2 状态管理 (State Management)

定义:声明系统应该处于什么状态,由 SaltStack 确保系统符合该状态。
特点:

  • 声明式:描述系统应该达到的状态,而非具体操作步骤
  • 幂等性:多次执行结果一致,只在必要时才进行更改
  • 状态保持:持续确保系统符合定义的状态
  • 配置即代码:使用SLS文件定义状态

常见用途:

  • 系统配置管理(如确保特定配置文件存在且内容正确)
  • 服务部署(如确保软件包安装且服务运行)
  • 基础设施即代码
  • 长期配置维护

示例:

# apache/init.sls
apache:
  pkg.installed:
    - name: apache2
  service.running:
    - enable: True
    - require:
      - pkg: apache
4.3 主要区别对比
特性远程执行状态管理
执行方式命令式 (“做什么”)声明式 (“应该是什么状态”)
关注点立即执行特定命令系统长期状态
幂等性不一定保证幂等
执行频率按需执行可定期执行保持状态一致
复杂度简单直接需要定义状态文件
典型用例临时任务、查询配置管理、服务部署
依赖管理支持依赖关系定义
变更检测不检测检测并只应用必要变更
4.4 如何选择

使用远程执行:

  • 快速查询信息
  • 执行一次性任务
  • 进行临时修复
  • 测试命令效果

使用状态管理:

  • 确保系统配置一致性
  • 管理长期基础设施
  • 实现可重复的部署
  • 处理复杂的依赖关系

两者经常结合使用,例如用远程执行触发状态应用:salt ‘*’ state.apply

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值