使用 delegate_to 与 run_once 进行编排
在一台主机上为多台主机运行任务
使用 delegate_to 与 run_once 进行编排 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 4 节课。
任务不总是在您以为的位置运行
默认情况下,每个任务都会在其目标主机上运行。但在进行编排时,有时需要让任务完全在其他位置运行。🎯
认识 delegate_to
delegate_to 关键字会在不同于当前主机的另一台主机上运行任务,同时仍使用该主机的变量。
- name: Add web node to load balancer
community.general.haproxy:
host: "{{ inventory_hostname }}"
state: enabled
delegate_to: lb01经典使用场景
在遍历 Web 节点时,将负载均衡器的变更委托给 LB 主机。执行方案仍按节点进行,但操作会在 LB 上完成。
委托给 localhost
通过委托给 localhost,在您的控制节点上运行任务。这样非常适合从一个位置调用 API 或发送通知。
- name: Notify chat
ansible.builtin.uri:
url: "{{ webhook }}"
method: POST
delegate_to: localhost变量仍属于原始主机
委托会改变任务的运行位置,但不会改变它查看的事实。inventory_hostname 仍然指向原始目标,而不是受委托的主机。
认识 run_once
run_once 关键字会为整个批次运行一次任务,而不是在每台主机上各运行一次。Ansible 会选择第一台主机来执行它。
- name: Run database migration
ansible.builtin.command: ./migrate.sh
run_once: truerun_once 为什么重要
某些操作只能执行一次,例如迁移或领导者选举。run_once 可以防止每台主机重复执行同一个共享步骤。
将它们结合使用
将 run_once 与 delegate_to 结合使用,可在指定的一台主机上执行一次操作,例如从单个应用节点运行迁移。
- name: Migrate db once
ansible.builtin.command: ./migrate.sh
run_once: true
delegate_to: app01结果会共享
使用 run_once 时,已注册的结果会在批次中的所有主机之间共享。它们都能看到那次执行产生的输出。
- ansible.builtin.command: cat /etc/version
run_once: true
register: ver从受委托主机收集事实
如果希望收集到的事实关联到受委托的主机,而不是当前主机,请使用 delegate_facts。此选项默认关闭。
不仅是配置,更是编排
这些关键字结合起来,就能将按主机配置转变为真正的编排:从一个位置协调整个主机群组中的一项操作。
快速检查
让我们检查一下这些编排关键字。
回顾
使用 delegate_to 在另一台主机上运行任务,使用 run_once 让任务在每个批次中只运行一次,这是编排的核心。✅
常见问题解答
「使用 delegate_to 与 run_once 进行编排」课时是免费的吗?
是的 — 「使用 delegate_to 与 run_once 进行编排」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 DevOps Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 DevOps Bootcamp 课程共包含 4 节课。
「使用 delegate_to 与 run_once 进行编排」这节课中我会学到什么?
在一台主机上为多台主机运行任务 你通过在浏览器中直接运行的动手代码来练习 DevOps Bootcamp,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 DevOps Bootcamp 需要有经验吗?
无需任何先前经验。CoddyKit 上的 DevOps Bootcamp 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「使用 delegate_to 与 run_once 进行编排」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 DevOps Bootcamp 课中编写并运行代码吗?
能。每节 DevOps Bootcamp 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 使用 cli_command 自动化网络设备
- 使用 delegate_to 与 run_once 进行编排
- 协调 Web、App 与 DB 层
- 负载均衡器节点摘除与重新启用