Teil 3 - Proxmox VM mit Terraform erstellen
Habt ihr die letzten Teile erfolgreich abgeschlossen, kommen wir endlich zum Part, worauf ihr alle gewartet habt.
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.