Schritt 7: Die erste eigene Instanz

Vorwort

Wir wissen jetzt alles, was nötig ist, um die erste eigene Instanz anzulegen und zu starten.

Es ist am sinnvollsten, das gleich in einem Stack zu organisieren und diesen mit einem Template zu beschreiben, anstatt alle notwendigen Arbeitsschritte von Hand durchzuführen.

Trotzdem erzeugen wir im allerersten Schritt erst mal eine Instanz von Hand.

Installation

Der Grundbefehl für das Erstellen einer Instanz in der Kommandozeile lautet:

openstack server create test

Wenn der Befehl ohne weitere Zusätze ausgeführt wird, erscheint direkt eine Fehlermeldung:

usage: openstack server create [-h] [-f {json,shell,table,value,yaml}]
                               [-c COLUMN] [--max-width <integer>]
                               [--print-empty] [--noindent] [--prefix PREFIX]
                               (--image <image> | --volume <volume>) --flavor
                               <flavor>
                               [--security-group <security-group-name>]
                               [--key-name <key-name>]
                               [--property <key=value>]
                               [--file <dest-filename=source-filename>]
                               [--user-data <user-data>]
                               [--availability-zone <zone-name>]
                               [--block-device-mapping <dev-name=mapping>]
                               [--nic <net-id=net-uuid,v4-fixed-ip=ip-addr,v6-fixed-ip=ip-addr,port-id=port-uuid,auto,none>]
                               [--hint <key=value>]
                               [--config-drive <config-drive-volume>|True]
                               [--min <count>] [--max <count>] [--wait]
                               <server-name>
openstack server create: error: argument --flavor is required

Der Fehler besagt, dass kein Flavor angegeben ist.

Damit nun eine Instanz gestartet werden kann, wird dem Befehl noch der entsprechende Flavor hinzugefügt.

Um zu sehen welche Flavors bereit stehen, führen wir folgenden Befehl aus:

$ openstack flavor list
+--------------------------------------+------------+-------+------+-----------+-------+-----------+
| ID                                   | Name       |   RAM | Disk | Ephemeral | VCPUs | Is Public |
+--------------------------------------+------------+-------+------+-----------+-------+-----------+
| 090bcc91-6207-465d-aff0-bfcc10a9e063 | m1.medium  |  8192 |   20 |         0 |     4 | True      |
| 4ade7a50-f829-4bf6-af15-266798ea8d6f | win.large  | 32768 |   80 |         0 |     8 | True      |
| 5dd72380-088e-48cd-9a18-112cb5a9cab5 | win.small  |  8192 |   80 |         0 |     2 | True      |
| 884d5b93-1467-4bc1-a445-ff7c74271cbd | m1.micro   |  1024 |   20 |         0 |     1 | True      |
| b7c4fa0b-7960-4311-a86b-507dbf58e8ac | m1.small   |  4096 |   20 |         0 |     2 | True      |
| d45e3029-8364-4e4c-beab-242e8b4622a3 | win.medium | 16384 |   80 |         0 |     4 | True      |
| dfead62e-96a8-46e9-bdae-342ecce32d41 | win.micro  |  2048 |   80 |         0 |     1 | True      |
| ed18c320-324a-487f-88e1-3e9eb9244509 | m1.large   | 16384 |   20 |         0 |     8 | True      |
+--------------------------------------+------------+-------+------+-----------+-------+-----------+

Sollte man nun den Befehl openstack stack create Beispiel mit --flavor m1.micro starten, würde erneut eine Fehlermeldung angezeigt werden, da weitere Parameter fehlen.

Um eine Instanz über diesen Weg zu starten, wird neben dem Flavor(--flavor) auch noch der SSH-Key (--key-name), das Image (--image), das verfügbare Netz (--network, in alten Versionen des Clients muss --nic net_id= verwendet werden) und eine SecurityGroup (--security-group) benötigt.

Der SSH-Key wurde im letzten Schritt bereits erstellt und braucht so nicht erneut angelegt werden.

Damit fehlen noch das Image (--image) und das Netz.

Starten wir zunächst mit dem Image, wie bereits bei dem Flavor, kann auch hier eine Übersicht der möglichen Images mit folgendem Befehl angezeigt werden:

