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 Netzwerkschnittstelleenp1s0
an die Bridgevmbr0
.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 Schnittstelleenp1s0
.
Hinweis: Ersetze enp1s0
durch den Namen deiner Netzwerkschnittstelle und vmbr0
durch den Namen deiner Bridge, falls diese anders benannt sind.
Wichtige Hinweise
-
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. -
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:
- Energieeinsparung: Durch das automatische Herunterfahren des Servers außerhalb der Arbeitszeiten kannst du Stromkosten sparen.
- Geringerer Wartungsaufwand: Die Automatisierung reduziert den manuellen Aufwand und minimiert menschliche Fehler.
- Effiziente Ressourcennutzung: Du nutzt deine Serverressourcen nur dann, wenn sie tatsächlich benötigt werden.
Nachteile:
- Netzwerkabhängigkeit: Wake-on-LAN erfordert eine korrekte Netzwerkkonfiguration und kann durch Netzwerkprobleme beeinträchtigt werden.
- Konfigurationsaufwand: Die Einrichtung von Wake-on-LAN und die Automatisierung erfordern eine präzise Konfiguration und Tests.
- 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!