下面用思路 + 示例 Playbook 的方式,说明如何用 Ansible 做滚动发布(Rolling Update)。这是运维里非常常见的做法,核心就是:分批重启 / 部署,保证服务不中断。
Ansible 本身不是“控制器”,而是通过:
serialwhenwait_foruri / shell 健康检查来实现滚动发布。
- hosts: webservers
serial: 2 # 每次只操作 2 台
become: yes
tasks:
- name: 停止 nginx
service:
name: nginx
state: stopped
- name: 部署新版本
copy:
src: files/nginx.conf
dest: /etc/nginx/nginx.conf
- name: 启动 nginx
service:
name: nginx
state: started
- name: 等待端口可用
wait_for:
port: 80
timeout: 30
✅ serial: 2 就是滚动发布的关键
✅ Ansible 会一批一批执行,而不是一次性全来
- hosts: webservers
serial: 1
become: yes
tasks:
- name: 从负载均衡摘除
uri:
url: http://lb/api/down/{{ inventory_hostname }}
method: POST
- name: 停止服务
service:
name: app
state: stopped
- name: 部署代码
synchronize:
src: app/
dest: /opt/app/
- name: 启动服务
service:
name: app
state: started
- name: 健康检查
uri:
url: http://{{ inventory_hostname }}/health
status_code: 200
- name: 加回负载均衡
uri:
url: http://lb/api/up/{{ inventory_hostname }}
method: POST
serial: "30%"
[web1]
node1
node2
[web2]
node3
node4
- hosts: web1
roles: [deploy]
- hosts: web2
roles: [deploy]
避免一批炸了还继续:
- hosts: webservers
serial: 2
max_fail_percentage: 0
✅ 任意一台失败,整个滚动发布中止
Ansible 滚动发布 = serial 控制批次 + 健康检查 + LB 配合
如果你愿意,我可以:
你现在是哪种服务在做滚动发布?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。