In diesem Kapitel wird die Bedeutung von Langlebigkeit und Skalierbarkeit für Ihre Cloud-basierten Anwendungen erläutert. In den meisten Fällen bedeutet es wirklich, diese Qualitäten zu erreichen, um Aufgaben wie Skalierung und andere operative Aufgaben zu automatisieren.
Der Orchestrierungsdienst bietet eine Vorlagen-basierte Möglichkeit, eine Cloud-Anwendung zu beschreiben und koordiniert dann die erforderlichen OpenStack-API-Aufrufe, um Cloud-Anwendungen auszuführen. Mit den Vorlagen können Sie die meisten OpenStack-Ressourcentypen wie Instanzen, Netzwerkinformationen, Volumes, Sicherheitsgruppen und sogar Benutzer erstellen. Es bietet auch erweiterte Funktionalität, wie z.B. Hochverfügbarkeit, Instanz Auto-Skalierung und verschachtelte Stacks.
Die OpenStack Orchestration API verwendet die Stapel-, Ressourcen- und Vorlagenkonstrukte.
Sie erstellen Stacks aus Vorlagen, die Ressourcen enthalten. Ressourcen sind eine Abstraktion in der Schablonensprache von HOT (Heat Orchestration Template), mit der Sie verschiedene Cloud-Ressourcen definieren können, indem Sie das Attribut type
setzen.
Beispielsweise können Sie die Orchestrierungs-API verwenden, um zwei Compute-Instanzen zu erstellen, indem Sie einen Stapel erstellen und eine Vorlage an die Orchestrierungs-API übergeben. Diese Vorlage enthält zwei Ressourcen mit dem type
Attribut gesetzt auf OS::Nova::Server
.
Das Beispiel ist natürlich einfach, aber die Flexibilität des Resource-Objekts ermöglicht die Erstellung von Templates, die alle benötigten Cloud-Infrastrukturen enthalten, um eine Applikation auszuführen, wie z.B. Load Balancer, Blockspeichervolumen, Compute-Instanzen, Netzwerktopologie und Sicherheitsrichtlinien.
Bemerkung
Der Orchestrierungsdienst wird in jeder Cloud nicht standardmäßig bereitgestellt. Wenn diese Befehle nicht funktionieren, bedeutet dies, dass die Orchestrierungs-API nicht verfügbar ist. fragen Sie Ihr Support-Team um Hilfe.
In diesem Abschnitt wird die ‚HOT Templating Language‘ vorgestellt <https://docs.openstack.org/heat/latest/template_guide/hot_guide.html> `_, und führt Sie durch einige gemeinsame OpenStack Orchestrierung Anrufe.
In früheren Abschnitten haben Sie mit Ihrem SDK programmgesteuert mit OpenStack interagiert. In diesem Abschnitt verwenden Sie den ‚heat‘ Befehlszeilenclient, um über die Vorlagendateien direkt auf die Orchestrierungs-API zuzugreifen.
Installieren Sie den ‚heat‘ Befehlszeilenclient, indem Sie diesem Handbuch folgen: https://docs.openstack.org/cli-reference/common/cli_install_openstack_command_line_clients.html#install-the-clients
Verwenden Sie diese Anleitung, um die notwendigen Variablen für Ihre Cloud in einer ‚openrc‘ Datei einzurichten: https://docs.openstack.org/cli-reference/common/cli_set_environment_variables_using_openstack_rc.html
Warnung
libcloud unterstützt derzeit keine OpenStack Orchestrierung.
Um die Vorlage-Syntax für die OpenStack Orchestration zu erlernen, wie Sie grundlegende Vorlagen erstellen und ihre Eingaben und Ausgänge erstellen, finden Sie unter ‚Heat Orchestration Template (HOT) Guide‘ <https://docs.openstack.org/heat/latest/template_guide/hot_guide.html> `_.
Stapel erstellen
The hello_faafo Hot template demonstrates how to create a compute instance that builds and runs the Fractal application as an all-in-one installation.
Sie übergeben diese Konfigurationseinstellungen als Parameter:
Die Variante
Ihr ssh Schlüssel Name
Die eindeutige Kennung (UUID) des Abbildes
$ wget https://opendev.org/openstack/api-site/raw/firstapp/samples/heat/hello_faafo.yaml
$ openstack stack create -t hello_faafo.yaml \
--parameter flavor=m1.small\;key_name=test\;image_id=5bbe4073-90c0-4ec9-833c-092459cc4539 hello_faafo
+---------------------+-----------------------------------------------------------------------+
| Field | Value |
+---------------------+-----------------------------------------------------------------------+
| id | 0db2c026-fb9a-4849-b51d-b1df244096cd |
| stack_name | hello_faafo |
| description | A template to bring up the faafo application as an all in one install |
| | |
| creation_time | 2015-04-01T03:20:25 |
| updated_time | None |
| stack_status | CREATE_IN_PROGRESS |
| stack_status_reason | |
+---------------------+-----------------------------------------------------------------------+
Der Stapel erstellt automatisch eine Nova-Instanz wie folgt:
$ nova list
+--------------------------------------+---------------------------------+--------+------------+-------------+------------------+
| ID | Name | Status | Task State | Power State | Networks |
+--------------------------------------+---------------------------------+--------+------------+-------------+------------------+
| 9bdf0e2f-415e-43a0-90ea-63a5faf86cf9 | hello_faafo-server-dwmwhzfxgoor | ACTIVE | - | Running | private=10.0.0.3 |
+--------------------------------------+---------------------------------+--------+------------+-------------+------------------+
Vergewissern Sie sich, dass der Stapel erfolgreich erstellt wurde:
$ openstack stack list
+--------------------------------------+-------------+-----------------+---------------------+--------------+
| ID | Stack Name | Stack Status | Creation Time | Updated Time |
+--------------------------------------+-------------+-----------------+---------------------+--------------+
| 0db2c026-fb9a-4849-b51d-b1df244096cd | hello_faafo | CREATE_COMPLETE | 2015-04-01T03:20:25 | None |
+--------------------------------------+-------------+-----------------+---------------------+--------------+
Der Stapel meldet initial :code: CREATE_IN_PROGRESS Status. Wenn alle Software installiert ist, wechselt der Status zu CREATE_COMPLETE
.
Möglicherweise müssen Sie :command: ‚openstack stack list‘ ein paar Mal ausführen, bevor die Stapelerstellung abgeschlossen ist.
Informationen zum Stapel anzeigen
Erfahren Sie mehr über den Stack:
$ openstack stack show hello_faafo
Die Eigenschaft output zeigt die URL an, über die Sie auf die Fractal-Anwendung zugreifen können. Du kannst SSH in die Instanz bringen.
Stapel entfernen
$ openstack stack delete hello_faafo
Are you sure you want to delete this stack(s) [y/N]?
Überprüfen Sie, ob die Nova-Instanz gelöscht wurde, als der Stapel entfernt wurde:
$ nova list
+----+------+--------+------------+-------------+----------+
| ID | Name | Status | Task State | Power State | Networks |
+----+------+--------+------------+-------------+----------+
+----+------+--------+------------+-------------+----------+
Während dieser Stapel eine einzelne Instanz startet, die die Fractal-Anwendung als All-in-One-Installation aufbaut und ausführt, können Sie sehr komplizierte Vorlagen erstellen, die Dutzende von Instanzen beeinflussen oder Instanzen auf Anfrage hinzufügen und entfernen. Fahren Sie mit dem nächsten Abschnitt fort, um mehr zu erfahren.
Arbeit mit Stapeln: Fortgeschrittene
Mit der Orchestrierungs-API kann die Fractal-Anwendung eine Auto-Skalierungsgruppe für alle Teile der Anwendung erstellen, um dynamisch mehr Rechenressourcen in Zeiten schwerer Auslastung bereitzustellen und auch Compute-Instanzen zu verkleinern, wenn die Nachfrage sinkt.
Um über die automatische Skalierung mit der Orchestrierungs-API zu erfahren, lesen Sie diese Artikel:
https://superuser.openstack.org/articles/simple-auto-scaling-environment-with-heat
https://superuser.openstack.org/articles/understanding-openstack-heat-auto-scaling
Zunächst liegt der Schwerpunkt auf der Skalierung der Worker, weil sie die meisten Ressourcen verbrauchen.
Die Beispielvorlage hängt vom Ceilometer-Projekt ab, das Teil des Telemetrieservice ist <https://wiki.openstack.org/wiki/Telemetry> `_.
Bemerkung
Der Telemetrieservice wird in jeder Cloud nicht standardmäßig bereitgestellt. Wenn die Ceilometer-Befehle nicht funktionieren, funktioniert dieses Beispiel nicht; fragen Sie Ihr Support-Team um Hilfe.
Um zu verstehen, wie die Vorlage funktioniert, verwenden Sie diese Anleitung, um den ‚ceilometer‘ Befehlszeilen-Client zu installieren:
Um die notwendigen Variablen für Ihre Cloud in einer ‚openrc‘ Datei einzurichten, benutzen Sie diese Anleitung:
Der Telemetrie-Service nutzt Meter, um einen bestimmten Aspekt eines Ressourcenverbrauchs zu messen. Der Zähler, an dem wir interessiert sind, ist der cpu_util
Meter.
Der Wert eines Meters wird regelmäßig abgetastet und mit einem Zeitstempel gespeichert.
Diese gespeicherten Proben werden zusammengefasst, um eine Statistik zu erzeugen. Die Statistik, die wir interessieren, ist avg: der Durchschnitt der Proben über einen bestimmten Zeitraum.
Wir sind interessiert, weil der Telemetrie-Service Alarme unterstützt: Ein Alarm wird ausgelöst, wenn unsere durchschnittliche Statistik einen konfigurierten Schwellenwert verletzt. Wenn der Alarm ausgelöst wird, wird eine entsprechende Aktion durchgeführt.
Der Stapel, den wir bauen werden, nutzt das Abfeuern von Alarmen, um die Hinzufügung oder Entfernung von Worker-Instanzen zu kontrollieren.
Um zu überprüfen, ob der Ceilometer installiert ist, liste die bekannten Zähler auf:
$ ceilometer meter-list
Dieser Befehl gibt eine sehr lange Liste von Metern zurück. Sobald ein Meter erstellt ist, wird er niemals weggeworfen!
Starten Sie den Stack mit Auto-Skalierung Worker:
$ wget https://opendev.org/openstack/api-site/raw/firstapp/samples/heat/faafo_autoscaling_workers.yaml
$ openstack stack create -t faafo_autoscaling_workers.yaml \
--parameters flavor=m1.small\;key_name=test\;image_id=5bbe4073-90c0-4ec9-833c-092459cc4539 \
faafo_autoscaling_workers
+---------------------+-----------------------------------------------------------------------+
| Field | Value |
+---------------------+-----------------------------------------------------------------------+
| id | 0db2c026-fb9a-4849-b51d-b1df244096cd |
| stack_name | faafo_autoscaling_workers |
| description | A template to bring up the faafo application as an all in one install |
| | |
| creation_time | 2015-11-17T05:12:06 |
| updated_time | None |
| stack_status | CREATE_IN_PROGRESS |
| stack_status_reason | |
+---------------------+-----------------------------------------------------------------------+
Wie vorher, passieren Sie die Konfigurationseinstellungen als Parameter.
Und wie schon zuvor, der Stapel dauert ein paar Minuten zu bauen!
Warten Sie, bis Sie den Status CREATE_COMPLETE
erreicht haben:
$ openstack stack list
+--------------------------------------+---------------------------+-----------------+---------------------+--------------+
| ID | Stack Name | Stack Status | Creation Time | Updated Time |
+--------------------------------------+---------------------------+-----------------+---------------------+--------------+
| 0db2c026-fb9a-4849-b51d-b1df244096cd | faafo_autoscaling_workers | CREATE_COMPLETE | 2015-11-17T05:12:06 | None |
+--------------------------------------+---------------------------+-----------------+---------------------+--------------+
Führen Sie den Befehl nova list
aus. Diese Vorlage hat drei Instanzen erstellt:
$ nova list
+--------------------------------------+----------+--------+------------+-------------+----------------------+
| ID | Name | Status | Task State | Power State | Networks |
+--------------------------------------+----------+--------+------------+-------------+----------------------+
| 0de89b0a-5bfd-497b-bfa2-c13f6ef7a67e | api | ACTIVE | - | Running | public=115.146.89.75 |
| a6b9b334-e8ba-4c56-ab53-cacfc6f3ad43 | services | ACTIVE | - | Running | public=115.146.89.74 |
| 10122bfb-881b-4122-9955-7e801dfc5a22 | worker | ACTIVE | - | Running | public=115.146.89.80 |
+--------------------------------------+----------+--------+------------+-------------+----------------------+
Beachten Sie, dass die Worker-Instanz Teil eines OS::Heat::AutoScalingGroup
ist.
Vergewissern Sie sich, dass der Stapel zwei Alarme erstellt hat:
$ ceilometer alarm-list
+--------------------------------------+---------------------------------------+-------+----------+---------+------------+--------------------------------+------------------+
| Alarm ID | Name | State | Severity | Enabled | Continuous | Alarm condition | Time constraints |
+--------------------------------------+---------------------------------------+-------+----------+---------+------------+--------------------------------+------------------+
| 2bc8433f-9f8a-4c2c-be88-d841d9de1506 | testFaafo-cpu_alarm_low-torkcwquons4 | ok | low | True | True | cpu_util < 15.0 during 1 x 60s | None |
| 7755cc9a-26f3-4e2b-a9af-a285ec8524da | testFaafo-cpu_alarm_high-qqtbvk36l6nq | ok | low | True | True | cpu_util > 90.0 during 1 x 60s | None |
+--------------------------------------+---------------------------------------+-------+----------+---------+------------+--------------------------------+------------------+
Bemerkung
Wenn entweder Alarm :code:‘unzureichender Daten‘-Zustand ist, ist die Standard-Sampling-Periode des Stapels wahrscheinlich zu niedrig für Ihre Cloud; fragen Sie Ihr Support-Team um Hilfe. Sie können die Periode durch den period
-Parameter des Stacks einstellen, um Ihren Cloud-Anforderungen gerecht zu werden.
Verwenden Sie die Stack-ID, um mehr Informationen über den Stapel zu erhalten:
$ openstack stack show 0db2c026-fb9a-4849-b51d-b1df244096cd
Der Ausgabestand des Stapels enthält zwei Ceilometer-Befehlszeilenabfragen:
ceilometer_sample_query
: zeigt die zum Erstellen der Statistik verwendeten Samples an.
ceilometer_statistics_query
: Zeigt die Statistik an, die verwendet wird, um die Alarme auszulösen.
Diese Abfragen geben einen Einblick in das Verhalten des Stapels.
In einem neuen Terminal-Fenster, SSH in die ‚API-API-Instanz‘. Verwenden Sie den Schlüsselpaarnamen, den Sie als Parameter übergeben haben.
$ ssh -i ~/.ssh/test USERNAME@IP_API
In Ihrer SSH-Sitzung bestätigen Sie, dass keine Fraktale erzeugt wurden:
$ faafo list
201-11-18 11:07:20.464 8079 INFO faafo.client [-] listing all fractals
+------+------------+----------+
| UUID | Dimensions | Filesize |
+------+------------+----------+
+------+------------+----------+
Dann erstellen Sie ein paar große Fraktale:
$ faafo create --height 9999 --width 9999 --tasks 2
Im Terminalfenster, wo Sie den Ceilometer laufen haben, führen Sie :code: ceilometer_sample_query aus, um die Samples zu sehen.
$ ceilometer sample-list -m cpu_util -q metadata.user_metadata.stack=0db2c026-fb9a-4849-b51d-b1df244096cd
+--------------------------------------+----------+-------+----------------+------+---------------------+
| Resource ID | Name | Type | Volume | Unit | Timestamp |
+--------------------------------------+----------+-------+----------------+------+---------------------+
| 10122bfb-881b-4122-9955-7e801dfc5a22 | cpu_util | gauge | 100.847457627 | % | 2015-11-18T00:15:50 |
| 10122bfb-881b-4122-9955-7e801dfc5a22 | cpu_util | gauge | 82.4754098361 | % | 2015-11-18T00:14:51 |
| 10122bfb-881b-4122-9955-7e801dfc5a22 | cpu_util | gauge | 0.45 | % | 2015-11-18T00:13:50 |
| 10122bfb-881b-4122-9955-7e801dfc5a22 | cpu_util | gauge | 0.466666666667 | % | 2015-11-18T00:12:50 |
+--------------------------------------+----------+-------+----------------+------+---------------------+
Die CPU-Auslastung über die Worker steigt, wenn die Worker die Fraktale erschaffen.
Führen Sie den Befehl ceilometer_statistics_query
aus, um die abgeleiteten Statistiken zu sehen.
$ ceilometer statistics -m cpu_util -q metadata.user_metadata.stack=0db2c026-fb9a-4849-b51d-b1df244096cd -p 60 -a avg
+--------+---------------------+---------------------+----------------+----------+---------------------+---------------------+
| Period | Period Start | Period End | Avg | Duration | Duration Start | Duration End |
+--------+---------------------+---------------------+----------------+----------+---------------------+---------------------+
| 60 | 2015-11-18T00:12:45 | 2015-11-18T00:13:45 | 0.466666666667 | 0.0 | 2015-11-18T00:12:50 | 2015-11-18T00:12:50 |
| 60 | 2015-11-18T00:13:45 | 2015-11-18T00:14:45 | 0.45 | 0.0 | 2015-11-18T00:13:50 | 2015-11-18T00:13:50 |
| 60 | 2015-11-18T00:14:45 | 2015-11-18T00:15:45 | 82.4754098361 | 0.0 | 2015-11-18T00:14:51 | 2015-11-18T00:14:51 |
| 60 | 2015-11-18T00:15:45 | 2015-11-18T00:16:45 | 100.847457627 | 0.0 | 2015-11-18T00:15:50 | 2015-11-18T00:15:50 |
+--------+---------------------+---------------------+----------------+----------+---------------------+---------------------+
Bemerkung
Die Muster und die Statistiken sind in umgekehrter Reihenfolge aufgeführt!
Sehen Sie den Zustand der Alarme, die von der Vorlage eingerichtet wurden:
$ ceilometer alarm-list
+--------------------------------------+---------------------------------------+-------+----------+---------+------------+--------------------------------+------------------+
| Alarm ID | Name | State | Severity | Enabled | Continuous | Alarm condition | Time constraints |
+--------------------------------------+---------------------------------------+-------+----------+---------+------------+--------------------------------+------------------+
| 56c3022e-f23c-49ad-bf59-16a6875f3bdf | testFaafo-cpu_alarm_low-miw5tmomewot | ok | low | True | True | cpu_util < 15.0 during 1 x 60s | None |
| 70ff7b00-d56d-4a43-bbb2-e18952ae6605 | testFaafo-cpu_alarm_high-ffhsmylfzx43 | alarm | low | True | True | cpu_util > 90.0 during 1 x 60s | None |
+--------------------------------------+---------------------------------------+-------+----------+---------+------------+--------------------------------+------------------+
Führen Sie den Befehl nova list
aus, um zu bestätigen, dass der OS::Heat::AutoScalingGroup
mehr Instanzen erstellt hat:
$ nova list
+--------------------------------------+----------+--------+------------+-------------+----------------------+
| ID | Name | Status | Task State | Power State | Networks |
+--------------------------------------+----------+--------+------------+-------------+----------------------+
| 0de89b0a-5bfd-497b-bfa2-c13f6ef7a67e | api | ACTIVE | - | Running | public=115.146.89.96 |
| a6b9b334-e8ba-4c56-ab53-cacfc6f3ad43 | services | ACTIVE | - | Running | public=115.146.89.95 |
| 10122bfb-881b-4122-9955-7e801dfc5a22 | worker | ACTIVE | - | Running | public=115.146.89.97 |
| 31e7c020-c37c-4311-816b-be8afcaef8fa | worker | ACTIVE | - | Running | public=115.146.89.99 |
| 3fff2489-488c-4458-99f1-0cc50363ae33 | worker | ACTIVE | - | Running | public=115.146.89.98 |
+--------------------------------------+----------+--------+------------+-------------+----------------------+
Warten Sie jetzt, bis alle Fraktale erzeugt sind und die Instanzen für einige Zeit im Leerlauf sind.
Führen Sie den Befehl nova list
aus, um zu bestätigen, dass der OS::Heat::AutoScalingGroup
die nicht benötigten Instanzen entfernt hat:
$ nova list
+--------------------------------------+----------+--------+------------+-------------+----------------------+
| ID | Name | Status | Task State | Power State | Networks |
+--------------------------------------+----------+--------+------------+-------------+----------------------+
| 0de89b0a-5bfd-497b-bfa2-c13f6ef7a67e | api | ACTIVE | - | Running | public=115.146.89.96 |
| a6b9b334-e8ba-4c56-ab53-cacfc6f3ad43 | services | ACTIVE | - | Running | public=115.146.89.95 |
| 3fff2489-488c-4458-99f1-0cc50363ae33 | worker | ACTIVE | - | Running | public=115.146.89.98 |
+--------------------------------------+----------+--------+------------+-------------+----------------------+
Bemerkung
Der OS::Heat::AutoScalingGroup
entfernt Instanzen in der Erstellungsreihenfolge. Also die Worker-Instanz, die zuerst erstellt wurde, ist die erste Instanz, die entfernt werden soll.
Im Ausgabebereich des Stacks können Sie diese Web-API-Aufrufe ausführen:
scale__workers_up_url
: Ein Post zu dieser URL wird Worker-Instanzen hinzufügen.
scale_workers_down_url
: Ein Post zu dieser URL entfernt Worker-Instanzen.
Dies zeigt, wie die Ceilometer Alarme Instanzen hinzufügen und entfernen. Um sie zu benutzen:
$ curl -X POST "Put the very long url from the template outputs section between these quotes"
Zur Wiederholung:
Der Auto-Skalierungsstapel richtet eine API-Instanz, eine Dienstinstanz und eine Auto-Skalierungsgruppe mit einer einzelnen Worker-Instanz ein. Es setzt auch Ceilometer-Alarme ein, die Worker-Instanzen der Auto-Skalierungsgruppe hinzufügen, wenn sie unter Last ist, und entfernt Instanzen, wenn die Gruppe im Leerlauf ist. Um dies zu tun, die Alarme Posten zu URLs.
In dieser Vorlage verwenden die Alarme Metadaten, die an jede Worker-Instanz angehängt sind. Die Metadaten befinden sich im metering.stack = stack_id
Format.
Das Präfix ist ‚metering‘. Zum Beispiel metering.some_name.
$ nova show <instance_id>
...
| metadata | {"metering.some_name": "some_value"} |
...
Sie können Samples zusammenfassen und Statistiken über alle Instanzen mit den Metadaten ‚metering.some_name‘ berechnen, die some_value haben, indem Sie eine Abfrage des Formulars verwenden:
-q metadata.user_metadata.some_name=some_value
Beispielsweise:
$ ceilometer sample-list -m cpu_util -q metadata.user_metadata.some_name=some_value
$ ceilometer statistics -m cpu_util -q metadata.user_metadata.some_name=some_value -p 6
Die Alarme haben die Form:
matching_metadata: {'metadata.user_metadata.stack': {get_param: "OS::stack_id"}}
Verbringen Sie einige Zeit mit dem Stack und der Fractal App zu sehen, wie es funktioniert.
Bemerkung
Die Nachrichtenwarteschlange kann eine Weile dauern, um zu bemerken, dass Worker-Instanzen gestorben sind.
Sie sollten jetzt ziemlich sicher sein, mit dem Orchestrationsdienst zu arbeiten. Um die Anrufe zu sehen, die wir nicht abgedeckt haben und mehr, sehen Sie die Datendokumentation Ihres SDK. Oder versuchen Sie einen dieser Schritte im Tutorial:
Vernetzung: Learn about complex networking.
Beratung für Entwickler, die neu in Betrieb sind: Get advice about operations.
Werde verrückt: Learn some crazy things that you might not think to do ;)
Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.