Proxmox automatisiert starten und beenden


Für Entwickler, die ihren Proxmox-Server nicht rund um die Uhr benötigen, bietet sich eine effiziente Möglichkeit, Strom zu sparen und Ressourcen optimal zu nutzen. In diesem Artikel zeige ich dir, wie du mithilfe von Ansible und Semaphore deinen Proxmox-Server automatisch herunterfährst und über Wake-on-LAN (WoL) wieder hochfährst. Außerdem werde ich die Vor- und Nachteile dieser Methode erläutern und dir ein konkretes Beispiel zur Konfiguration geben.

Automatisierung des Herunterfahrens und Hochfahrens

Wenn du deinen Proxmox-Server nur tagsüber benötigst, kannst du ihn automatisch zu bestimmten Zeiten herunterfahren und morgens wieder starten. Dies gelingt dir mit zwei Ansible-Playbooks, die über Semaphore zeitgesteuert ausgeführt werden.

Playbook zum Herunterfahren:

- name: Copy Script to Proxmox Host
  hosts: pvem
  gather_facts: false
  become: true
 
  tasks:
    - name: Download Script from HTTP
      get_url:
        url: "http://192.168.0.77:81/download/proxmox_shutdown.sh"  # Deine HTTP-Adresse hier einfügen
        dest: /root/proxmox_shutdown.sh  # Der Pfad auf dem Ansible-Host, wohin das Skript heruntergeladen werden soll

    - name: Ensure ansiblescripts directory exists
      file:
        path: /root/ansiblescript
        state: directory
     
    - name: Copy Script to Proxmox Host
      copy:
        src: /root/proxmox_shutdown.sh  # Der lokale Pfad zum heruntergeladenen Skript auf deinem Ansible-Host
        dest: /root/ansiblescript/proxmox_shutdown.sh  # Der Pfad auf dem Proxmox-Host, wohin das Skript kopiert werden soll
        mode: 0755  # Setzen der Berechtigungen für das Skript (z. B. ausführbar)
        remote_src: yes
        force: yes

    - name: Execute shutdown script
      shell: bash /root/ansiblescript/proxmox_shutdown.sh
      register: var_script

Shell-Skript für das Herunterfahren (proxmox_shutdown.sh):

#!/bin/bash

# Liste der VMs und LXCs auf dem Knoten abrufen
VMIDs=$(/usr/sbin/qm list | tail -n +2 | awk '/[0-9]/ {print $1}')
LXCs=$(/usr/bin/lxc-ls)

# LXCs anhalten
for LXC in $LXCs
do
    /usr/bin/lxc-stop $LXC
done

# VMs herunterfahren
for VM in $VMIDs
do
    /usr/sbin/qm shutdown $VM
done

# Warten, bis alle heruntergefahren sind
for LXC in $LXCs
do
    while [[ $(lxc-info $LXC | grep State | awk '{print $2}') =~ RUNNING ]] ; do
        sleep 1
    done
done

for VM in $VMIDs
do
    while [[ $(/usr/sbin/qm status $VM) =~ running ]] ; do
        sleep 1
    done
done

# Server herunterfahren
/usr/sbin/poweroff

Playbook zum Hochfahren:

---
- name: Wake-on-LAN playbook
  hosts: localhost  # Führe dies auf localhost (Steuerrechner) aus
  become: yes       # Erfordert möglicherweise Root-Rechte für die Installation
  tasks:
    - name: Ensure wakeonlan is installed
      ansible.builtin.package:
        name: wakeonlan
        state: present

    - name: Send WoL packet to Proxmox Server
      ansible.builtin.command: wakeonlan 60:32:b1:d8:e6:7b

Konfiguration von Wake-on-LAN

Damit Wake-on-LAN funktioniert, muss die Netzwerkkarte deines Proxmox-Servers für WoL konfiguriert sein. Füge folgende Zeile in die Netzwerkschnittstelle in der Datei /etc/network/interfaces hinzu:
auto vmbr0

iface vmbr0 inet static
    address 192.168.0.10/24
    gateway 192.168.0.1
    bridge-ports enp1s0
    bridge-stp off
    bridge-fd 0
    post-up /sbin/ethtool -s enp1s0 wol g

Erklärung der Konfiguration:

  • auto vmbr0: Aktiviert die Netzwerkschnittstelle beim Booten.
  • iface vmbr0 inet static: Stellt die IP-Adresse des Netzwerks ein.
  • address 192.168.0.10/24: Setzt die statische IP-Adresse.
  • gateway 192.168.0.1: Definiert das Gateway.
  • bridge-ports enp1s0: Bindet die physische Netzwerkschnittstelle enp1s0 an die Bridge vmbr0.
  • bridge-stp off: Deaktiviert das Spanning Tree Protocol.
  • bridge-fd 0: Setzt die Forwarding-Dauer auf 0.
  • post-up /sbin/ethtool -s enp1s0 wol g: Aktiviert Wake-on-LAN für die Schnittstelle enp1s0.

Hinweis: Ersetze enp1s0 durch den Namen deiner Netzwerkschnittstelle und vmbr0 durch den Namen deiner Bridge, falls diese anders benannt sind.

Wichtige Hinweise

  1. Aktualität des Bash-Skripts: Die neueste Version des Bash-Skripts für das Herunterfahren stelle ich über einen lokalen Webserver zur Verfügung. Das Playbook verwendet die get_url-Anweisung, um die aktuelle Version des Skripts von diesem Webserver herunterzuladen. Achte darauf, dass der Webserver erreichbar ist und das Skript regelmäßig aktualisiert wird, um sicherzustellen, dass du immer die neueste Version verwendest.

  2. Wake-on-LAN-Kommando: Das WoL-Kommando wird im Playbook auf dem lokalen Rechner (oder einem Proxmox-Server) ausgeführt, der das Wake-on-LAN-Paket an den Proxmox-Server sendet. Achte darauf, dass der Rechner, von dem aus du das WoL-Paket sendest, ebenfalls korrekt konfiguriert ist, um das Paket zu senden. Die Netzwerkeinstellungen und die WoL-Konfiguration des Zielservers müssen richtig eingerichtet sein.

Vor- und Nachteile

Vorteile:

  1. Energieeinsparung: Durch das automatische Herunterfahren des Servers außerhalb der Arbeitszeiten kannst du Stromkosten sparen.

  2. Geringerer Wartungsaufwand: Die Automatisierung reduziert den manuellen Aufwand und minimiert menschliche Fehler.

  3. Effiziente Ressourcennutzung: Du nutzt deine Serverressourcen nur dann, wenn sie tatsächlich benötigt werden.

Nachteile:

  1. Netzwerkabhängigkeit: Wake-on-LAN erfordert eine korrekte Netzwerkkonfiguration und kann durch Netzwerkprobleme beeinträchtigt werden.

  2. Konfigurationsaufwand: Die Einrichtung von Wake-on-LAN und die Automatisierung erfordern eine präzise Konfiguration und Tests.

  3. Fehlersuche: Probleme bei der Ausführung der Skripte oder bei der Wake-on-LAN-Konfiguration können komplex sein und erfordern detaillierte Fehlersuche.

Fazit

Die Automatisierung des Herunterfahrens und Hochfahrens eines Proxmox-Servers mit Ansible und Semaphore ist eine effektive Methode, um Ressourcen zu optimieren und Kosten zu senken. Durch die korrekte Konfiguration und sorgfältige Tests kannst du sicherstellen, dass dein Server zuverlässig und effizient verwaltet wird. Falls du Fragen zur Implementierung hast oder Unterstützung benötigst, stehe ich dir gerne zur Verfügung!