Статьи

Управление OpenStack с помощью Heat + Devstack

[Эта статья была первоначально написана Shay Naeh.]

OpenStack Heat + Cloudify + Devstack

Сегодня, чтобы запустить менеджер Cloudify, вы должны позаботиться о вычислительных, сетевых и защитных сервисах OpenStack , по сути, о всей оркестрации OpenStack (это все еще хороший справочник). Каждый из них состоит из нескольких конфигураций. 

Просто назвать несколько:

  • Когда мы говорим о вычислительных сервисах, они могут включать предоставление правильного типа экземпляра, характеристик памяти и процессора, типа изображения и многое другое.
  • Сетевые услуги включают в себя сети, порты, подсети, связь с плавающими IP-адресами, а также установление маршрутизатора и правильную привязку его интерфейсов. Смотрите этот пост, чтобы узнать больше об OpenStack Networking .
  • Службы безопасности включают создание групп безопасности для определения того, какие сетевые порты открыты и кто может к ним получить доступ, а также создание ключей безопасности для SSH на машине менеджера и машинах будущих экземпляров. Существует другой ключ для компьютера менеджера и другой ключ для запущенных экземпляров приложения.

Ниже приведен пример загрузочного менеджера Cloudify после того, как все вышеупомянутые службы IaaS предоставлены.

Тепловой стек

Более того, при создании менеджера Cloudify обычным способом необходимо установить интерфейс командной строки (CLI), который, в свою очередь, подключается к конечным точкам Openstack, таким как конечная точка Identity и конечная точка Neutron, и связывается с ними по сети с помощью команд на основе JSON , Это прекрасно работает, но поскольку в нем участвует больше компонентов, таких как установка интерфейса командной строки, это может занять больше времени и иногда более подвержено ошибкам.

Чтобы упростить это, вы можете создать стек OpenStack Heat и запустить стек, который создаст все автоматически. Позже я покажу реальный пример того, как запустить менеджер Cloudify в виде стека Heat.


Объединение OpenStack стало проще. Тест-драйв Cloudify.     Идти


Сначала поговорим о Жаре. Heat основан на шаблоне HOT — (который мы впервые обсудили в этом посте об OpenStack Heat, если вам нужен освежающий напиток), который напоминает стандарт TOSCA. Шаблон состоит из трех основных разделов:

  • Параметры : где вы можете определить различные параметры и константы, на которые будут ссылаться позже при создании и доступе к ресурсам.
  • Раздел ресурсов : где вы определяете и предоставляете ресурсы, такие как вычислительные ресурсы, сеть, подсети и т. Д.
  • Раздел вывода : где вы можете выводить переменные, такие как URL веб-страницы, публичные IP-адреса и т. Д.

Тепловые стеки могут быть вложенными, и один стек может ссылаться на второй стек. Это то, что называется Композиция шаблонов с Amazon CloudFormation.

Как мы увидим далее, вы можете определить службы IaaS и зависимости между ними, например, создание сети происходит до создания порта или подсети.

Cloudify Manager предоставляется в качестве теплового стека

heat_template_version: 2013-05-23

description: >
  Cosmo manager template

parameters:
  key_name:
    type: string
    description : Name of a KeyPair to enable SSH access to the instance
    default : shay
  instance_type:
    type: string
    description: Instance type for management server
    default: m1.large
    constraints:
      - allowed_values: [m1.small, m1.medium, m1.large]
        description: instance_type must be one of m1.small, m1.medium or m1.large
  image_id:
    type: string
    description: ID of the image to use for the management server
    default: fc08d66a-31ba-41af-9a07-5bbf4546a7b0 
 
  manager_net_cidr:
    type: string
    description: manager network address (CIDR notation)
    default: 10.10.1.0/24
  manager_net_gateway:
    type: string
    description: manager network gateway address
    default: 10.10.1.1
  manager_net_pool_start:
    type: string
    description: Start of app network IP address allocation pool
    default: 10.10.1.4
  manager_net_pool_end:
    type: string
    description: End of app network IP address allocation pool
    default: 10.10.1.34
  public_net_id:
    type: string
    description: The ID of the public network. You will need to replace it with your DevStack public network ID
    default: 09c20c92-e654-480d-bce4-f0bc1f9fc785 
  

