Benutzer-Werkzeuge

Webseiten-Werkzeuge


de:sysadmin:tools:hcloud

hcloud - Hetzner cloud CLI (Notizen)

Der Provider Hetzner hat neuerdings auch Cloud Server. Über den Namen kann man streiten, sie sehen eigentlich wie normale Virtuelle Maschinen aus - mit dem kleinen Zusatz dass man sie jetzt nicht nur per WEB-Oberfläche sondern auch per REST-API1), per GO-API und per Kommandozeile steuern kann. Hier geht es erst mal um das Kommandozeilentool, das hat Hetzner hcloud genannt.

Das ganze ist sehr deutlich weniger umfangreich als z.B. google-Cloud oder Amazon AWS, aber erstens muss jeder mal klein anfangen und hier sind große Teile der (wenigen verfügbaren) Services mit Fixpreis veranschlagt. Weniger Möglichkeiten, aber dafür auch überschaubarer.

Vorbemerkung: Tool und Cloud haben momentan noch nicht sehr viele Features. Ich kann mir vorstellen, dass das ganze noch deutlich komfortabler wird. Wo nicht anders vermerkt: Getestet mit hcloud Version v1.3.0 auf einem OpenSuse Linux Tumbleweed (Stand 2018-02) mit bash 4.4.12 und expect 5.45.3. (Update 2019-02-02: zusätzlich getestet mit hcloud Version v1.11.0, keine wesentlichen Änderungen beim den hier beschriebenen Tasks, ausser dass man jetzt verschiedene Locations und Datacenter auswählen kann. )

Start

Herunterladen kann man sich hcloud dort: https://github.com/hetznercloud/cli

Dann muss man sich in der Weboberfläche:

  • einloggen (bzw. vorher einen Account anlegen)
  • ein Projekt anlegen
  • einen Projektweiten API-Key generieren (und gleich in einer Datei sichern).

Hier im Text heißt das Projekt "Test", die Datei mit dem API-KEy Test-api.key.

hcloud context create -> initialiseren -> mit dem Projekt bekannt machen

Jetzt muss man die Kommandozeile bemühen und sein Projekt bekannt geben.

hcloud context create Test

Dann wird man auf der Kommandozeile nach dem API-Key gefragt. Leider scheint noch keine Möglichkeit vorgesehen zu sein, das als Datei zu übergeben … d.h. hier muss interaktiv der API-Key eingegeben werden. Bis dieses (IMHO sehr nötige Feature) in hcloud eingebaut wird, hab ich mir mit expect einen kleinen Workaround gebaut:

#!/usr/bin/expect -f

set CONTEXTNAME [lindex $argv 0]
set APIKEYFILE [lindex $argv 1]

set FilePointer [open "$APIKEYFILE" r]
set ApiKey [read $FilePointer]

set timeout -1
spawn hcloud context create $CONTEXTNAME
match_max 500
expect -exact "Token: "
send -- "$ApiKey\r"
expect eof

Das lässt sich entweder vom Shell-Script aus oder auch direkt aus der Kommandozeile aus aufrufen:

./hcloud-login.exp Test Test-api.key

2 Ergänzungen zu ''context create''

Bei context create wird nicht geprüft, ob der API-Key auch stimmt oder ob es das Projekt überhaupt gibt, aber bei späteren Aktionen erhält man die Meldung "hcloud: unable to authenticate your token (unauthorized)"

Der API-Key wird bei context create in der Datei $HOME/.config/hcloud/cli.toml abgelegt (Klartext).

active_context = "Test"

[[contexts]]
  name = "Foo"
  token = "bar"

[[contexts]]
  name = "Test"
  token = "AhchiesGEFAELSCHT1she5aiZoOhx1eez6ooVo4ohbNah6theBaiNg0GEFAELSCHT"

mit hcloud context delete Test wirft man den passenden Eintrag wieder aus der Datei

SSH-Keys hochladen

hcloud ssh-key create --name Anna_Beispiel_2018_02 --public-key-from-file ./anna_beispiel_2018-02.pub

oder man gibt den Inhalt des Public Keys direkt an:

hcloud ssh-key create --name Anna_Beispiel_2018_02 --public-key "ssh-rsa AAAAB3Nza<gekürzt>3eVbbbmYu/+w6rTw=="

Server starten

Server starten geht recht schnell:

hcloud server create --name test1 --image ubuntu-16.04 \
   --type cx11 --ssh-key Anna_Beispiel_2018_02 --ssh-key Beatrice_Example_2017_12
  12s [====================================================================] 100%

Update 2019-02: Inzwischen kann man optional Location (es gibt Nürnberg, Falkenstein und Helsinki) und Rechenzentrum angeben, wenn man seine Server aus Ausfallgründen verteilen will.

Und wenn man dann die IP-Adressen wissen will, lässt man sich seine Server auflisten:

hcloud server list
ID       NAME    STATUS    IPV4             IPV6                     DATACENTER
1858752  test1   running   85.121.170.248   2a01:4f8:1c0c:4297::/64  nbg1-dc3

(Update 2019-02: Spalte DATACENTER wird angezeigt)

