Gorodenkoff - stock.adobe.com
Ceph in Proxmox VE integrieren: Schritt-für-Schritt Anleitung
Die Anbindung eines externen Ceph-Clusters an Proxmox VE nutzt RBD und CephFS und liefert im Cluster eine konsistente, verteilte Speichergrundlage für VMs und Container.
Proxmox VE bindet externe Ceph-Cluster direkt an den Storage-Stack an. Dadurch lässt sich Ceph als Basis für den Datenspeicher in Proxmox VE nutzen. Admins können dadurch komplette virtuelle Maschinen (VMs) und LXC-Container auf Ceph-Speichern ablegen. Die Integration erfolgt über das RADOS Block Device (RBD) als Block Storage oder über CephFS für dateibasierte Abläufe. Der Vorteil liegt in konsistenten, verteilten Speicherobjekten, die auf allen Cluster-Knoten identisch sichtbar bleiben. VMs und Container nutzen dadurch hochverfügbaren, replizierten Speicher, der sich nahtlos in Live Migration, HA-Regeln (High Availability) und Snapshot-Mechanismen einfügt. Der Zugriff nutzt die Ceph-Clientbibliotheken, die Proxmox über eigene Paketquellen bereitstellt.
In der Beispielumgebung stellt ein externer Ceph-Server unter 10.0.80.13 die Monitore, Manager und OSD-Prozesse bereit. Proxmox liest diese Parameter in der Storage-Definition aus und erzeugt die passenden Client-Konfigurationen. Der Verbindungsaufbau umfasst die Monitor-Hosts, den RBD-Pool und Benutzer-Schlüssel. Die Authentifizierung nutzt Ceph-Keyrings, die in das Proxmox-System übertragen werden.
Darüber hinaus ist es auch möglich direkt auf dem Proxmox-Cluster einen Ceph-Cluster parallel zur Virtualisierungsumgebung zu installieren. In diesem Fall liegen auch die Dateien auf Proxmox, nicht auf einem externen Ceph-Cluster auch darauf gehen wir in diesem Beitrag ein.
Ceph für Proxmox vorbereiten
Administratoren erzeugen auf dem Ceph-Server unter 10.0.80.13 zuerst eine saubere Grundlage für den Zugriff. Dazu prüfen sie die vorhandenen Konfigurationsdateien im Verzeichnis /etc/ceph und identifizieren die Dateien ceph.conf und den passenden Keyring für den vorgesehenen Client-Benutzer. Beide Dateien definieren den Cluster-Zugang und müssen unverändert in das Proxmox-Cluster übertragen werden.
Auf einem Proxmox-Knoten wird das das benötigte Zielverzeichnis durch den Aufruf mkdir -p /etc/pve/priv/ceph erstellt. Dieses Verzeichnis liegt im Cluster-Dateisystem pmxcfs und steht nach dem Anlegen automatisch allen Knoten zur Verfügung. Danach werden die beiden Ceph-Dateien direkt in dieses Verzeichnis kopiert, zum Beispiel über scp oder einen lokalen Transfer. Der Inhalt kann danach mit cat /etc/pve/priv/ceph/ceph.conf überprüft werden. Sobald die Dateien im Cluster sichtbar sind, liest Proxmox die Konfiguration ein und erlaubt die Anlage eines neuen RBD-Storage über Datacenter -> Storage -> Add -> RBD.
In diesem Dialog werden die Monitor-Adresse 10.0.80.13 eingetragen, der Ceph-Pool ausgewählt und der importierte Keyring zugeordnet. Nach dem Speichern validiert Proxmox die Verbindung intern mit den Ceph-Bibliotheken. Der erfolgreiche Zugriff zeigt sich, wenn ein Aufruf wie rbd ls -p <pool> auf einem der Cluster-Knoten funktioniert. Ab diesem Zeitpunkt gilt die Ceph-Anbindung als aktiv und der Storage steht für virtuelle Maschinen und Container im gesamten Cluster zur Verfügung.
Damit ist der Block-Storage im Cluster sichtbar. Die VMs erhalten neue virtuelle Datenträger direkt auf dem Ceph-Pool. Die Ablage der Images folgt der gewohnten Struktur im Storage-Manager von Proxmox VE.
Nutzung von CephFS als Dateisystem
CephFS lässt sich in Proxmox ergänzend nutzen. Die Konfiguration erfolgt über Add -> CephFS anstatt RBD. Die Angaben orientieren sich an denselben Parametern wie bei RBD: Monitor-Hosts, User, Keyring und Pfad im CephFS-Namespace. CephFS eignet sich für ISO-Images, Templates und Backups, weniger für VM-Festplatten. In Proxmox entsteht nach dem Speichern ein mount-fähiges Dateisystem mit zentralem Zugriff aller Knoten.
Zusammenspiel von Cluster-Mechanismen und Ceph-Storage
Proxmox nutzt den Cluster-Stack mit pmxcfs und Corosync für die Verteilung der Storage-Definitionen. Sobald die Ceph-Einträge verfügbar sind, stehen sie auf proxmox1, proxmox2 und proxmox3 identisch bereit, wenn ein Cluster aus diesen drei Knoten besteht. In dieser Testumgebung gehen wir davon aus. Live Migration benötigt keinen zusätzlichen Transfer der Blockgeräte, weil RBD auf allen Hosts gleichermaßen sichtbar bleibt. Die Migration einer VM ohne lokale Datenträger:
qm migrate <vmid> proxmox2 --online
Der Zugriff auf den Ceph-Pool bleibt unverändert bestehen. Die Migration überträgt lediglich Speicherzustände und Gerätekonfigurationen.
Für HA-Strukturen erhöht Ceph die Zuverlässigkeit der Speicherzugriffe, da replizierte OSD-Daten nicht an einen bestimmten Proxmox-Host gebunden sind. HA-Regeln verschieben VMs im Fehlerfall auf andere Knoten ohne Datenkopie.
Speicherung von VM-Images direkt auf dem Ceph-Server
Der Ceph-Server 10.0.80.13 hält alle OSD-Daten, die Proxmox über RADOS ansteuert. Der Datenpfad liegt nicht in Proxmox selbst, sondern im Ceph-Cluster. Die Verwaltung des Objektpools erfolgt ausschließlich auf dem Ceph-Host. Wichtige Prüfkommandos sind:
Clusterstatus:
ceph -s
Pools anzeigen:
ceph osd pool ls
RBD-Informationen auslesen:
rbd info -p <pool> <image>
Damit ist sichergestellt, dass der externe Ceph-Server den vollständigen Speicherpfad bereitstellt und Proxmox über die API und Bibliotheken darauf zugreift.
Praxisprüfung im Proxmox-Cluster
Nach dem Anlegen des Ceph-Storages empfiehlt sich eine Kontrolle der Storage-Definitionen: pvesm status
Der Ceph-Pool erscheint dort mit dem Typ rbd oder cephfs. Im Anschluss lässt sich eine Test-VM anlegen, deren Festplatte auf ceph-rbd liegt. Die Anlage über die Weboberfläche erzeugt ein RBD-Image im Pool. Die Ceph-Shell bestätigt die Ablage.
Eine vollständige I/O-Prüfung erfolgt durch einen einfachen Schreibtest innerhalb der VM. Da Ceph repliziert, verteilt der Server unter 10.0.80.13 die Blöcke automatisch über die vorhandenen OSDs.
Der Ceph-Server unter 10.0.80.13 ist vollständig an das Proxmox-Cluster angebunden. RBD dient als performante und konsistente Storage-Schicht für VMs und Container. CephFS ergänzt die Ablage von Templates und Medien. Die Integration nutzt die internen Mechanismen des Proxmox-Clusters, verteilt die Storage-Definitionen automatisch und ermöglicht Live Migration ohne Datenkopie.
Ceph-Server direkt auf Proxmox betreiben: Vorbereitungen
Damit die Installation von Ceph ohne Konflikte verläuft, muss jeder Proxmox-Knoten zwei Voraussetzungen erfüllen. Erstens muss der Host erreichbar sein, also im Cluster sichtbar und ohne Fehlermeldungen ansprechbar sein. Zweitens muss ein physisches Laufwerk vorhanden sein, das derzeit keine Partitionen, kein Dateisystem und keine vorhandenen Daten enthält. Ceph nutzt ausschließlich solche leeren Datenträger, weil jeder OSD-Prozess ein komplettes Laufwerk kontrolliert und dabei alle vorhandenen Inhalte unwiderruflich überschreibt.
Ein ungenutztes Laufwerk ist ein Datenträger, der weder für das Betriebssystem noch für Proxmox-eigenes Storage wie LVM, ZFS oder Directory Storage eingebunden ist. Der Zustand lässt sich mit lsblk prüfen.
Ein Datenträger wie /dev/sdb ist geeignet, wenn dort keine Mount-Punkte, keine Partitionen und keine Dateisysteme angezeigt werden. Falls Partitionen vorhanden sind, müssen sie entfernt werden. Dies geschieht ausschließlich dann, wenn klar ist, dass das Laufwerk wirklich frei sein soll, was mit ceph-volume lvm zap /dev/sdb –destroy erreicht wird.
Der Befehl steht aber erst nach der Installation der Ceph-Binärdateien bereit. Das zeigen wir im nächsten Absatz.
Erst wenn alle Knoten erreichbar sind und ein solches freies Laufwerk besitzen, beginnt die eigentliche Ceph-Installation. Proxmox liefert hierfür ein eigenes Repository, das die passenden Ceph-Versionen bereitstellt. Dieses Repository muss auf jedem Knoten aktiviert werden, damit alle Hosts exakt dieselben Ceph-Pakete erhalten und keine Versionsabweichungen auftreten. Die Installation erfolgt durch den Befehl pveceph install.
Dieser Schritt trägt die Ceph-Paketquelle in das System ein und sorgt dafür, dass der Cluster später als Einheit arbeitet. Ohne diese Vorbereitung wäre eine konsistente Installation der Ceph-Dienste nicht möglich.
Nach der Vorbereitung aller Proxmox-Knoten beginnt der Aufbau des Ceph-Clusters. Jeder Host muss auf dem gleichen Softwarestand laufen. Wir gehen nachfolgend von der Einrichtung über SSH ein. Die installierte Version lässt sich mit dem Befehl pveversion
Prüfen. Anschließend erfolgt die Aktualisierung mittels apt update && apt full-upgrade -y reboot.
Danach erfolgt die Aktualisierung der Paketliste über apt update. Die Aktualisierung kann auch in der Weboberfläche über Updates -> Upgrades umgesetzt werden. Die Suche nach neuen Updates wird über Refresh durchgeführt.
Ceph-Cluster auf Proxmox initialisieren
Sobald die Ceph-Pakete auf dem Knoten bereitstehen, beginnt die eigentliche Initialisierung des Clusters. Die Initialisierung des Ceph-Clusters beginnt, sobald die Ceph-Pakete auf dem ersten Knoten installiert sind. Danach wird das interne Kommunikationsnetz definiert, in dem alle Ceph-Dienste arbeiten. In dieser Umgebung stellt das Subnetz 10.0.0.0/16 den vollständigen Bereich bereit, in dem sich die beteiligten Proxmox-Knoten bewegen. Der Initialisierungsschritt erzeugt die Cluster-Grundkonfiguration und verankert die Netzdefinition für alle weiteren Ceph-Komponenten. Der erforderliche Aufruf lautet pveceph init --network 10.0.0.0/16.
Proxmox legt dabei die zentrale ceph.conf im Cluster-Dateisystem ab und stellt sicher, dass alle weiteren Knoten automatisch dieselben Parameter verwenden. Direkt danach startet der erste Monitor als pveceph createmon --mon-address 10.0.8.60. Der Cluster enthält damit den ersten steuernden Dienst. Kontrollieren lässt sich das mit dem Befehl ceph -s.
Weitere Hosts werden nacheinander eingebunden, indem auch dort zuerst pveceph install und anschließend pveceph createmon eingegeben wird.
Wenn alle Monitore sichtbar sind, folgt die Vorbereitung der Datenträger. Ein Blick auf die vorhandenen Geräte gibt den Überblick mit lsblk. Jedes freie Laufwerk, zum Beispiel /dev/sdb, wird in eine OSD-Einheit überführt. Das erfolgt über pveceph createosd /dev/sdb.
Dieser Vorgang wird auf jedem Host für jedes vorgesehene Laufwerk durchgeführt. Die Struktur der OSDs lässt sich über ceph osd tree anzeigen. Im nächsten Schritt wird der Ceph-Manager erstellt. Die Installation erfolgt durch die Eingabe von pveceph createmgr.
Über den Bereich Datacenter steht ebenfalls der Menüpunkt Ceph zur Verfügung.
Ceph-Dashboard auf Proxmox nutzen
Danach wird das Dashboard-Modul aktiviert:
apt install ceph-mgr-dashboard
systemctl restart ceph-mgr@proxmox1
ceph mgr module enable dashboard
ceph dashboard create-self-signed-cert
Die Oberfläche ist anschließend über https://<IP>:8443 erreichbar. der Service lässt sich in der Shell durch ceph mgr services überprüfen.
Damit die Anmeldung funktioniert, muss das Dashboard ein Passwort aus einer Datei einlesen. Ceph akzeptiert kein Passwort als Klartextargument. Zuerst wird eine Datei mit dem gewünschten Passwort angelegt. Dazu geben Sie echo -n 'test' > /root/dashboard_pw.txt ein.
Danach liest Ceph diese Datei ein und setzt die Zugangsdaten:
ceph dashboard set-login-credentials admin -i /root/dashboard_pw.txt
Die Warnmeldung kann ignoriert werden. Sobald die Anmeldedaten übertragen sind, kann die Datei entfernt werden:
rm /root/dashboard_pw.txt
Eine erneute Prüfung der aktiven Managerdienste mit zeigt danach den verfügbaren Dashboard-Endpunkt als ceph mgr services an.
Der Aufbau eines neuen Pools erfolgt über den Aufruf pveceph pool create cephpool --size 3 --min_size 2 --pg_num 128. Ceph prüft während dieses Vorgangs, welche Parameter bereits im Cluster hinterlegt sind und welche Einstellungen neu angewendet werden müssen. Die gezeigte Ausgabe bestätigt, dass die Werte für Replikationsfaktor, Mindestanzahl der Kopien und Anzahl der Placement Groups bereits im Cluster registriert waren. Ceph übernimmt daher nur die Anwendung des internen Kennzeichens für RBD-Daten und setzt den Modus der automatischen PG-Skalierung auf warn. Diese Arbeitsweise gehört zur normalen Funktionsweise der Ceph-Poolverwaltung und zeigt, dass die angegebenen Parameter keine Änderungen mehr auslösen. Der Pool cephpool ist damit vollständig eingerichtet und bereit für die spätere Nutzung als RBD-Storage in Proxmox VE. Der Pool lässt sich über die Weboberfläche von Ceph bei Pools überprüfen und auch in der Weboberfläche von Proxmox bei Datacenter -> Ceph. Eine erneute Kontrolle erfolgt mit ceph -s.
Im nächsten Schritt folgt die Einbindung des Ceph-Clusters in Proxmox. Dazu öffnet man die Oberfläche, wählt im Menü den Bereich Datacenter, anschließend Storage und dann Add. In der Liste befindet sich der Eintrag RBD. Dort wird ein eindeutiger Name eingetragen, im Feld Monitor werden die IP-Adressen der Monitor-Knoten hinterlegt, im Feld Pool wird cephpool eingetragen und im Feld User lässt sich admin verwenden. Proxmox bezieht den Keyring automatisch aus der zuvor erzeugten Cluster-Struktur.
Die gleiche Einbindung lässt sich über die Shell ausführen:
pvesm add rbd ceph-storage --monhost 10.0.0.11,10.0.0.12,10.0.0.13 --pool cephpool --content images
Damit ist das Ceph-Cluster vollständig eingebunden. Proxmox verwendet die Pools anschließend für VM-Festplatten, Container-Volumes und weitere Speichervorgänge.