Wie erstellt man einen Satz von VMs mit OpenStack Heat ( Orchestration)?

Heat ist eine OpenStack-Komponente, die für die Orchestrierung zuständig ist. Ihr Zweck ist es, eine Automatisierungsmaschine bereitzustellen und Prozesse zu optimieren. Heat verwendet Vorlagen in der für die Devops-Kultur am häufigsten verwendeten Syntax → yaml. Diese Vorlagen beschreiben die gesamte Infrastruktur, die Sie bereitstellen können. Die bereitgestellte Umgebung wird als Stack bezeichnet und kann aus vielen verschiedenen Ressourcen bestehen.

Sie können Heat-Vorlagen mit python-heatclient in CLI oder mit dem Dashboard (Horizon) im Webbrowser nutzen.

CLI

Zur Installation von python-heatclient führen Sie den Befehl pip aus (es wird dringend empfohlen, eine virtuelle Umgebung zu verwenden):

pip install python-heatclient

Um eine erstellte Vorlage auszuführen und damit einen Stack bereitzustellen, müssen Sie diesen Befehl verwenden:

openstack stack create -t template.yml <stackname>

-t : assign template for deployment

<stackname>: defines a name for the stack

GUI

Melden Sie sich beim Horizon Dashboard an und wählen Sie die Registerkarte Orchestrierung.

../_images/orch1.png

Klicken Sie auf Stacks.

../_images/orch2.png

Navigieren Sie zum rechten Teil des Bildschirms und wählen Sie Stack starten.

../_images/orch3.png

Öffnen Sie das Dropdown-Menü Vorlagenquelle (Template Source) und wählen Sie Datei, Direkteingabe (Direct Input) oder URL.

../_images/orch4.png

Basistemplate

Mit diesem Snippet können Sie eine virtuelle Maschine erstellen, die von einer flüchtigen Festplatte gebootet wird.

heat_template_version: 2015-04-30

resources:
  instance:
    type: OS::Nova::Server
    properties:
      flavor: eo1.xsmall
      image: <image_name>
      networks:
        - network: <network_name_1>
        - network: <network_name_2>
      key_name: <key_name>
      security_groups:
        - allow_ping_ssh_icmp_rdp
        - default

Erklärung

heat_template_version → ausschließlich eine Version der Heat-Vorlage. Jede von ihnen unterscheidet sich in vielerlei Hinsicht (u. a. Unterstützung verschiedener Module, mehr Parameter zur Anpassung usw.)

Ressourcen → für die Bereitstellung bestimmter Komponenten für den Betrieb

Instanz → Name der Ressource (Sie können eine beliebige Angabe machen)

Typ → Definition einer OpenStack-Komponente (eine umfassende Liste finden Sie hier: https://docs.openstack.org/heat/latest/template_guide/openstack.html)

Eigenschaften → auf dieser Registerkarte werden die für die Bereitstellung einer Komponente erforderlichen Parameter angegeben (im Falle einer virtuellen Maschine z. B. Variante, Bildnetzwerke usw.)

Bemerkung

Bitte passen Sie die ausgefüllten Werte für Ihre Projektzwecke an.

Achtung

Prüfen Sie, ob Sie Tabulatoren für die Einrückung verwenden. YAML erlaubt keine Tabulatoren, sondern verlangt Leerzeichen

Erweitertes Template

In diesem Beispiel werden folgende Parameter hinzugefügt: ResourceGroup mit einem Zähler, VM gebootet von Cinder Volume und vordefinierte Ausgaben.

heat_template_version: 2015-04-30

parameters:
    key_name:
        type: string
        label: <key_name>
        description: SSH key to be used for all instances
        default: <key_name>
    image_id:
        type: string
        label: <image_id>
        description: Image to be used. Check all available options in Horizon dashboard or by using openstack image list command.
        default: <image_name>
    private_net_id:
        type: string
        description: ID/Name of private network
        default: <private_network_name>



resources:
        Group_of_VMs:
                type: OS::Heat::ResourceGroup
                properties:
                        count: 4
                        resource_def:
                                type: OS::Nova::Server
                                properties:
                                        name: my_vm%index%
                                        flavor: eo1.xsmall
                                        image: { get_param: image_id }
                                        networks:
                                                - network: { get_param: private_net_id }
                                        key_name: { get_param: key_name }
                                        security_groups:
                                                - allow_ping_ssh_icmp_rdp
                                                - default

        VOL_FAQ:
                type: OS::Cinder::Volume
                properties:
                        name: vol
                        size: 20
                        image : { get_param: image_id }


        With_volume:
                type: OS::Nova::Server
                properties:
                        flavor: eo1.xsmall
                        block_device_mapping: [{"volume_size": 20, "volume_id": { get_resource: VOL_FAQ }, "delete_on_termination": False, "device_name": "/dev/vda" }]
                        networks:
                                 - network: { get_param: private_net_id }
                        key_name: { get_param: key_name }
                        security_groups:
                                 - allow_ping_ssh_icmp_rdp
                                 - default
                        image : { get_param: image_id }

outputs:
        SERVER_DETAILS:
                description: Shows details of all virtual servers.
                value: { get_attr: [ Group_of_VMs, show ] }

Bemerkung

Wie Sie sehen können, müssen Sie zunächst ein echtes Volume (VOL_FAQ) erstellen. Danach können Sie mit der Erstellung einer VM fortfahren (With_volume).

Erklärung

Parameter → eine Lösung zur Bereitstellung von Standardwerten, die Sie später mit {get param: param_name } in Ressourcendefinitionen einfügen können

ResourceGroup → Komponente, die für die wiederholte Bereitstellung verwendet wird, z. B. zwei identische VMs

Count → definiert eine Variable für iterative Operationen

resource_def → Startanweisung für die Definition von Gruppenressourcen

%index% → auf diese Weise können wir dem VM-Namen ganz einfach eine fortlaufende Nummer hinzufügen, wobei die Werte bei 0 beginnen.

block_device_mapping → Eigenschaft zum Definieren eines bootfähigen Cinder Volumes zum Beispiel

Outputs → Zusätzliche Informationen über die eingesetzten Elemente des Stacks. In diesem Fall gibt es eine Ausgabe mit dem Attribut „show“. Sie können diese Art von Informationen mit Hilfe der Openstack Stack-Ausgabeliste untersuchen. Verfügbare Attribute für jede Komponente können hier gefunden werden: https://docs.openstack.org/heat/latest/template_guiopenstack.html.

Bemerkung

Bitte passen Sie die ausgefüllten Werte für Ihre Projektzwecke an.

Dokumentation

https://docs.openstack.org/heat/latest/getting_started/create_a_stack.html

https://docs.openstack.org/heat/rocky/template_guide/hot_guide.html

https://docs.openstack.org/heat/latest/template_guide/hot_spec.html