Anfangen

Anfangen

Wer sollte diesen Leitfaden lesen

Dieser Leitfaden ist für erfahrene Softwareentwickler, die Anwendungen auf OpenStack-Clouds einsetzen möchten.

Wenn Sie mit OpenStack vertraut sind, aber keine Cloud-Anwendung im Allgemeinen oder eine OpenStack-Anwendung erstellt haben, informiert Sie dieser Abschnitt darüber, wie Sie mit OpenStack-Komponenten programmieren können.

Was Sie lernen werden

Die Bereitstellung von Anwendungen in einer Cloud-Umgebung kann sich sehr von der Bereitstellung in einer herkömmlichen IT-Umgebung unterscheiden. Dieser Leitfaden lehrt Sie, wie Sie Anwendungen auf OpenStack bereitstellen und einige bewährte Methoden für die Entwicklung von Cloud-Anwendungen.

Ein allgemeiner Überblick

Dieses Tutorial zeigt zwei Anwendungen. Die erste Anwendung ist ein einfacher Fraktalgenerator, der mathematische Gleichungen verwendet, um schöne `Fraktalbilder zu erzeugen <http://en.wikipedia.org/wiki/Fractal> `_. Wir zeigen Ihnen diese Anwendung in ihrer Gesamtheit, damit Sie sie mit einer zweiten, robusteren Anwendung vergleichen können.

Die zweite Anwendung ist eine OpenStack-Anwendung, die es Ihnen ermöglicht:

  • Erstellen und Löschen von Berechnungsressourcen. Diese Ressourcen sind virtuelle Maschineninstanzen, in denen die Fractals-Anwendung läuft.

  • Machen Sie Cloud-bezogene Architekturentscheidungen wie das Drehen von Funktionen in Mikro-Services und modularisieren sie.

  • Skalieren Sie verfügbare Ressourcen auf und ab.

  • Verwenden Sie Objekt- und Blockspeicher für Datei- und Datenbankpersistenz.

  • Verwenden Sie Orchestrierungsdienste, um sich automatisch an die Umgebung anzupassen.

  • Anpassung der Vernetzung für bessere Leistung und Segregation.

  • Entdecken und bewerben Sie erweiterte OpenStack Cloud-Funktionen.

Wählen Sie Ihr OpenStack SDK

Jeder mit einem Programmierhintergrund kann den Code in diesem Handbuch leicht lesen. Obwohl diese Anleitung auf ein bestimmtes SDK fokussiert ist, können Sie mit der OpenStack Cloud andere Sprachen und Toolkits verwenden:

OpenStack SDKs

Sprache

Name

Beschreibung

URL

Python

OpenStack SDK

Offizielle Python-basierte Bibliothek für OpenStack.

https://docs.openstack.org/openstacksdk/latest/

Python

Libcloud

Eine Python-basierte Bibliothek, die die Apache-Stiftung verwaltet. Verwenden Sie es, um mit mehreren Cloud-Typen zu arbeiten.

https://libcloud.readthedocs.org/en/latest/compute/drivers/openstack.html

Python

Shade

Eine Python-basierte Bibliothek, die von OpenStack Infra entwickelt wurde. Verwenden Sie es, um mehrere OpenStack-Clouds zu betreiben.

https://docs.openstack.org/infra/shade/

Java

`jClouds <https://jclouds.apache.org> `_

Eine Java-basierte Bibliothek, die die Apache Foundation verwaltet. Verwenden Sie es, um mit mehreren Cloud-Typen zu arbeiten.

https://jclouds.apache.org/guides/openstack/

Rubin

`fog <http://fog.io/> `_

Ein Ruby-basiertes SDK. Verwenden Sie es, um mit mehreren Clouds zu arbeiten.

https://github.com/fog/fog-openstack/blob/master/docs/getting_started.md

node.js

`pkgcloud <https://github.com/pkgcloud/pkgcloud> `_

Ein Node.js-basiertes SDK. Verwenden Sie es,um mit mehreren Clouds zu arbeiten.

https://github.com/pkgcloud/pkgcloud/tree/master/docs/providers/openstack

PHP

`php-opencloud <http://php-opencloud.com/> `_

Eine PHP-basierte Bibliothek. Verwenden Sie es, um PHP-Code zu schreiben, der mit OpenStack-Clouds arbeitet.

http://php-opencloud.readthedocs.org/de/latest/getting-started-with-openstack.html

.NET Framework

OpenStack SDK für Microsoft .NET

Eine .NET-basierte Bibliothek. Verwenden Sie es, um C ++ oder C # -Code für Microsoft-Anwendungen zu schreiben.

https://www.nuget.org/packages/openstack.net

Go

`gophercloud <https://github.com/gophercloud/gophercloud> `_

Ein Go-basiertes SDK. Verwenden Sie es, um Golang-Code zu schreiben, der mit OpenStack-Clouds arbeitet.

http://gophercloud.io/

Eine Liste der verfügbaren SDKs finden Sie unter ‚Software Development Kits‘ <https://wiki.openstack.org/wiki/SDKs> `_.

Andere Versionen dieses Handbuchs zeigen Ihnen, wie Sie die anderen SDKs und Sprachen verwenden, um diese Aufgaben abzuschließen. Wenn Sie ein Entwickler für ein anderes Toolkit sind, dass Sie diesen Leitfaden einschließen möchten, fühlen Sie sich frei, Code-Snippets einzureichen. Für weitere Informationen wenden Sie sich bitte an `OpenStack Documentation Team <https://wiki.openstack.org/Documentation> `_ Mitglieder.

Was Sie brauchen

Wir gehen davon aus, dass Sie bereits auf eine OpenStack Cloud zugreifen können. Sie müssen ein Projekt haben, auch bekannt als Tenant, mit einem Mindestkontingent von sechs Instanzen. Da die Fractals-Anwendung in Ubuntu-, Debian-, Fedora-basierten und openSUSE-basierten Distributionen ausgeführt wird, müssen Sie Instanzen erstellen, die eines dieser Betriebssysteme verwenden.

Um mit der Cloud zu interagieren, müssen Sie aber auch haben

`eine aktuelle Version der shade-Bibliothek installiert <https://docs.openstack.org/shade/latest/install/index.html> `_.

Bemerkung

Bevor Sie fortfahren, installieren Sie die neueste Version von shade.

Erhalten Sie die folgenden Informationen von Ihrem Cloud-Anbieter:

  • Auth URL

  • Benutzername

  • Passwort

  • Projekt-ID oder Name (Projekte sind auch als Tenant bekannt)

  • Cloud Region

Sie können die OpenStack RC-Datei auch aus dem OpenStack Horizon Dashboard herunterladen. Melden Sie sich im Dashboard an und klicken Sie auf :guilabel: Project-> Access & Security-> API Access-> Download OpenStack RC Datei. Wenn Sie diese Methode verwenden, beachten Sie, dass die ‚auth URL‘ den Pfad nicht enthält. Zum Beispiel, wenn Ihre: Datei: openrc.sh Datei zeigt:

export OS_AUTH_URL=http://controller:5000/v2.0

Die aktuelle Auth-URL lautet:

http://controller:5000

Wie Sie mit OpenStack interagieren

In diesem Tutorial interagieren Sie mit Ihrer OpenStack Cloud durch das SDK, das Sie in ‚Wählen Sie Ihr OpenStack SDK‘ gewählt haben. Diese Anleitung setzt voraus, dass Sie wissen, wie Sie Code-Snippets in Ihrer Sprache der Wahl ausführen können.

Bemerkung

Weil das Tutorial das :code: conn Objekt wiederverwendet, stellen Sie sicher, dass Sie immer eins zur Hand haben.

Verwenden Sie Ihre Anmeldeinformationen oben, um den Namen des Cloud-Providers, den Benutzernamen, das Kennwort, den Projektnamen und den Regionalnamen in der Datei anzugeben: file: ~/.config/openstack/clouds.yml.

clouds:
    myfavoriteopenstack:
        auth:
            auth_url: https://controller:5000/
            username: $YOUR_USERNAME
            password: $YOUR_PASSWORD
            project_name: $YOUR_PROJECT
        region_name: $REGION

Bemerkung

If you do use a public cloud known by shade, you can avoid specifying auth_url: and instead specify profile: $PROVIDER_NAME in the clouds.yml file.