und dann kann man sich auch schon einloggen (wenn man den SSH-Key im SSH-Agent geladen hat):

ssh root@85.121.170.248
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-112-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

4 packages can be updated.
2 updates are security updates.

root@test1 ~ # exit

So so, frisch installiert und schon braucht man Updates …

Weil man sich von Testservern aber nicht die Haare vom Kopf fressen lassen will, gleich mal wieder ausschalten:

hcloud server poweroff test1

und auch löschen, denn auch ausgeschaltete Server kosten bei Hetzner Geld:

hcloud server delete test1

Nachdem der Server jetzt nicht so lange gelaufen ist, waren die Kosten aber sehr übersichtlich :-D:

Rechnungsvorschau: 0,00 €

Die kleinste Instanz CX11 (1 vCPU, 2GB RAM, 20GB Festplatte, 20TB Traffic outgoing) kostet momentan monatlich maximal 2.96€ (brutto. IO, Storage, CPU sind fix und im Preis enthalten, outgoing Traffic kostet wenn ein bestimmter Wert überschritten wird, für Backup und Snapshots muss man zusätzlich zahlen (20% vom Serverpreis bei Backups die 7 Tage zurückgehen)). Bei kürzeren Laufzeiten wird immer mit ganzen Betriebsstunden gerechnet, bei einem Netto-Stundenpreis von 0,004€ kam ich als Kundin hier bei diesem kurzen Test umsonst weg2)

Eine zusätzliche Festplatte

(getestet mit hcloud Version v1.11.0)

Wenn man zusätzlichen Plattenplatz (Minimum: 10GB) braucht, kann man einfach Volumes (virtuelle Festplatten) dazuhängen. Anders als die "erste Festplatte" der Maschine können diese Volumes nachträglich auch vergrößert werden. Volumes können auch unabhängig von einer Instanz existieren. Man könnte sie also wechselweise auf verschiedenen Maschinen mounten (ob read-only parallel auf einer 2ten Maschine habe ich noch nicht getestet). Volumes müssen in der selben Location (also Nürnberg, Falkenstein, Helsinki) wie die virtuelle Maschine sein - eine weitere Unterteilung nach Rechenzentren gibt es für die Volumes aber nicht.

Wenn man beim ersten "create" eine Maschine angibt, wird das Volume automatisch an der richtigen Stelle angelegt, man kann stattdessen aber auch mit der Option –location arbeiten.

Hier jetzt einfach mal als zusätzliche Festplatte:

hcloud volume create --format ext4 --server test1 --size 10 --name test1-data

Nach kurzer Wartezeit ist die Festplatte mit fdisk -l auf der Maschine zu sehen. Die Festplatte muss auf der Maschine nur noch formatiert und gemountet werden.

Oder eine Festplatte für die Location Helsinki:

$ hcloud volume create --format ext4 --location hel1 --name testtest --size 10
   1s [====================================================================] 100%
Volume 1830234 created

$ hcloud volume list
ID        NAME         SIZE    SERVER    LOCATION
1807819   test1-data   10 GB   1858752   nbg1
1830234   testtest     10 GB   -         hel1

$ hcloud volume delete testtest
Volume 1830234 deleted

Liste der verfügbaren RZ

(getestet mit hcloud Version v1.11.0, 2019-02-02)

Und welche Rechenzentren gibt es für die VMs (und welche Locations für die Volumes?)

hcloud datacenter list
ID   NAME        DESCRIPTION          LOCATION
2    nbg1-dc3    Nuremberg 1 DC 3     nbg1
3    hel1-dc2    Helsinki 1 DC 2      hel1
4    fsn1-dc14   Falkenstein 1 DC14   fsn1

Details über Standort und verfügbare Intanzen kann man sich auch anzeigen lassen:

hcloud datacenter describe hel1-dc2
ID:             3
Name:           hel1-dc2
Description:    Helsinki 1 DC 2
Location:
  Name:         hel1
  Description:  Helsinki DC Park 1
  Country:      FI
  City:         Helsinki
  Latitude:     60.169855
  Longitude:    24.938379
Server Types:
  Available:
  - ID:          1
    Name:        cx11
    Description: CX11
  - ID:          2
    Name:        cx11-ceph
    Description: CX11 Ceph Disk

....

Was noch fehlt

Was ich nicht beschrieben habe: Vieles!

hcloud (und die API) können einiges was ich hier nicht beschrieben habe oder momentan nicht verwende: u. a. Floating IPs verwalten, ISO-Images verwenden, Server in verschiedenen Rechenzentren und Locations anlegen 3), Backups einschalten, Snapshots einschalten, CEPH-Festplatten verwenden.

Was mir im Tool und Api noch fehlen:

Am meisten fehlt mir: DNS-Verwaltung!

1) REST: einfach gesagt per HTTP-Abfrage, genauer weiss es u.a. die Wikipedia
2) Achtung: Stand 2018-02 so wie ich das verstanden habe, lest Euch die Bedingungen selber durch
3) momentan sind das 2 RZs
de/sysadmin/tools/hcloud.txt · Zuletzt geändert: 2019-02-02 08:59 von hella

Seiten-Werkzeuge