首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Cloudify中正确自动伸缩VM组?

如何在Cloudify中正确自动伸缩VM组?
EN

Stack Overflow用户
提问于 2019-12-03 23:12:11
回答 1查看 85关注 0票数 0

我使用的是cloudify社区版本19.01.24。

试图弄清楚如何自动扩展一组两个虚拟机。这是我到目前为止想出来的(跳过不相关的部分):

代码语言:javascript
复制
  monitored_vm1_port:
    type: cloudify.openstack.nodes.Port
    properties:
      openstack_config: *openstack_config
    relationships:
      - type: cloudify.relationships.contained_in
        target: proxy_server_network

  monitored_vm2_port:
    type: cloudify.openstack.nodes.Port
    properties:
      openstack_config: *openstack_config
    relationships:
      - type: cloudify.relationships.contained_in
        target: proxy_server_network

  monitored_vm1_host:
    type: cloudify.openstack.nodes.Server
    properties:
      image: { get_input: image }
      flavor: { get_input: flavor }
      resource_id: { concat: ['monitored_vm1-', { get_input: client_name }] }
      agent_config:
        user: { get_input: agent_user }
        key: { get_property: [ keypair, private_key_path ] }
    interfaces:
      cloudify.interfaces.monitoring_agent:
        install:
          implementation: diamond.diamond_agent.tasks.install
          inputs:
            diamond_config:
              interval: 10
        start: diamond.diamond_agent.tasks.start
        stop: diamond.diamond_agent.tasks.stop
        uninstall: diamond.diamond_agent.tasks.uninstall
      cloudify.interfaces.monitoring:
        start:
          implementation: diamond.diamond_agent.tasks.add_collectors
          inputs:
            collectors_config:
              NetworkCollector: {}
    relationships:
     - type: cloudify.openstack.server_connected_to_port
       target: monitored_vm1_port
     - type: cloudify.openstack.server_connected_to_keypair
       target: keypair

  monitored_vm2_host:
    type: cloudify.openstack.nodes.Server
    properties:
      image: { get_input: image }
      flavor: { get_input: flavor }
      resource_id: { concat: ['monitored_vm2-', { get_input: client_name }] }
      agent_config:
        user: { get_input: agent_user }
        key: { get_property: [ keypair, private_key_path ] }
    interfaces:
      cloudify.interfaces.monitoring_agent:
        install:
          implementation: diamond.diamond_agent.tasks.install
          inputs:
            diamond_config:
              interval: 10
        start: diamond.diamond_agent.tasks.start
        stop: diamond.diamond_agent.tasks.stop
        uninstall: diamond.diamond_agent.tasks.uninstall
      cloudify.interfaces.monitoring:
        start:
          implementation: diamond.diamond_agent.tasks.add_collectors
          inputs:
            collectors_config:
              NetworkCollector: {}
    relationships:
     - type: cloudify.openstack.server_connected_to_port
       target: monitored_vm2_port
     - type: cloudify.openstack.server_connected_to_keypair
       target: keypair

groups:
  vm_group:
    members: [monitored_vm1_host, monitored_vm2_host]

  scale_up_group:
    members: [monitored_vm1_host, monitored_vm2_host]
    policies:
      auto_scale_up:
        type: scale_policy_type
        properties:
          policy_operates_on_group: true
          scale_limit: 2 # max additional instances
          scale_direction: '<'
          scale_threshold: 31457280
          service_selector: .*monitored_vm1_host.*network.eth0.rx.bit
          cooldown_time: 60
        triggers:
          execute_scale_workflow:
            type: cloudify.policies.triggers.execute_workflow
            parameters:
              workflow: scale
              workflow_parameters:
                delta: 1
                scalable_entity_name: vm_group
                scale_compute: true

policies:
  vm_group_scale_policy:
    type: cloudify.policies.scaling
    properties:
      default_instances: 1
    targets: [vm_group]

因此,蓝图部署正确,并根据指定的条件(VM接口上的流量)触发扩展工作流,但在创建新的VM实例时失败,并出现以下错误:

代码语言:javascript
复制
2019-11-18 14:54:46,591:ERROR: Task nova_plugin.server.create[f736f81c-7f8c-4f82-a280-8352c1d01bff] raised:
Traceback (most recent call last):
  (...)
NonRecoverableError: Port 3b727b5e-a2ec-47cc-b711-37cb80a7b4e5 is still in use. [status_code=409]

看起来Cloudify正在尝试使用现有的端口产生新的实例,很奇怪。所以我想,也许我应该显式地将VM的端口也放在伸缩组中,以便将它们与VM一起复制。像这样试过:

代码语言:javascript
复制
  vm_group:
    members: [monitored_vm1_host, monitored_vm1_port, monitored_vm2_host, monitored_vm2_port]

但在这种情况下,我得到了一个关于某些缺失对象关系的错误,已经处于蓝图验证阶段:

代码语言:javascript
复制
Invalid blueprint - Node 'monitored_vm1_host' and 'monitored_vm1_port' belong to some shared group but they are not contained in any shared node, nor is any ancestor node of theirs.
  in: /opt/manager/resources/blueprint-with-scaling-d79fed3d-0b3b-4459-a851-fedd9ecf50c6/blueprint-with-scaling.yaml

我已经浏览了文档和我能找到的任何示例(数量不多),但我不清楚它们。

我怎样才能正确地缩放它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-04 01:59:26

正如您所说的,您得到了第一个错误,因为Cloudify试图扩展VM并将其连接到已经绑定到第一个VM的端口。

第二个错误意味着,如果端口不依赖于也被缩放的节点,则无法缩放端口,这是为了避免无法缩放的资源的缩放。

这个问题的解决方案是,有一个cloudify.nodes.Root类型的节点,并通过端口关系连接到它,如果端口依赖于这个节点,并且这个节点将是您将能够扩展的伸缩组的一部分。

你的蓝图应该是这样的:

代码语言:javascript
复制
 my_relationship_node:
    type:  cloudify.nodes.Root

 port:
    type: cloudify.openstack.nodes.Port
    properties:
      openstack_config: *openstack_config
    relationships:
    - type: cloudify.relationships.connected_to
      target: public_network
    - type: cloudify.relationships.depends_on
      target: public_subnet
    - type: cloudify.openstack.port_connected_to_security_group
      target: security_group
    - type: cloudify.openstack.port_connected_to_floating_ip  
      target: ip
    - type: cloudify.relationships.contained_in
      target: my_relationship_node

我希望它能帮上忙。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59160098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档