繁体   English   中英

是否可以在多个主机之间创建虚拟机的平衡概念?

[英]Is there a balancing concept in ansible for creating virtual machines across multiple hosts?

我有两个主机,我想创建四个虚拟机。 ansible中是否有一个平衡的概念,它将在每个主机上按以下方式创建两个虚拟机?

主机1:VM1,VM3,...

主机2:VM2,VM4,...

我知道我可以指定在其上创建VM的主机,但这有点严格,因为我可能会添加更多的主机和更多的虚拟机,并且如果可能,我希望使用动态解决方案。

我能管理的最好的是:

    with_items:
##    - "{{ groups.production }}"
    - prod-test1
    delegate_to: "{{ groups['control'][1] }}"

尽管这远非理想,因为它需要硬引用主机组成员和虚拟机项目。

做这样的事情并没有通用的概念,但是存在可能的解决方案。 有点难看,但这对我有用。 给定以下库存hosts

[control]
server1
server2
server3

[production]
vm1
vm2
vm3
vm4

和一本剧本play.yml

---
- hosts: all
  gather_facts: False

  tasks:
  - name: Just loop through a group
    debug:
      msg: 'VM is {{inventory_hostname}} target is {{ansible_host}}'
    delegate_to: '{{ groups["control"][play_hosts.index(inventory_hostname) % groups["control"]|length] }}'

使用ansible-playbook -i hosts play.yml -l production执行ansible-playbook -i hosts play.yml -l production产生的结果如下:

PLAY [all] *********************************************************************

TASK [Just loop through a group] ***********************************************
ok: [vm1 -> server1] => {
    "msg": "VM is vm1 target is server1"
}
ok: [vm2 -> server2] => {
    "msg": "VM is vm2 target is server2"
}
ok: [vm3 -> server3] => {
    "msg": "VM is vm3 target is server3"
}
ok: [vm4 -> server1] => {
    "msg": "VM is vm4 target is server1"
}

PLAY RECAP *********************************************************************
vm1                        : ok=1    changed=0    unreachable=0    failed=0
vm2                        : ok=1    changed=0    unreachable=0    failed=0
vm3                        : ok=1    changed=0    unreachable=0    failed=0
vm4                        : ok=1    changed=0    unreachable=0    failed=0

我想这就是你想要的。 您只需要用所需的操作替换debug任务即可。

ansible文档中讨论了其他负载平衡和滚动升级方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM