一、SaltStack自动化部署基础准备 SaltStack是Python编写的开源配置管理与自动化部署工具,采用C/S架构(Master- Minion模式),通过ZeroMQ消息队列实现高效通信。其核心功能包括状态管理(定义系统目标状态)、远程执行(批量下发命令)、配置管理(统一维护配置文件)等,适用于服务器批量部署、应用发布、环境标准化等场景。
二、SaltStack环境部署步骤
sudo rpm --import https://repo.saltproject.io/py3/redhat/7/x86_64/latest/SALTSTACK-GPG-KEY.pub
curl -fsSL https://repo.saltproject.io/py3/redhat/7/x86_64/latest.repo | sudo tee /etc/yum.repos.d/salt.repo
sudo yum install -y salt-master
sudo systemctl enable --now salt-master
sudo yum install -y salt-minion
sudo systemctl enable --now salt-minion
/etc/salt/minion文件,指定Master IP(或域名)和Minion ID(建议使用主机名):master: 192.168.1.100 # Master节点IP
id: webserver01 # Minion唯一标识(通常用主机名)
/etc/salt/pki/minion/下生成minion.pub公钥。sudo salt-key -L # 查看未接受的Minion列表
sudo salt-key -a webserver01 # 接受指定Minion(webserver01)
认证成功后,Minion会出现在Accepted Keys列表中。三、SaltStack自动化部署实现流程
State文件是SaltStack实现自动化部署的核心,采用YAML格式编写,存放在Master节点的/srv/salt/目录下(需提前创建)。以下是一个Nginx部署的State文件示例(/srv/salt/nginx.sls):
# 安装Nginx
install_nginx:
pkg.installed:
- name: nginx
# 部署Nginx配置文件
configure_nginx:
file.managed:
- name: /etc/nginx/nginx.conf
- source: salt://nginx/files/nginx.conf # Master上的文件路径(/srv/salt/nginx/files/)
- user: root
- group: root
- mode: 644
- require:
- pkg: install_nginx # 依赖安装步骤
# 启动Nginx服务并设置开机自启
start_nginx:
service.running:
- name: nginx
- enable: True
- require:
- file: configure_nginx # 依赖配置步骤
Top文件(/srv/salt/top.sls)用于定义哪些Minion应用哪些State文件,支持批量指定目标(如所有Web服务器、特定主机组)。示例如下:
base: # 环境名称(如prod、dev)
'web*': # 匹配所有主机名以"web"开头的Minion(如webserver01、webserver02)
- nginx
'db*': # 匹配所有主机名以"db"开头的Minion
- mysql
state.apply命令让目标Minion执行指定State文件。例如,让所有匹配web*的Minion部署Nginx:sudo salt 'web*' state.apply nginx
-v参数查看详细执行日志,-t参数设置超时时间(秒):sudo salt 'web*' state.apply nginx -v -t 300
Pillar是SaltStack的变量管理工具,用于存储敏感信息(如数据库密码)或动态配置(如不同环境的域名),避免硬编码在State文件中。
/etc/salt/master文件,启用Pillar并指定目录:pillar_opts: True
pillar_roots:
base:
- /srv/pillar
创建Pillar目录并编写变量文件(如/srv/pillar/nginx.sls):nginx:
server_name: example.com # 动态域名
port: 80 # 动态端口
nginx.sls,使用pillar.get获取变量:configure_nginx:
file.managed:
- name: /etc/nginx/nginx.conf
- source: salt://nginx/files/nginx.conf
- template: jinja # 使用Jinja模板引擎
- context:
server_name: {{ pillar.get('nginx:server_name', 'default.com') }}
port: {{ pillar.get('nginx:port', 80) }}
此时,不同Minion可根据Pillar中的变量获取不同的配置。四、自动化部署优化技巧
grains(系统信息,如操作系统、CPU架构)批量选择目标。例如,部署到所有CentOS 7服务器:sudo salt -G 'os:CentOS,osrelease:7' state.apply nginx
/srv/salt/_modules/),并通过saltutil.sync_modules同步到Minion。git push后执行salt '*' state.apply app)。通过以上步骤,可实现SaltStack的自动化部署,覆盖从环境准备到批量执行的全流程,显著提升运维效率。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。