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

`OpenStack Cloud SDK für Microsoft .NET 1.4.0.1 oder höher installiert <https://www.nuget.org/packages/openstack.net> `_.

Bemerkung

Um das OpenStack .NET SDK zu installieren, verwenden Sie den NeGet Package Manager, der in Visual Studio und Xamarin Studio enthalten ist. Sie fügen einfach ein Paket namens ‚openstack.net‘ hinzu und der NeGet Package Manager installiert automatisch die notwendigen Abhängigkeiten.

Warnung

Dieses Dokument ist noch nicht für das .NET SDK abgeschlossen.

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.

Um das OpenStack .NET SDK zu verwenden, fügen Sie den folgenden Code in den erforderlichen Namespace-Abschnitt hinzu.

using net.openstack.Core.Domain;
using net.openstack.Core.Providers;
using net.openstack.Providers.Rackspace;

Da alle Service-Endpunkte den Identity Service zur Authentifizierung und Autorisierung verwenden, platzieren Sie den folgenden Code in die ‚void Main ()‘ Einstiegspunktfunktion.

var username = "your_auth_username";
var password = "your_auth_password";
var project_name = "your_project_name";
var project_id = "your_project_id";
var auth_url = "http://controller:5000/v2.0";
var region = "your_region_name";
var networkid = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";

var identity = new CloudIdentityWithProject () {
	Username = username,
	Password = password,
	ProjectId = new ProjectId(project_id),
	ProjectName = project_name
};

var identityProvider = new OpenStackIdentityProvider (
	new Uri (auth_url));

var conn = new CloudServersProvider (identity, identityProvider);

Bemerkung

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

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:

var images = conn.ListImages (region: region);
foreach (var image in images) {
	Console.WriteLine (string.Format(
		"Image Id: {0} - Image Name: {1}",
		image.Id,
		image.Name));
}

Dieser Code gibt die Ausgabe wie folgt zurück:

Image Id: dce1a289-2ad5-4aaa-a7a6-fe30adc2094e - Image Name: snap1
Image Id: 97f55846-6ea5-4e9d-b437-bda97586bd0c - Image Name: cirros-0.3.4-x86_64-uec
Image Id: 3e0e8270-0da4-4fec-bfc7-eeb763604cad - Image Name: cirros-0.3.4-x86_64-uec-ramdisk
Image Id: 0b151382-d2f1-44d7-835b-6408bd523917 - Image Name: cirros-0.3.4-x86_64-uec-kernel

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

var flavors = conn.ListFlavors (region: region);
foreach (var flavor in flavors) {
	Console.WriteLine (string.Format(
		"Flavor Id: {0} - Flavor Name: {1}",
		flavor.Id,
		flavor.Name));
}

Dieser Code gibt die Ausgabe wie folgt zurück:

Flavor Id: 1 - Flavor Name: m1.tiny
Flavor Id: 2 - Flavor Name: m1.small
Flavor Id: 3 - Flavor Name: m1.medium
Flavor Id: 4 - Flavor Name: m1.large
Flavor Id: 42 - Flavor Name: m1.nano
Flavor Id: 5 - Flavor Name: m1.xlarge
Flavor Id: 84 - Flavor Name: m1.micro

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:

var image_id = "97f55846-6ea5-4e9d-b437-bda97586bd0c";
var _image = conn.GetImage(image_id, region:region);
Console.WriteLine (string.Format(
	"Image Id: {0} - Image Name: {1}",
	_image.Id,
	_image.Name));

Dieser Code gibt die Ausgabe wie folgt zurück:

Image Id: 97f55846-6ea5-4e9d-b437-bda97586bd0c - Image Name: cirros-0.3.4-x86_64-uec

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

var flavor_id = "2";
var _flavor = conn.GetFlavor (flavor_id, region: region);
Console.WriteLine (string.Format(
	"Flavor Id: {0} - Flavor Name: {1}",
	_flavor.Id,
	_flavor.Name));