Um shade mit einem Profil zu konfigurieren, verwenden Sie Ihre Anmeldeinformationen oben, um den Namen des Cloud-Providers, den Benutzernamen, das Kennwort, den Projektnamen und den Namen der Region in der Datei anzugeben: file: ~/.config/openstack/clouds.yml.

my-provider:
    profile: $PROVIDER_NAME
    auth:
        username: $YOUR_USERNAME
        password: $YOUR_PASSWORD
        project_name: $YOUR_PROJECT
    region_name: $REGION

See configure shade, to configure your cloud using a profile.

from shade import *

simple_logging(debug=True)
conn = openstack_cloud(cloud='myfavoriteopenstack')

Variante und Abbilder

Um Ihre Anwendung auszuführen, müssen Sie eine Instanz starten. Diese Instanz dient als virtuelle Maschine.

Um eine Instanz zu starten, wählen Sie eine Variante und ein Abbild. Die Variante repräsentiert die Größe der Instanz, einschließlich der Anzahl der CPUs und der Menge an RAM und Speicherplatz. Ein Abbild ist eine vorbereitete OS-Installation, von der aus Sie Ihre Instanz klonen. Wenn Sie Instanzen in einer öffentlichen Cloud booten, können größere Varianten teurer sein als kleinere in Bezug auf Ressourcen und monetäre Kosten.

Um die Abbilder aufzurufen, die in Ihrer Cloud verfügbar sind, führen Sie einige API-Aufrufe aus:

images = conn.list_images()
for image in images:
    print(image)

Dieser Code gibt die Ausgabe wie folgt zurück:

checksum: 750a56555d4ec7303f5dc33b007ff632
container_format: bare
created_at: '2014-07-14T19:02:15Z'
direct_url:
rbd://7e14670e-a6f8-445b-b632-4b79bafc4781/masseffect-images/b4efbc2a-6130-4f2e-b436-55a618c4de20/snap
disk_format: raw
file: /v2/images/b4efbc2a-6130-4f2e-b436-55a618c4de20/file
id: b4efbc2a-6130-4f2e-b436-55a618c4de20
min_disk: 10
min_ram: 1024
name: Debian-7.0-Wheezy
owner: 0bacd8121bb548698f340455b38bf561
protected: false
schema: /v2/schemas/image
size: 5242880000
status: active
tags: []
updated_at: '2014-10-15T22:42:52Z'
visibility: public

Sie können auch Informationen über verfügbare Varianten erhalten:

flavors =  conn.list_flavors()
for flavor in flavors:
    print(flavor)

Dieser Code gibt die Ausgabe wie folgt zurück:

HUMAN_ID: true
NAME_ATTR: name
OS-FLV-DISABLED:disabled: false
OS-FLV-EXT-DATA:ephemeral: 0
disk: 80
ephemeral: 0
human_id: supersonic
id: '200'
is_public: true
links:
-   href:
    https://compute.dream.io:8774/v2/5d013ac5962749a49af7ff18c2fb228c/flavors/200
    rel: self
-   href:
    https://compute.dream.io:8774/5d013ac5962749a49af7ff18c2fb228c/flavors/200
    rel: bookmark
name: supersonic
os-flavor-access:is_public: true
ram: 2048
swap: ''
vcpus: 1

Ihre Abbilder und Varianten werden natürlich anders sein.

Wählen Sie ein Abbild und eine Variante für Ihre Instanz. Sie benötigen ca. 1GB RAM, 1 CPU und eine 1GB Festplatte. Dieses Beispiel nutzt das Ubuntu-Abbild mit einer kleinen Variante, was eine sichere Wahl ist. In nachfolgenden Tutorialabschnitten in diesem Handbuch müssen Sie die Abbild- und Varianten-IDs entsprechend dem Abbild und der Variante ändern, die Sie gewählt haben.

Wenn das Abbild, das Sie wünschen, in Ihrer Cloud nicht verfügbar ist, können Sie in der Regel einen von den Richtlinieneinstellungen Ihrer Cloud hochladen. Informationen zum Hochladen von Abbildern finden Sie unter ‚Abbilder abrufen‘ <https://docs.openstack.org/image-guide/obtain-images.html> `_.

