最近我在我们的 ansible playbook 代码中遇到了一个瓶颈。我们按顺序部署集群(例如mongoDB 副本集),即一个虚拟机一个接着另一个虚拟机,每个虚拟机都等待前一个虚拟机启动并运行。
这会减慢整个集群的部署时间,其影响因素是其成员的一个因素。
为了解决这个问题,我开始深入研究ansible 的异步操作和池化,并找到了一些关于并行循环和“即发即忘”策略的示例,适用于像我们这样的场景。
特别是,我们定义了自己的“自定义 VM 并生成它”ansible 任务 ( create_instance.yml),该任务包含在内并从 playbook 接收不同的自定义变量,并通过运行不同的 KVM/shell 命令来抽象整个过程。
使用“ Ansible 中的并行任务执行”作为参考,我最终得到了类似的结果:
- name: Generate VMs for DB
hosts: hypervisor_fe
tags: platform,mongodb
tasks:
- include: tasks/create_instance.yml
vars:
vm: "{{ item }}"
with_items: "{{ mongodb.vms }}"
register: mongo_instances
async: 7200
poll: 0
- name: Wait for instance creation to complete
async_status: jid={{ item.ansible_job_id }}
register: mongo_jobs
until: mongo_jobs.finished
retries: 300
with_items: "{{ …Run Code Online (Sandbox Code Playgroud) 我正在使用 PromQL 查询来计算过去 60 分钟内通过任何节点上的某些接口推送/接收的累积流量。使用 Prometheus Node Exporter 的指标:
delta(node_network_receive_bytes_total{device=~"ens.*"}[60m])*8
Run Code Online (Sandbox Code Playgroud)
和它的完全正常,只要该节点不处于该间隔重新启动,该值仅仅是矢量的尖端和它的尾巴之间的差。当系统重新启动并且计数器复位时,该函数的含义停止反映所述结果。
例如,这是以下图表node_network_transmit_bytes_total:
...该函数将返回 -9MiB,而不是 10.2MiB。
我想我也可以使用rate()s 来获得估计值。但是有没有更好的功能/方法来获得实际的东西?