$ openstack image list
+--------------------------------------+---------------------------------------+--------+
| ID                                   | Name                                  | Status |
+--------------------------------------+---------------------------------------+--------+
| fd8ad5aa-6b33-4198-a05d-8be42fc0f20e | CentOS 7 - Latest                     | active |
| 82242d21-d990-4fc2-92a5-c7bd7820e790 | Ubuntu 16.04 Xenial Xerus - Latest    | active |
| 8e82fd42-3d6f-44a7-9f20-92f5661823cf | Windows Server 2012 R2 Std - Latest   | active |
| 536c086c-d2a4-43dd-80ea-a9d05ee2b97f | Windows Server 2016 Std - Latest      | active |
| c94ced87-a03e-4eec-89f7-48f2c0ec6cd2 | debian-9.1.5-20170910-openstack-amd64 | active |
| b1195ddf-9336-42a7-a134-4f2e7ea57710 | iNNOVO-OPNsense-17.7.8                | active |
| 9134b6ed-8c5a-4a9a-907e-733dc2b5f0ef | iNNOVO_pfSense 2.3.4                  | active |
+--------------------------------------+---------------------------------------+--------+

Nun fehlt noch ein Netzwerk.

An dieser Stelle gibt es 2 Möglichkeiten für das Netzwerk, zum einen kann man ein sehr simples Netzwerk anlegen und so die Instanz starten, dafür nutzt man folgenden Befehl:

$ openstack network create BeispielNetzwerk
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | UP                                   |
| availability_zone_hints   |                                      |
| availability_zones        |                                      |
| created_at                | 2017-12-08T08:32:44Z                 |
| description               |                                      |
| dns_domain                | None                                 |
| id                        | a783d691-7efe-4f67-9226-99a014fa8926 |
| ipv4_address_scope        | None                                 |
| ipv6_address_scope        | None                                 |
| is_default                | False                                |
| mtu                       | 1500                                 |
| name                      | BeispielNetzwerk                     |
| port_security_enabled     | True                                 |
| project_id                | b15cde70d85749689e08106f973bb002     |
| provider:network_type     | None                                 |
| provider:physical_network | None                                 |
| provider:segmentation_id  | None                                 |
| qos_policy_id             | None                                 |
| revision_number           | 2                                    |
| router:external           | Internal                             |
| segments                  | None                                 |
| shared                    | False                                |
| status                    | ACTIVE                               |
| subnets                   |                                      |
| updated_at                | 2017-12-08T08:32:44Z                 |
+---------------------------+--------------------------------------+

Der Nachteil an diesem Netzwerk ist, dass man die Instanz nicht erreichen kann. Soll die Instanz nutzbar sein, wird ein funktionierendes Netz benötigt, welches in Schritt 10 komplett angelegt wird.

Nachdem alle Bestandteile jetzt bekannst sind, kann die erste Instanz erstellt werden.

Dafür wird das --flavor m1.small, der SSH-Key aus Schritt 6, das Netzwerk von weiter oben, das --image "Ubuntu 16.04 Xenial Xerus - Latest" und die --security-group default:

$ openstack server create BeispielServer --flavor m1.small --key-name Beispiel --image 82242d21-d990-4fc2-92a5-c7bd7820e790 --network=BeispielNetzwerk --security-group default
+-----------------------------+--------------------------------------------------------+
| Field                       | Value                                                  |
+-----------------------------+--------------------------------------------------------+
| OS-DCF:diskConfig           | MANUAL                                                 |
| OS-EXT-AZ:availability_zone | es1                                                    |
| OS-EXT-STS:power_state      | NOSTATE                                                |
| OS-EXT-STS:task_state       | scheduling                                             |
| OS-EXT-STS:vm_state         | building                                               |
| OS-SRV-USG:launched_at      | None                                                   |
| OS-SRV-USG:terminated_at    | None                                                   |
| accessIPv4                  |                                                        |
| accessIPv6                  |                                                        |
| addresses                   |                                                        |
| adminPass                   | 6MotuEMy4c3t                                           |
| config_drive                |                                                        |
| created                     | 2017-12-06T14:15:02Z                                   |
| flavor                      | m1.small (676d2587-b5aa-49eb-998d-d91c1bd6c056)        |
| hostId                      |                                                        |
| id                          | 44ff2688-4ce5-417d-962b-3a80199bf1bc                   |
| image                       | cirros-tempest1 (2fbe66ef-adc8-44d0-b2e2-03d95dc36936) |
| key_name                    | cg                                                     |
| name                        | BeispielServer                                         |
| progress                    | 0                                                      |
| project_id                  | 1e775e2cc71a461991be42d4fad8a5cb                       |
| properties                  |                                                        |
| security_groups             | name='3265503b-ac24-4f60-a8d0-466b7c812916'            |
| status                      | BUILD                                                  |
| updated                     | 2017-12-06T14:15:02Z                                   |
| user_id                     | b54fda3f4d1a484797b3ad4de9b3f4f9                       |
| volumes_attached            |                                                        |
+-----------------------------+--------------------------------------------------------+