resources:

  manager_network:
      type: OS::Neutron::Net
      properties:
        admin_state_up: true
        name: manager_network
        shared: true
        tenant_id: admin

  manager_subnet:
      type: OS::Neutron::Subnet
      properties:
        network_id: { get_resource: manager_network }
        cidr: { get_param: manager_net_cidr } 
        gateway_ip: { get_param: manager_net_gateway }
        dns_nameservers: [8.8.8.8, 8.8.4.4]
        allocation_pools:
          - start: { get_param: manager_net_pool_start }
            end: { get_param: manager_net_pool_end }

  router:
      type: OS::Neutron::Router

  router_gateway:
      type: OS::Neutron::RouterGateway
      properties:
        router_id: { get_resource: router }
        network_id: { get_param: public_net_id }

  router_interface:
      type: OS::Neutron::RouterInterface
      properties:
        router_id: { get_resource: router }
        subnet_id: { get_resource: manager_subnet }

  manager_instance:
    type: OS::Nova::Server
    properties:
      image: { get_param: image_id }
      flavor: { get_param: instance_type }
      key_name: { get_param: key_name }
      networks:
        - port: { get_resource: manager_port }
      user_data:
        str_replace:
          template: |
            #!/bin/bash -v
            sudo wget http://repository.cloudifysource.org/org/cloudify3/3.0.0/nightly_1/cloudify-components_3.0.0-beta-b1_amd64.deb -P /cloudify
            sudo wget http://repository.cloudifysource.org/org/cloudify3/3.0.0/nightly_1/cloudify-core_3.0.0-beta-b1_amd64.deb -P /cloudify
            sudo wget http://repository.cloudifysource.org/org/cloudify3/3.0.0/nightly_1/cloudify-ui_3.0.0-beta-b1_amd64.deb -P /cloudify-ui
            sudo wget http://repository.cloudifysource.org/org/cloudify3/3.0.0/nightly_1/ubuntu-agent_3.0.0-beta-b1_amd64.deb -P /cloudify-agents

            sudo dpkg -i /cloudify/*.deb
            sudo /cloudify-components/cloudify-components-bootstrap.sh
            sudo /cloudify-core/cloudify-core-bootstrap.sh ubuntu manager_host  
            sudo dpkg -i /cloudify-ui/*.deb
            sudo dpkg -i /cloudify-agents/*.deb

            #http://repository.cloudifysource.org/org/cloudify3/3.0.0/nightly_1/ubuntu-agent_3.0.0-beta-b1_amd64.deb

          params:
            manager_host: {get_attr: [manager_port, fixed_ips, 0, ip_address]}


  manager_port:
      type: OS::Neutron::Port
      properties:
        network_id: { get_resource: manager_network }
        fixed_ips:
          - subnet_id: { get_resource: manager_subnet }
  
  manager_floatingip:
      type: OS::Neutron::FloatingIP
      properties:
        floating_network_id: { get_param: public_net_id }
        port_id: { get_resource: manager_port }
        
outputs:
  WebsiteURL:
    description: URL for manager
    value:
      str_replace:
        template: http://host
        params:
          host: { get_attr: [manager_floatingip, floating_ip_address] }


Вы можете увидеть выше реальный пример того, как установить менеджер Cloudify в качестве теплового стека. В разделе параметров мы определяем несколько параметров, таких как ключ SSH к машине менеджера, тип экземпляра, идентификатор изображения, сеть менеджера в нотации CIDR, адрес шлюза, пул распределения начальной / конечной сети, а также идентификатор общедоступной сети. ,

In the resources section, we first create the network, then the subnet . You can see how we reference the parameters defined in the previous section like gateway_ip. We also reference the Google name servers as the DNS name servers to resolve names to IP addresses. Next, we provision the router and bind its interfaces. And now after all of the IaaS services are provisioned, and are in place, we can provision the Cloudify manager with the right image_id, flavor, and key_name. In the user data we create a bash script which installs the manager packages. First it downloads the right packages from the net, and then installs them.

In the output section we retrieve and present the manager’s floating IP address.

Below are two charts, the first shows how the heat stack looks graphically, with all of the connected nodes and dependencies.

The second chart shows the provisioned resources:  Networks, subnets, Floating IPs and Cloudify manager VM.

In order to access the Cloudify manager from an external browser I’ve created port forwarding on the Devstack machine, so that when you access port 8080 of the Devstack VM hosted on HP Cloud, you will be forwarded to port 80 on the Cloudify manager provisioned VM (this is specific to to this current example, but this can easily be provisioned on any Openstack cloud). The commands to create the port forwarding are listed below.

In the chart below you can see a screenshot of how the bootstrapped Cloudify manager looks when it’s up and running.