Setzen Sie die Abbild- und Größenvariablen auf entsprechende Werte für Ihre Cloud. Wir werden diese Variablen in späteren Abschnitten verwenden.

Zuerst fragen Sie die Verbindung nach einem bestimmten Abbild, indem Sie die ID des Abbildes verwenden, das Sie im vorherigen Abschnitt ausgewählt haben:

image_id = 'c55094e9-699c-4da9-95b4-2e2e75f4c66e'
image = conn.get_image(image_id)
print(image)

Dieser Code gibt die Ausgabe wie folgt zurück:

checksum: da578dd59289a35a0ac7744a0bd85cf5
container_format: bare
created_at: '2014-10-27T22:05:37Z'
direct_url:
rbd://7e14670e-a6f8-445b-b632-4b79bafc4781/masseffect-images/c55094e9-699c-4da9-95b4-2e2e75f4c66e/snap
disk_format: raw
file: /v2/images/c55094e9-699c-4da9-95b4-2e2e75f4c66e/file
id: c55094e9-699c-4da9-95b4-2e2e75f4c66e
min_disk: 0
min_ram: 0
name: Ubuntu-14.04-Trusty
owner: 0bacd8121bb548698f340455b38bf561
protected: false
schema: /v2/schemas/image
size: 10737418240
status: active
tags: []
updated_at: '2014-10-27T22:08:55Z'
visibility: public

Als nächstes sagen Sie dem Skript, welche Variante Sie verwenden möchten:

Geben Sie die Varianten-ID an, die Sie verwenden möchten.

flavor_id = '100'
flavor = conn.get_flavor(flavor_id)
print(flavor)

Dieser Code gibt die Ausgabe wie folgt zurück:

HUMAN_ID: true
NAME_ATTR: name
OS-FLV-DISABLED:disabled: false
OS-FLV-EXT-DATA:ephemeral: 0
disk: 80
ephemeral: 0
human_id: subsonic
id: '100'
is_public: true
links:
-   href:
    https://compute.dream.io:8774/v2/5d013ac5962749a49af7ff18c2fb228c/flavors/100
    rel: self
-   href:
    https://compute.dream.io:8774/5d013ac5962749a49af7ff18c2fb228c/flavors/100
    rel: bookmark
name: subsonic
os-flavor-access:is_public: true
ram: 1024
swap: ''
vcpus: 1

Jetzt können Sie die Instanz starten.

Starten Sie eine Instanz

Verwenden Sie Ihr ausgewähltes Abbild und Ihre Variante, um eine Instanz zu erstellen.

Bemerkung

Das folgende Beispiel-Erstellungsbeispiel geht davon aus, dass Sie ein Ein-Tenant-Netzwerk haben. Wenn Sie die ‚Exception: 400 Bad Request Multiple possible networks found, use a Network ID to be more specific‘ Fehlermeldung bekommen, haben Sie mehrere Tenant-Netzwerke. Sie müssen dem Aufruf, der den Server erstellt, einen ‚Netzwerk‘ -Parameter hinzufügen. Siehe :doc: /appendix für Details.

Erstellen Sie die Instanz.

Bemerkung

Ihr SDK könnte eine Instanz einen ‚Knoten‘ oder ‚Server‘ aufrufen.

instance_name = 'testing'
testing_instance = conn.create_server(wait=True, auto_ip=True,
    name=instance_name,
    image=image_id,
    flavor=flavor_id)
print(testing_instance)

Wenn Sie vorhandene Instanzen auflisten:

instances = conn.list_servers()
for instance in instances:
    print(instance)

Die neue Instanz erscheint.

