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.

Klicken Sie auf Stacks.

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

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

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