Teil 3 - Proxmox VM mit Terraform erstellen

Proxmox Okt. 06, 2020

Habt ihr die letzten Teile erfolgreich abgeschlossen, kommen wir endlich zum Part, worauf ihr alle gewartet habt.

Teil 1Teil 2

Richtig, der Erstellung von virtuellen Maschinen in Proxmox, mithilfe von Terraform.

Vorbereitung des Musters

Als erste benötigen wir in Promox ein Template, sprich ein Muster für die nachfolgenden Maschinen. Dafür verwenden ein fertiges Cloud-Image von Debian 10.

Dafür loggen wir uns per SSH auf den Proxmox Host und laden das Image herunter

wget https://cdimage.debian.org/cdimage/openstack/current-10/debian-10-openstack-amd64.qcow2

Damit wir uns später einloggen können, müssen wir noch SSH-Keys generieren. Ich werde das vom Promox Host aus machen.

ssh-keygen 

Die Eingaben alle bestätigen und nun finden wir unter /root/.ssh/id_rsa.pub unseren Public SSH Key.

Wenn das erfolgreich war, erstellen wir daraus ein Image und passen es an

qm create 9000 -name debian-10-template -memory 1024 -net0 virtio,bridge=vmbr0 -cores 1 -sockets 1 -cpu cputype=kvm64 -kvm 1 -numa 1 -description "Debian 10 Cloud-init Image"
qm importdisk 9000 debian-10-openstack-amd64.qcow2 local-lvm
qm set 9000 -scsihw virtio-scsi-pci -virtio0 local-lvm:vm-9000-disk-0
qm set 9000 -serial0 socket
qm set 9000 -boot c -bootdisk virtio0
qm set 9000 -agent 1
qm set 9000 -hotplug disk,network,usb,memory,cpu
qm set 9000 -vcpus 1
qm set 9000 -vga qxl
qm set 9000 -name debian-10-template
qm set 9000 -ide2 local-lvm:cloudinit
qm set 9000 -sshkey /root/.ssh/id_rsa.pub
qm resize 9000 virtio0 +8G

Template anpassen

Es müssen ein paar Anpassungen am Template vorgenommen werden, dafür verbinden wir uns per SSH . Die IP könnt ihr in euren Router finden

ssh [email protected] DES TEMPLATES

Nun müssen folgende Pakete installiert werden

sudo apt install bmon screen ntpdate vim locate locales-all iotop atop curl libpam-systemd python-pip python-dev ifenslave vlan default-mysql-client sysstat snmpd sudo lynx rsync nfs-common tcpdump strace darkstat qemu-guest-agent -y

Ist die Installation abgeschlossen, könnt ihr die VM herunterfahren.

Als letzten Schritt, konvertieren wir die VM noch in ein Template, mit einem Rechtsklick in der Proxmox GUI

Terraform Projekt Definition

Zurück auf eurem Terraform Container/VM müssen wir ein Projekt anlegen.

Dafür wechseln wir in unseren Terraform Projekt Ordner

cd /tfproxmox

Nun erstellen wir eine Datei mit einem Editor eurer Wahl und passen diese an. Diese wird benötigt, damit Terraform sich in den Proxmox Host einloggen kann.

nano main.tf

Folgenden Inhalt einfügen und die IP, Passwort und der SSH Key müssen angepasst werden.

provider "proxmox" {
    pm_api_url = "https://IP_VOM_PROXMOX:8006/api2/json"
    pm_user = "[email protected]"
    pm_password = "PASSWORT"
    pm_tls_insecure = "true"
}

variable "ssh_key" {
  default = "SSH KEY EINFÜGEN"
}

Im nächsten Schritt erstellen wir eine Datei, wo die VM definiert wird.

nano deploy.tf
resource "proxmox_vm_qemu" "proxmox_vm" {
  count             = 1
  name              = "tf-vm-${count.index}"
  target_node       = "proxmox"
  clone             = "deb10-template"
  os_type           = "cloud-init"
  cores             = 2
  sockets           = "1"
  cpu               = "host"
  memory            = 1024
  scsihw            = "virtio-scsi-pci"
  bootdisk          = "scsi0"
disk {
    id              = 0
    size            = 12
    type            = "scsi"
    storage         = "local-lvm"
    storage_type    = "lvm"
    iothread        = true
  }
network {
    id              = 0
    model           = "virtio"
    bridge          = "vmbr0"
  }
# Cloud Init Settings
  ipconfig0 = "ip=192.168.178.7${count.index + 1}/24,gw=192.168.178.1"

sshkeys = <<EOF
  ${var.ssh_key}
  EOF
}
count     <- Die Anzahl wie viele VMs erstellt werden
name      <- Der VM Name, der "${count.index}" erlaubt,  
             wenn Sie mehr als eine VM erstellen, zählt er hoch    
cores     <- Anzahl der CPU Kerne
memory    <- Höhe des RAMs
disk      <- Größe der Festplatte
network   <- Netzschnittstelle
ipconfig0 <- Die IP der VM

Terraform starten

Im Projekt Ordner können wir nun folgenden Befehl ausführen.

terraform init

Initializing the backend...
Initializing provider plugins...
Terraform has been successfully initialized!
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.
If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.

Damit werden die Plugins geladen und Terraform wird initialisiert.

Wenn das erfolgreich durchlaufen ist, führen mit den Plan aus.

terraform apply

Mit "yes" bestätigen

Nach einer Weile sollte im Proxmox eine VM auftauchen mit dem Namen tf-vm.

Wir können nun einfach mehrere VMs mit Terraform erstellen. Dafür können wir einfach den „Count“ auf die gewünschte Menge ändern und Terraform erstellt uns diese.

Falls wir alle VMs löschen wollen, einfach den Wert 0 eintragen und die diese werden gelöscht.

Ich hoffe, dass konnte euch helfen. Wie immer meldet euch gerne bei uns, wenn was nicht klappen sollte. Ich versuche natürlich zu helfen, wo ich kann.

Tags