Weitere mögliche Parameter für die Erstellung einer Instanz können mit --help abgefragt werden:

$ openstack server create --help
usage: openstack server create [-h] [-f {json,shell,table,value,yaml}]
                               [-c COLUMN] [--max-width <integer>]
                               [--print-empty] [--noindent] [--prefix PREFIX]
                               (--image <image> | --volume <volume>) --flavor
                               <flavor>
                               [--security-group <security-group-name>]
                               [--key-name <key-name>]
                               [--property <key=value>]
                               [--file <dest-filename=source-filename>]
                               [--user-data <user-data>]
                               [--availability-zone <zone-name>]
                               [--block-device-mapping <dev-name=mapping>]
                               [--nic <net-id=net-uuid,v4-fixed-ip=ip-addr,v6-fixed-ip=ip-addr,port-id=port-uuid,auto,none>]
                               [--hint <key=value>]
                               [--config-drive <config-drive-volume>|True]
                               [--min <count>] [--max <count>] [--wait]
                               <server-name>

Create a new server

positional arguments:
  <server-name>         New server name

optional arguments:
  -h, --help            show this help message and exit
  --image <image>       Create server boot disk from this image (name or ID)
  --volume <volume>     Create server using this volume as the boot disk (name
                        or ID)
  --flavor <flavor>     Create server with this flavor (name or ID)
  --security-group <security-group-name>
                        Security group to assign to this server (name or ID)
                        (repeat option to set multiple groups)
  --key-name <key-name>
                        Keypair to inject into this server (optional
                        extension)
  --property <key=value>
                        Set a property on this server (repeat option to set
                        multiple values)
  --file <dest-filename=source-filename>
                        File to inject into image before boot (repeat option
                        to set multiple files)
  --user-data <user-data>
                        User data file to serve from the metadata server
  --availability-zone <zone-name>
                        Select an availability zone for the server
  --block-device-mapping <dev-name=mapping>
                        Map block devices; map is
                        <id>:<type>:<size(GB)>:<delete_on_terminate> (optional
                        extension)
  --nic <net-id=net-uuid,v4-fixed-ip=ip-addr,v6-fixed-ip=ip-addr,port-id=port-uuid,auto,none>
                        Create a NIC on the server. Specify option multiple
                        times to create multiple NICs. Either net-id or port-
                        id must be provided, but not both. net-id: attach NIC
                        to network with this UUID, port-id: attach NIC to port
                        with this UUID, v4-fixed-ip: IPv4 fixed address for
                        NIC (optional), v6-fixed-ip: IPv6 fixed address for
                        NIC (optional), none: (v2.37+) no network is attached,
                        auto: (v2.37+) the compute service will automatically
                        allocate a network. Specifying a --nic of auto or none
                        cannot be used with any other --nic value.
  --hint <key=value>    Hints for the scheduler (optional extension)
  --config-drive <config-drive-volume>|True
                        Use specified volume as the config drive, or 'True' to
                        use an ephemeral drive
  --min <count>         Minimum number of servers to launch (default=1)
  --max <count>         Maximum number of servers to launch (default=1)
  --wait                Wait for build to complete

output formatters:
  output formatter options

  -f {json,shell,table,value,yaml}, --format {json,shell,table,value,yaml}
                        the output format, defaults to table
  -c COLUMN, --column COLUMN
                        specify the column(s) to include, can be repeated

table formatter:
  --max-width <integer>
                        Maximum display width, <1 to disable. You can also use
                        the CLIFF_MAX_TERM_WIDTH environment variable, but the
                        parameter takes precedence.
  --print-empty         Print empty table if there is no data to show.

json formatter:
  --noindent            whether to disable indenting the JSON

shell formatter:
  a format a UNIX shell can parse (variable="value")

  --prefix PREFIX       add a prefix to all variable names

Abschluss

Nachdem wir in diesem Schritt nicht nur eine neue Instanz erstellt , sondern auch noch einige Basis Befehle für OpenStack angewedet haben. Werden wir im Schritt 8 diese VM wieder löschen.