HUMAN_ID: true
 NAME_ATTR: name
 OS-DCF:diskConfig: MANUAL
 OS-EXT-AZ:availability_zone: iad-1
 OS-EXT-STS:power_state: 1
 OS-EXT-STS:task_state: null
 OS-EXT-STS:vm_state: active
 OS-SRV-USG:launched_at: '2015-07-20T20:31:10.000000'
 OS-SRV-USG:terminated_at: null
 accessIPv4: ''
 accessIPv6: ''
 addresses:
     private-network:
     -   OS-EXT-IPS-MAC:mac_addr: fa:16:3e:60:f5:cd
         OS-EXT-IPS:type: fixed
         addr: 2607:f298:6050:4e14:f816:3eff:fe60:f5cd
         version: 6
     -   OS-EXT-IPS-MAC:mac_addr: fa:16:3e:60:f5:cd
         OS-EXT-IPS:type: fixed
         addr: 10.10.10.14
         version: 4
 config_drive: ''
 created: '2015-07-20T20:30:23Z'
 flavor:
     id: '100'
     links:
     -   href:
         https://compute.dream.io:8774/5d013ac5962749a49af7ff18c2fb228c/flavors/100
         rel: bookmark
 hostId: f71865b497e6fa71063e292b11846eb64b5a41cd5c00fbb7465b6a48
 human_id: testing
 id: 67ecebdc-daff-4d84-bd04-bc76c67b48ec
 image:
     id: c55094e9-699c-4da9-95b4-2e2e75f4c66e
     links:
     -   href:
         https://compute.dream.io:8774/5d013ac5962749a49af7ff18c2fb228c/images/c55094e9-699c-4da9-95b4-2e2e75f4c66e
         rel: bookmark
 key_name: null
 links:
 -   href:
     https://compute.dream.io:8774/v2/5d013ac5962749a49af7ff18c2fb228c/servers/67ecebdc-daff-4d84-bd04-bc76c67b48ec
     rel: self
 -   href:
     https://compute.dream.io:8774/5d013ac5962749a49af7ff18c2fb228c/servers/67ecebdc-daff-4d84-bd04-bc76c67b48ec
     rel: bookmark
 metadata: {}
 name: testing
 networks:
     private-network:
     - 2607:f298:6050:4e14:f816:3eff:fe60:f5cd
     - 10.10.10.14
 os-extended-volumes:volumes_attached: []
 progress: 0
 security_groups:
 -   name: default
 status: ACTIVE
 tenant_id: 5d013ac5962749a49af7ff18c2fb228c
 updated: '2015-07-20T20:31:10Z'
 user_id: bfd3dbf1c8a242cd90884408de547bb9

Bevor Sie fortfahren, müssen Sie noch etwas machen.

Zerstören einer Instanz

Cloud-Ressourcen, wie z.B. Instanzen, die Sie nicht mehr verwenden, können Geld kosten. Um unerwartete Ausgaben zu vermeiden, zerstören Sie die Cloud-Ressourcen.

conn.delete_server(name_or_id=instance_name)

Wenn Sie die Instanzen erneut auflisten, verschwindet die Instanz.

Lassen Sie Ihre Shell offen, um sie für eine weitere Instanz-Installation in diesem Abschnitt zu verwenden.

Bereitstellen der Anwendung auf eine neue Instanz

Nun, da Sie wissen, wie Sie Instanzen erstellen und löschen, können Sie die Beispielanwendung bereitstellen. Die Instanz, die Sie für die Anwendung erstellen, ähnelt der ersten Instanz, die Sie erstellt haben, aber dieses Mal stellen wir Ihnen einige zusätzliche Konzepte vor.

Bemerkung

Internet-Konnektivität von Ihrer Cloud-Instanz ist erforderlich, um die Anwendung herunterzuladen.

Wenn Sie eine Instanz für die Anwendung erstellen, möchten Sie es ein bisschen mehr Informationen geben als Sie an die bloße Instanz geliefert haben, die Sie gerade erstellt und gelöscht haben. Wir werden in späteren Abschnitten näher eingehen, aber jetzt schaffen wir einfach die folgenden Ressourcen, damit Sie sie der Instanz zuführen können:

  • Ein Schlüsselpaar. Um auf Ihre Instanz zuzugreifen, müssen Sie einen SSH Public Key in OpenStack importieren, um ein Schlüsselpaar zu erstellen. OpenStack installiert dieses Schlüsselpaar auf der neuen Instanz. Normalerweise wird Ihr öffentlicher Schlüssel geschrieben an :code: .ssh/id_rsa.pub. Wenn Sie keine SSH-Public-Key-Datei haben, folgen Sie diesen Anweisungen <https://help.github.com/articles/generating-ssh- keys/> _ zuerst Wir werden diese Anleitung ausführlich behandeln in :doc:/introduction`.

