How to Packer

Mit Packer kannst du Custom Machine Images erstellen und für verschiedene Plattformen aus einer Konfiguration bereitstellen. Dies ist besonders praktisch, wenn du mehrere Server mit derselben Konfiguration betreiben willst. 

Gemeinsam mit Hashicorp, dem Betreiber von Packer, haben wir den gridscale Packer Builder entwickelt. Dieser ermöglicht dir das Erstellen neuer OS-Vorlagen für die Verwendung mit gridscale. Das Plugin nimmt eine Vorlage oder ein ISO-Image, führt nach dem Start alle erforderlichen Vorgänge aus und erstellt dann einen Snapshot der Vorlage in eine wiederverwendbare Vorlage. Diese Vorlage kann dann als Grundlage für neue Server verwendet werden.

In diesem How to zeigen wir dir, wie du mit dem gridscale Packer Builder Custom Images erstellen und konfigurieren kannst.  

Voraussetzungen

Diese Sachen brauchst du, um ein Custom Image mit Packer zu erstellen:

  • einen gültigen gridscale Account
  • einen Server, auf dem Packer installiert ist
  • einen gültigen API Key

Hinweis: In diesem Fall nutzen wir eine VM die bereits auf gridscale läuft.

Wenn du Packer selbst installieren willst, findest du hier alle Infos und einen “Get startet-Guide”.

Anleitung

1. Packer Version überprüfen

Überprüfe, welche Packer Version du installiert hast und ob diese mit den Anforderungen übereinstimmt.

 /usr/bin/packer version
[root@mypackervm packer]# /usr/bin/packer version
Packer v1.8.2
[root@mypackervm packer]#

In unserem Fall ist Packer v1.8.2 installiert.

2. gridscale Packer Plugin installieren

Installiere das gridscale Packer Plugin auf deiner VM. 

Kopiere dazu einfach den folgenden Code und füge ihn in deine Packer Konfiguration ein.

packer {
  required_plugins {
    gridscale = {
      version = ">= 0.0.1"
      source  = "github.com/gridscale/gridscale"
    }
  }
}

Dann führe packer init aus.

"/usr/bin/packer init <filename>.pkr.hcl 

3. API Token erstellen 

Wenn du ein neues Projekt im Cloud Panel erstellst, benötigst du einen API-Token. Diesen kannst du ganz einfach unter “Profile” -> “API-Tokens” erstellen.

Packer API-Tokens erstellen

Bist du bereit zu starten?

Oder hast du noch Fragen? Erstelle dir jetzt dein kostenloses Konto oder lass dich in einem persönlichen Gespräch beraten.

4. Template erstellen

Jetzt, wo wir Packer und das gridscale Packer Plugin installiert sowie einen API Token erstellt haben, sind alle Voraussetzungen erfüllt ein eigenes Image zu erstellen. Dafür kreieren wir ein File, in dem das erste Image definiert wird.

Hier ist ein einfaches Beispiel, wie so ein Template aussehen kann.

source "gridscale" "centosserver" {
    api_token          = "GRIDSCALE_TOKEN"
    api_key            = "GRIDSCALE_UUID"
    base_template_uuid = "dbb3e965-bfa0-411e-b324-86e82b3f36ec"
    hostname           = "gridscaleserver"
    ssh_password       = "testPassword"
    ssh_username       = "root"
    server_cores       = 2
    server_memory      = 4
    storage_capacity   = 15
    server_name        = "my-centos-server"
    template_name      = "my-custom-centos-template"
}
build {
    sources = ["source.gridscale.centosserver"]
}

Du hast das File erstellt. Jetzt kannst du ein Image erstellen. Führe dazu folgenden Befehl aus:

/usr/bin/packer build <filename>.pkr.hcl

Nice to know:

Der Einfachheit halber haben wir den API Token und den API Key mit in das Template geschrieben. Du kannst diese aber auch als Variablen setzen.

Möchtest du ein anderes Template benutzen benötigst du die Template uuid. Diese kannst du via API oder einfach mit unserem gscloud-Tool herausfinden. 

Führe dazu einfach folgenden Befehl aus:

gscloud template ls

5. Server erstellen 

Nachdem du dir ein Template erstellt hast, kserannst du dein maßgeschneidertes Packer Image verwenden. Dafür erstellst du dir einen Server und wählst im Reiter “My Templates” das entsprechende Template aus. 

Tipp: Du brauchst eine Auffrischung für unsere Platform? Dann schau in unser How to: gridscale.

Packer Server mit Template erstellen

Glückwunsch! Du hast dein erstes Custom Image mit dem gridscale Packer Builder erstellt.