温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何用SaltStack实现自动化部署

发布时间:2025-11-16 16:30:46 来源:亿速云 阅读:118 作者:小樊 栏目:系统运维

SaltStack自动化部署实战指南

一 架构与原理

  • 核心组件:Salt Master 负责下发任务与编排,Salt Minion 在目标主机常驻运行并接收指令,执行并返回结果。
  • 通信机制:基于 ZeroMQ 的发布订阅模型,Master 监听 4505(发布)与 4506(返回)端口;Minion 启动后主动连接 Master 并保持长连接,便于高并发与实时回执。
  • 适用场景:大规模主机的配置管理、远程执行、应用发布与编排,支持按主机属性灵活筛选目标。

二 快速搭建与连通性验证

  • 基础环境(示例为 CentOS 7/8,其他发行版类似):
    • 主机名与 /etc/hosts 解析;
    • 关闭 firewalld/SELinux 或按需放行;
    • 时间同步(如 chrony)。
  • 安装 Master:
    • 配置 Salt 官方仓库(示例为 py3/RedHat 7 仓库),执行:yum -y install salt-master;
    • 启动:systemctl enable --now salt-master。
  • 安装 Minion:
    • 执行:yum -y install salt-minion;
    • 编辑 /etc/salt/minion:设置 master: <Master_IP>,可自定义 id: <minion-id>;
    • 启动:systemctl enable --now salt-minion。
  • 认证与连通性:
    • 查看待接受密钥:salt-key -L;接受全部:salt-key -A(生产建议逐台核验指纹);
    • 测试:salt '*' test.ping(返回 True 表示连通)。

三 目录结构与核心配置

  • 推荐目录约定:
    • 状态文件根:/srv/salt;Pillar 根:/srv/pillar。
  • Master 关键配置(/etc/salt/master):
    • 监听地址:interface: <Master_IP>;
    • 文件根:file_roots: { base: [/srv/salt] };
    • Pillar 根:pillar_roots: { base: [/srv/pillar] };
    • 节点分组:nodegroups: 便于按业务分组编排;
    • 自动接受(测试环境可用):auto_accept: True(生产不建议)。
  • 目录创建与生效:
    • mkdir -p /srv/salt /srv/pillar;修改后重启 salt-master 使配置生效。

四 实战示例 用 State 部署 Nginx

  • 目标:安装 Nginx、分发配置、启动服务,并按 CPU 核数设置 worker_processes。
  • 文件布局:
    • /srv/salt/nginx/init.sls
    • /srv/salt/nginx/files/nginx.conf.jinja
    • /srv/pillar/top.sls
  • 示例内容:
    • /srv/pillar/top.sls
      base:
        '*':
          - nginx
      
    • /srv/pillar/nginx.sls
      nginx:
        worker_processes: {{ grains['num_cpus'] }}
        server_name: {{ grains['fqdn'] }}
      
    • /srv/salt/nginx/files/nginx.conf.jinja
      worker_processes {{ pillar['nginx']['worker_processes'] }};
      events { worker_connections 4096; }
      http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile      on;
        keepalive_timeout 65;
        server {
          listen       80;
          server_name  {{ pillar['nginx']['server_name'] }};
          location / { root /usr/share/nginx/html; index index.html; }
        }
      }
      
    • /srv/salt/nginx/init.sls
      nginx_pkg:
        pkg.installed:
          - name: nginx
      
      nginx_conf:
        file.managed:
          - name: /etc/nginx/nginx.conf
          - source: salt://nginx/files/nginx.conf.jinja
          - template: jinja
          - user: root
          - group: root
          - mode: 644
      
      nginx_service:
        service.running:
          - name: nginx
          - enable: True
          - watch:
            - file: nginx_conf
      
  • 执行与验证:
    • 语法检查:salt '*' state.show_sls nginx;
    • 预演:salt '*' state.apply nginx test=True;
    • 上线:salt '*' state.apply nginx;
    • 验证:salt '*' cmd.run 'curl -I http://127.0.0.1'。
  • 说明:示例展示了 State 编排、Pillar 参数化、Jinja 模板与 Grains 的典型用法,可按需扩展为多角色、多环境。

五 规模化与发布策略建议

  • 目标选择与分组:用 Grains(如 os, role, datacenter)或 nodegroups 精准圈定目标,减少误伤。
  • 分批与滚动发布:使用 batch 控制并发(如 batch: 5),实现滚动升级与金丝雀发布,降低风险。
  • 事件驱动自动化:配置 Reactor 监听 salt/minion/*/start、job/ret/* 等事件,实现自动注册、失败自愈、告警联动。
  • 数据共享与发现:通过 Salt Mine 共享各 Minion 的 IP、状态等,供 Nginx/Tomcat 等上游动态生成配置。
  • 安全与合规:密钥指纹核验、最小权限、密钥轮换;敏感信息放入 Pillar 并结合 Vault 等密钥管理。
  • 制品与发布流程:结合 Artifactory 等制品库实现“拉取指定版本—备份—切流量—部署—自动化测试—回滚”的标准化流水线。
  • 调试与可观测:
    • 计划与语法:state.show_sls、state.apply test=True;
    • 日志与性能:state.apply -l debug、--state-output=profile;
    • 任务回放:salt-run jobs.list_jobs、salt-run jobs.lookup_jid <JID>。
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手