Im folgenden Beispiel setzen Sie pub_key_file an den Speicherort Ihrer öffentlichen SSH-Schlüsseldatei.

print('Checking for existing SSH keypair...')
keypair_name = 'demokey'
pub_key_file = '/home/username/.ssh/id_rsa.pub'

if conn.search_keypairs(keypair_name):
    print('Keypair already exists. Skipping import.')
else:
    print('Adding keypair...')
    conn.create_keypair(keypair_name, open(pub_key_file, 'r').read().strip())

for keypair in conn.list_keypairs():
    print(keypair)

  • Netzwerkzugang. Standardmäßig filtert OpenStack den gesamten Traffic. Sie müssen eine Sicherheitsgruppe erstellen und diese auf Ihre Instanz anwenden. Die Sicherheitsgruppe ermöglicht HTTP- und SSH-Zugriff. Wir werden ausführlicher in Einführung in die Architektur der Fraktale.

print('Checking for existing security groups...')
sec_group_name = 'all-in-one'
if conn.search_security_groups(sec_group_name):
    print('Security group already exists. Skipping creation.')
else:
    print('Creating security group.')
    conn.create_security_group(sec_group_name, 'network access for all-in-one application.')
    conn.create_security_group_rule(sec_group_name, 80, 80, 'TCP')
    conn.create_security_group_rule(sec_group_name, 22, 22, 'TCP')

conn.search_security_groups(sec_group_name)

  • Userdata. Während der Instanzerstellung können Sie Userdata OpenStack zur Verfügung stellen, um Instanzen nach dem Booten zu konfigurieren. Der Cloud-init-Dienst wendet die Userdata auf eine Instanz an. Sie müssen den Cloud-Init-Service auf Ihrem gewählten Abbild vorinstallieren. Wir werden ausführlicher in /introductiong.

ex_userdata = '''#!/usr/bin/env bash

curl -L -s https://opendev.org/openstack/faafo/raw/contrib/install.sh | bash -s -- \
-i faafo -i messaging -r api -r worker -r demo
'''

Jetzt können Sie die Instanz booten und konfigurieren.

Starten und konfigurieren Sie eine Instanz

Verwenden Sie das Abbild, die Variante, das Schlüsselpaar und die Userdata, um eine Instanz zu erstellen. Nachdem Sie die Instanz angefordert haben, warten Sie, bis sie gebaut wird.

Das shade-Framework kann eine Floating-IP schnell auswählen und zuordnen

instance_name = 'all-in-one'
testing_instance = conn.create_server(wait=True, auto_ip=False,
    name=instance_name,
    image=image_id,
    flavor=flavor_id,
    key_name=keypair_name,
    security_groups=[sec_group_name],
    userdata=ex_userdata)

Wenn die Instanz startet, weist die Variable ‚ex_userdata‘ die Instanz an, die Fractals-Anwendung bereitzustellen.

Verknüpfen Sie eine Floating-IP für externe Konnektivität

Wir decken die Vernetzung im Detail ab in Vernetzung.

Um die Anwendung zu sehen, müssen Sie wissen, wo sie sie suchen. Standardmäßig verfügt Ihre Instanz über einen ausgehenden Netzwerkzugriff. Um Ihre Instanz aus dem Internet zu erreichen, benötigen Sie eine IP-Adresse. In manchen Fällen ist Ihre Instanz standardmäßig mit einer öffentlich routbaren IP-Adresse versorgt. In diesem Fall sehen Sie eine IP-Adresse, die unter public_ips oder private_ips aufgeführt ist, wenn Sie die Instanzen auflisten. Wenn nicht, müssen Sie eine Floating-IP-Adresse an Ihre Instanz erstellen und anhängen.

f_ip = conn.available_floating_ip()

Führen Sie das Skript aus, um die Bereitstellung zu starten.

Zugriff auf die Anwendung

Das Anlegen von Anwendungsdaten und die Konfiguration an die Instanz kann einige Zeit in Anspruch nehmen. Denken Sie daran, eine Tasse Kaffee zu genießen, während Sie warten. Nachdem die Anwendung installiert ist, können Sie Ihren bevorzugten Browser verwenden, um die fantastische grafische Oberfläche unter folgendem Link zu besuchen.