Dieser Code gibt die Ausgabe wie folgt zurück:

Flavor Id: 2 - Flavor Name: m1.small

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.

var instance_name = "testing";
var testing_instance = conn.CreateServer (instance_name,
	_image.Id,
	_flavor.Id,
	region: region,
	networks: new List<String> () { networkid });
Console.WriteLine (string.Format(
	"Instance Id: {0} at {1}",
	testing_instance.Id,
	testing_instance.Links
));

Dieser Code gibt die Ausgabe wie folgt zurück:

Instance Id: 4e480ef1-68f0-491f-b237-d9b7f500ef24 at net.openstack.Core.Domain.Link[]

Wenn Sie vorhandene Instanzen auflisten:

var instances = conn.ListServers(region:region);
foreach (var instance in instances) {
	Console.WriteLine (string.Format(
		"Instance Id: {0} at {1}",
		testing_instance.Id,
		testing_instance.Links));
}

Die neue Instanz erscheint.

Instance Id: 4e480ef1-68f0-491f-b237-d9b7f500ef24 at net.openstack.Core.Domain.Link[]

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.DeleteServer(testing_instance.Id, region:region);

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.

  • 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.

  • 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.

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.

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ü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.

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.

using System;
using System.Collections.Generic;

using net.openstack.Core.Domain;
using net.openstack.Core.Providers;
using net.openstack.Providers.Rackspace;

namespace openstack
{
	class MainClass
	{
		public static void Main (string[] args)
		{
			// step-1
			var username = "your_auth_username";
			var password = "your_auth_password";
			var project_name = "your_project_name";
			var project_id = "your_project_id";
			var auth_url = "http://controller:5000/v2.0";
			var region = "your_region_name";
			var networkid = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";

			var identity = new CloudIdentityWithProject () {
				Username = username,
				Password = password,
				ProjectId = new ProjectId(project_id),
				ProjectName = project_name
			};

			var identityProvider = new OpenStackIdentityProvider (
				new Uri (auth_url));

			var conn = new CloudServersProvider (identity, identityProvider);

			// step-2
			var images = conn.ListImages (region: region);
			foreach (var image in images) {
				Console.WriteLine (string.Format(
					"Image Id: {0} - Image Name: {1}",
					image.Id,
					image.Name));
			}

			// step-3
			var flavors = conn.ListFlavors (region: region);
			foreach (var flavor in flavors) {
				Console.WriteLine (string.Format(
					"Flavor Id: {0} - Flavor Name: {1}",
					flavor.Id,
					flavor.Name));
			}

			// step-4
			var image_id = "97f55846-6ea5-4e9d-b437-bda97586bd0c";
			var _image = conn.GetImage(image_id, region:region);
			Console.WriteLine (string.Format(
				"Image Id: {0} - Image Name: {1}",
				_image.Id,
				_image.Name));

			// step-5
			var flavor_id = "2";
			var _flavor = conn.GetFlavor (flavor_id, region: region);
			Console.WriteLine (string.Format(
				"Flavor Id: {0} - Flavor Name: {1}",
				_flavor.Id,
				_flavor.Name));

			// step-6
			var instance_name = "testing";
			var testing_instance = conn.CreateServer (instance_name,
				_image.Id,
				_flavor.Id,
				region: region,
				networks: new List<String> () { networkid });
			Console.WriteLine (string.Format(
				"Instance Id: {0} at {1}",
				testing_instance.Id,
				testing_instance.Links
			));

			// step-7
			var instances = conn.ListServers(region:region);
			foreach (var instance in instances) {
				Console.WriteLine (string.Format(
					"Instance Id: {0} at {1}",
					testing_instance.Id,
					testing_instance.Links));
			}

			// step-8
			conn.DeleteServer(testing_instance.Id, region:region);

			// step-9

			// step-10

			// step-11

			// step-12

			// step-13

			// step-14

			// step-15

			Console.Read ();
		}
	}
}
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.