print('The Fractals app will be deployed to http://%s' % f_ip['floating_ip_address'] )

Bemerkung

Wenn Sie keine Floating-IP-Adressen verwenden, ersetzen Sie gegebenenfalls eine andere IP-Adresse.

screenshot of the webinterface

Nächste Schritte

Machen Sie sich keine Sorgen, wenn Ihnen diese Konzepte noch nicht ganz klar sind. In Einführung in die Architektur der Fraktale, erforschen wir diese Konzepte genauer.

  • / scaling_out: Erfahren Sie, wie Sie Ihre Anwendung skalieren können.

  • / durability: Erfahren Sie, wie Sie Object Storage verwenden, um Ihre Anwendung langlebig zu machen.

  • Blockieren Sie Speicherplatz: Migrate the database to block storage, or use the database-as-a-service component.

  • : doc: / orchestration: Automatisches Orchestrieren Ihrer Applikation.

  • 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 ;)

Komplettes Codebeispiel

Die folgende Datei enthält den gesamten Code aus diesem Abschnitt des Tutorials. Mit diesem umfassenden Code-Beispiel können Sie den Code als einzelnes Skript anzeigen und ausführen.

Bevor Sie dieses Skript ausführen, bestätigen Sie, dass Sie Ihre Authentifizierungsinformationen, die Varianten-ID und die Image-ID festgelegt haben.

#step-1
from shade import *

simple_logging(debug=True)
conn = openstack_cloud(cloud='myfavoriteopenstack')

#step-2
images = conn.list_images()
for image in images:
    print(image)

#step-3
flavors =  conn.list_flavors()
for flavor in flavors:
    print(flavor)

#step-4
image_id = 'c55094e9-699c-4da9-95b4-2e2e75f4c66e'
image = conn.get_image(image_id)
print(image)

#step-5
flavor_id = '100'
flavor = conn.get_flavor(flavor_id)
print(flavor)

#step-6
instance_name = 'testing'
testing_instance = conn.create_server(wait=True, auto_ip=True,
    name=instance_name,
    image=image_id,
    flavor=flavor_id)
print(testing_instance)

#step-7
instances = conn.list_servers()
for instance in instances:
    print(instance)

#step-8
conn.delete_server(name_or_id=instance_name)

#step-9
print('Checking for existing SSH keypair...')
keypair_name = 'demokey'
pub_key_file = '/home/username/.ssh/id_rsa.pub'

if conn.search_keypairs(keypair_name):
    print('Keypair already exists. Skipping import.')
else:
    print('Adding keypair...')
    conn.create_keypair(keypair_name, open(pub_key_file, 'r').read().strip())

for keypair in conn.list_keypairs():
    print(keypair)

#step-10
print('Checking for existing security groups...')
sec_group_name = 'all-in-one'
if conn.search_security_groups(sec_group_name):
    print('Security group already exists. Skipping creation.')
else:
    print('Creating security group.')
    conn.create_security_group(sec_group_name, 'network access for all-in-one application.')
    conn.create_security_group_rule(sec_group_name, 80, 80, 'TCP')
    conn.create_security_group_rule(sec_group_name, 22, 22, 'TCP')

conn.search_security_groups(sec_group_name)

#step-11
ex_userdata = '''#!/usr/bin/env bash

curl -L -s https://opendev.org/openstack/faafo/raw/contrib/install.sh | bash -s -- \
-i faafo -i messaging -r api -r worker -r demo
'''

#step-12
instance_name = 'all-in-one'
testing_instance = conn.create_server(wait=True, auto_ip=False,
    name=instance_name,
    image=image_id,
    flavor=flavor_id,
    key_name=keypair_name,
    security_groups=[sec_group_name],
    userdata=ex_userdata)

#step-13
f_ip = conn.available_floating_ip()

#step-14
conn.add_ip_list(testing_instance, [f_ip['floating_ip_address']])

#step-15
print('The Fractals app will be deployed to http://%s' % f_ip['floating_ip_address'] )
Creative Commons Attribution 3.0 License

Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.