Debian PVE

Aus Wiki
Zur Navigation springen Zur Suche springen

Introduction

Proxmox Virtual Environment (PVE) basiert auf Debian und bringt einen eigenen Kernel mit. PVE erlaubt die Konfiguration des Hosts und der Gäste im Webbrowser auf sehr komfortable Art und Weise. Es können LXC und KVM Gäste verwaltet werden. Es gibt Templates zum Download und eigene Templates können selbst angelegt werden auf der Basis von bereits vorhandenen LXC-Containern. Bereits existente LXC-Container werden leider nicht direkt von PVE verwaltet, laufen aber weiterhin. Dennoch sollten die Container in Proxmox importiert werden, um von allen PVE Vorteilen zu profitieren. Jedem Container kann z.B. die max. Anzahl von CPU-Kernen, max. RAM und Festplattenplatz zugewiesen werden. PVE verwedet IDs (im Gegensatz zu LXC) für LXC und KVM Gäste, zeigt aber dennoch einen Namen/Bezeichner an. Es können priviledged und unpriviledged Container angelegt werden (Unterschied siehe im Internet). Es können PVE Cluster angelegt werden und die Gäste zwischen den einzelnen Hosts migriert werden. Alles im Webbrowser. PVE kann direkt mittels einer ISO-Datei installiert werden. Es kann aber auch auf einem bereits laufenden Debian Buster Host installiert werden. Hier wird lediglich die 2. Methode beschrieben.

Host vorbereiten

Hosts Eintrag in /etc/hosts

vi /etc/hosts

Es muss ein Eintrag mit der IP-Adresse vorhanden sein. Defaultmäßig verwendet Debian einen Eintrag in der Form:

127.0.1.1 hostname.localdomain hostname

Diesen Eintrag abändern:

192.168.x.y hostname.localdomain hostname

Prüfen:

hostname --ip-address

Ausgabe sollte sein

192.168.x.y 


Installation

Proxmox Repository hinzufügen:

echo "deb http://download.proxmox.com/debian/pve buster pve-no-subscription" > /etc/apt/sources.list.d/pve-install-repo.list

Repository Key:

wget http://download.proxmox.com/debian/proxmox-ve-release-6.x.gpg -O /etc/apt/trusted.gpg.d/proxmox-ve-release-6.x.gpg
chmod +r /etc/apt/trusted.gpg.d/proxmox-ve-release-6.x.gpg  # optional, if you have a non-default umask

Apt auf aktuellen Stand bringen:

apt-get update
apt-get upgrade

Installation der Proxmox Pakete:

apt-get install proxmox-ve postfix open-iscsi

os-prober entfernen

apt-get remove os-prober

Debian Kernel entfernen

Nachdem Proxmox einen eigenen Kernel (aktuell: 5.4) verwendet, können die "alten" Debian Kernel entfernt werden:

apt-get remove linux-image-amd64 'linux-image-4.19*'

Grub Bootloader aktualisieren:

update-grub

Proxmox Webpage aufrufen

Die Proxmox PVE Webseite ist auf Port 8006 erreichbar im Webbrowser http://IP-PVE:8006 mit user=root und password=root_pwd anmelden

==ZFS Filesystem

Einleitung

ZFS ist ein modernes Filesystem, das erheblich mehr Funktionen bietet, als EXT4, das seit vielen Jahren das Standard Filesystem unter Linux ist. Proxmox verwendet per Default ZFS, da dies einige spezielle Funktionen von Proxmox erst möglich macht. Es bietet z.B. Snapshots, die das aktuelle Filesystem festhält und relativ einfach auf einn anderes ZFS Filesystem gesichert werden kann. Der neue Snapshot belegt dabei nur das Delta zum vorherigen Snapshot auf der Festplatte. Beim Backup auf einen anderen Server können inkrementelle Backups zum Einsatz kommen, bei dem lediglich dieses Delta zum vorherigen Backup übertragen werden muss. ZFS hat builtin Raid Funktionen, die bei EXT4 via mdadm realisiert wird. Einschränkung: Erweiterung eines Raid Verbunds mit weiteren Festplatten zur Vergrüßerunng des Speicherplatzes wird derzeit (noch) nicht unterstützt. Unter BSD ist diese Funktion bereits enthalten, sodass davon auszugehen ist, dass ZFS auch unter Linux diese Funktion früher oder später lernen wird.

Grundlagen

check Pool Status

zpool status

Ausgabe z.B.:

  pool: rpool
 state: ONLINE
  scan: scrub repaired 0B in 00:07:05 with 0 errors on Sun Feb 14 00:31:06 2021
config:

        NAME                               STATE     READ WRITE CKSUM
        rpool                              ONLINE       0     0     0
          nvme-eui.0025385201418a6e-part3  ONLINE       0     0     0

errors: No known data errors


rpool (root pool) wird von Proxmox per Default verwendet, um das Betriebssystem zu installieren und auch als Speicherplatz für LXC Cotainer, Virtual Machines, Templates, Backups usw. Für das ablegen der Fielsysteme der CT und VM kommt dabei per Default der Directory Modus zum Einsatz, bei dem - wie der Name bereits andeutet - Verzeichnisse im Root-Filesystem vo Proxmox an. Effektiver ist es, sog. ZFS Subvolumes im ZFS rpool (oder einem zusätzlich agelegten ZFS Storage Pool) angelegt.

ZFS Pool anlegen

  • in denn folgenden Beispielen wird ein neuer Storage Pool (spool) angelegt. Poolname kann beliegig gewählt werden.
  • Es empfiehlt sich die Fesplatten per ID zu identifizieren, anstatt mittels /dev/sdx
  • es ist jeweils 1 Beispiel mittels /dev/sdx , als auch /dev/desk/by-id/ata-x aufgeführt. Nachdem die Ids sehr lagne sind, sind diese mittels ata-x abgekürzt
zpool create -f -o ashift=12 <pool> <device>
z.B. ZFS Pool in Partition einer Festplatte
zpool create -f -o ashift=12 spool /dev/sdb2
zpool create -f -o ashift=12 spool /dev/disk/by-id/ata-Samsung_SSD_xyz-part2


ZFS Raid Modi

RAID 0: (minimum 1 Festplatte)

zpool create -f -o ashift=12 <pool> <device1> <device2>
z.B.
zpool create -f -o ashift=12 spool /dev/sdb /dev/sdc
zpool create -f -o ashift=12 spool /dev/disk/by-id/ata-b /dev/disk/by-id/ata-c

RAID-1 (minimum 2 Festplatten):

zpool create -f -o ashift=12 <pool> mirror <device1> <device2>
z.B.
zpool create -f -o ashift=12 spool mirror /dev/sdb /dev/sdc
zpool create -f -o ashift=12 spool mirror /dev/disk/by-id/ata-b /dev/disk/by-id/ata-c 

RAID-10 (minimum 4 Festplatten):

zpool create -f -o ashift=12 <pool> mirror <device1> <device2> mirror <device3> <device4>
z.B.
zpool create -f -o ashift=12 <pool> mirror /dev/sdb /dev/sdc mirror /dev/sdd /dev/sde
zpool create -f -o ashift=12 <pool> mirror /dev/disk/by-id/ata-b /dev/disk/by-id/ata-c mirror /dev/disk/by-id/ata-d /dev/disk/by-id/ata-e

RAIDZ-1 (vergleichbar Raid 5, minimum 3 Festplatten)

zpool create -f -o ashift=12 <pool> raidz1 <device1> <device2> <device3>
z.B.
zpool create -f -o ashift=12 <pool> raidz1 /dev/sdb /dev/sdc /dev/sdd
zpool create -f -o ashift=12 <pool> raidz1 /dev/disk/by-id/ata-b /dev/disk/by-id/ata-c /dev/disk/by-id/ata-d

RAIDZ-2 (vergleichbar Raid 6, minimum 4 Festplatten)

zpool create -f -o ashift=12 <pool> raidz2 <device1> <device2> <device3> <device4>
z.B. 
zpool create -f -o ashift=12 <pool> raidz2 /dev/sdb /dev/sdc /dev/sdd /dev/sde
zpool create -f -o ashift=12 <pool> raidz2 /dev/disk/by-id/ata-b /dev/disk/by-id/ata-c /dev/disk/by-id/ata-d /dev/disk/by-id/ata-e

Pool Raid Status:

zpool status

Ausgabe z.B.

  pool: rpool
 state: ONLINE
  scan: scrub repaired 0B in 00:07:05 with 0 errors on Sun Feb 14 00:31:06 2021
config:

        NAME                               STATE     READ WRITE CKSUM
        rpool                              ONLINE       0     0     0
          nvme-eui.0025385201418a6e-part3  ONLINE       0     0     0

errors: No known data errors

  pool: spool
 state: ONLINE
  scan: scrub repaired 0B in 02:23:46 with 0 errors on Sun Feb 14 02:47:48 2021
config:

        NAME         STATE     READ WRITE CKSUM
        spool        ONLINE       0     0     0
          raidz1-0   ONLINE       0     0     0
            ata-b    ONLINE       0     0     0
            ata-c    ONLINE       0     0     0
            ata-d    ONLINE       0     0     0

errors: No known data errors

Defekte Festplatte in einem Raid System ersetzten:

zpool replace -f <pool> <old device> <new device>
z.B. defekte Platte /dev/sdc durch neue /dev/sdf in Raid-Z1 ersetzen:
zpool replace -v spool /dev/sdc /dev/sdf
tpool replace -v spool /dev/disk/by-id/ata-c /dev/disk/by-id/ata-f

Status des Rebuild (Resilvering unter ZFS genannt):

zpool status -v


ZFS export / import

um einen ZFS Pool zu exportieren/auszuhägen:

zpool export <pool>

Pool importieren am selben Rechner:

zpool import <pool>

falls dies nicht funktionieren sollte:

zpool import -d /dev/disk/by-id/ata-b -d /dev/disk/by-id/ata-c ... <pool>

Pool an neuem Rechner/neu installiertes Betriebssystem importieren:

zpool import -d /dev/disk/by-id/ata-b -d /dev/disk/by-id/ata-c ... <pool> -f

mit obigen import Möglichkeitenn wird der Pool jeweils unter /<pool> eingehägt um einen anderen Mountpoint zu vergebe:

zpool import -D /mount/point -d /dev/disk/by-id/ata-b -d /dev/disk/by-id/ata-c ... <pool


ZFS Datasets

in einem nackten ZFS Pool können noch keine Daten gespeichert werden. Daten werden in sog. Datasets abgelegt. Datasets anzeigen:

zfs list
Ausgabe z.B.
NAME                                  USED  AVAIL     REFER  MOUNTPOINT
rpool                                 280G   619G      221M  /rpool
rpool/ROOT                           4.68G   619G       96K  /rpool/ROOT
rpool/ROOT/pve-1                     4.68G   619G     4.16G  /
rpool/data                             96K   619G       96K  /rpool/data

Proxmox PVE ist im Dataset rpool/Root/pve-1 installiert. pve-1 ist dabei ein Sub-Dataset vom Root Dataset. Datasets können also logisch kaskadiert werden.

Dataset anlegen

zfs create datasetname
z.B.
zfs create spool/dokumente
zfs create spool/filme
zfs create spool/samba
usw.

Vorteil mehrer Datasets gegenüber nur einem, in dem normale Unterverzeichnisse angelegt werden: Für jedes Dataset können separat snapshots angelegt werdenn. Z.B. um häufig geänndnerte Files häufiger zu sichern, als statische Daten wie z.B. CD-Images.

Datasets werden unter /poolname/dataset gemounted. D.h. obiges dataset spool/dokumente wird unter /spool/dokumente gemouted.


Dataset umbenennen:

zfs rename spool/old spool/new

Dataset zerstören:

zfs destroy /spool/datasetname


ZFS Compression

ZFS bietet die Möglichkeit Daten automatisch zu komprimieren, um Speicherplatz zu sparen:

zfs set compression=<algorithm> <dataset>

oder

zfs set compression=<algorithm> <pool>

Compressionsalgorithmus <algorithm>:

  • off: keine Kompression
  • lz4 (von Proxmox empfohlen, wenig Rechenleistungsbedarf)
  • lzjb
  • gzip-1 ... gzip-9 (1=schnellste, 9=beste Kompression)


Die Eistellung wird auf tieferliegende Datasets vererbt. D.h. wenn Compression auf Pool-Ebene eingeschaltet wird, wird sie für jedes Dataset vererbt. für einzelne Datasets kann sie dann bewusst deaktiviert werden. Funktioniert auch umgekehrt. Auf pool-Ebene off und für einzelne Datasets aktivieren.

Im Pool/Dataset bereits vorhandene Daten werden nach dem aktivieren der Compression nicht nachträglich komprimiert. Die Einstellung betrifft immer nur neu geschriebene Daten.

Datasets für Proxmox Gäste

Container und VMs können von den ZFS Features profitieren, wenn für jeden Gast ein eigenes Dataset verwendet wird, anstatt die Files im Root-FS von Proxmox abzulegen. Proxmox übernimmt dabei komplett die verwaltung der Datasets (anlegen beim anlegen eines Gastes, destroy beim löschen eines Gastes). Damit PVE dieses Feature nutzt, muss unter PVE/Datacenter/Storage ein ZFS Storage Element angelegt werden:

  • add/ZFS
    • ID: Beliebig, z.B. ZFS1
    • ZFS Pool: ZFS Pool in dem die Gäste abgelegt werden sollen. Z.B. rpool oder spool
    • Content: Disk Image, Container
    • add anklicken


Snapshots

Snapshots anlegen: mittels Sapshots kann der aktuelle Zustand des Filesystems "eingefroren" werden. Diese Snapshots können in andere Pools / andere Pools auf anderen Rechner kopiert werden. Snapshots können auch wieder hergestellt werden, um zum Filesystem Zustand zum Zeitpunkt des Snapshots zurückzukehren.

zfs snapshot dataset@snapshotname
z.B. Snapshot sonntag-cw10 vom Dataset spool/dokumente
zfs snapshot spool/dokumente@sonntag-cw10

Snapshots anzeigen

zfs list -t snapshot pool/dataset

Snapshot in anderen Pool übertragen: Snapshot snapshot-source in den Pool dest-pool übertragen:

zfs send snapshot-source dest-pool/dest-dataset
z.B.
zfs send spool/dokumente@sonntag-cw10 backup/dokumente  

Snapshot auf anderen PC übertragen:

zfs send snapshot-source|ssh dest-pc zfs recv dest-pool/dest-dataset
z.B. 
zfs send spool/dokumente@sonntag-cw10 | ssh backup-pc zfs recv backup/dokumente

Snapshot inkrementell übertragen: Im Gegensatz zu vorherigem Beispiel, muss nur das Delta zum vorherigen Snapshot übertragen werden.

zfs send -i snapshot-source1 snapshot-source2 |ssh dest-pc zfs recv dest-pool/dest-dataset
z.B. 
zfs send spool/dokumente@sonntag-cw10 spool/dokumente@sonntag-cw9 | ssh backup-pc zfs recv backup/dokumente


LXC-Container anlegen

  • PVE Webpage im Browser öffnen
  • Create CT (Create Container) anklicken
  • Unter General folgende Eingaben vornehmen:
    • eine beliebige ID (z.B. letzte Stelle der IP-Adresse) unter CT ID
    • Hostname vergeben, z.B. debianpve
    • Password für den root-User eingeben und unter Confirm Password wiederholen
    • Priviledged Container je nach Bedarf
  • Unter Template das gewünschte Template auswählen (evtl. erst downloaden, oder selbst anlegen siehe unten)
  • Im Bereich Root Disk die maximal zugeteilte Festplattengröße vergeben. Auf der Festplatte belegt der Container lediglich soviel Platz, wie die Files belegen, maximal jedoch die angegebene Größe. Die Größe kann auch im Nachgang noch erhöht werden
    • Disk Size: Größe in GB
    • Storage: Lokalen Storage oder ZFS Storage (siehe Beschreibung oben) auswählen. Bevorzugt, ZFS
  • Im Bereich CPU die Anzahl der CPU Kerne vorgeben
  • Im Bereich Memory den maximal zur Verfügung Speicher zuteilen. Identische Hinweise wie bei Root Disk gelten auch hier.
  • Im Bereich Network
    • Name': Name des ehternet device im Container
    • MAC Adress vorgeben, oder leer lassen, um diese automatisch zu vergeben
    • IPV4 static oder DHCP
      • bei statisch: IPV4/CIDR: fixed Ip-Adresse vorgeben
      • bei statisch: Gateway: IP-Adresse des Routers
  • im Bereich DNS evtl. lokale DNS-Domain vergeben
  • Unter Confirm ist eine Zusammenfassung wichtiger Settings aufgeführt.
  • Falls alle Eingaben den Wünschen entsprechen, mittels Button Finish bestätigen

Nach dem Anlegen des Containers erscheint dieser in der Auflistung und kann gestartet werden.


LXC-Container importieren

Für den Import des aktuellenn LXC-Containers debian_old wird ein Tar-Archiv angelegt (my_debian_template), das als template für PVE fungiert. Anschließend wird ein neuer LXC-Container in PVE auf Basis des Templates erstellt Export: LXC-Container stoppen

lxc-stop -n debian_old

ins Filesystem des Containers debian_old wechseln, und ein tar-archiv anzulegen:

cd /var/lib/lxc/debian_old
tar -czvf /var/lib/vz/template/cache/my_debian_template.tar.gz ./

Import: Wie unter LXC-Container anlegen beschrieben eben erstelltes Template my_debian_template.tar.gz verwenden

LXC-Template erstellen

beim Import wurde bereits eine Möglichkeit beschrieben, wie ein Template angelegt werden kann. Diese Möglichkeit übernimmt aber auch viele Dinge mit ins Template, die zum kreeiren eines generellen Templates, aus dem mehrere LXC-Container generiert werden können/sollen nicht erwünscht sein kann. Ein derartiges Template enthält z.B. die komplette Bash-History usw. Fürs transferieren/import in PVE ist dies dagegen durchaus wünschenswert.

Vorgehensweise:

  • Container mit allen Updates und gewünschten Debian Paketen und Einstellungen erstellen
  • Als User root am laufenden Container anmelden (SSH/Console in PVE)
apt-get clean
apt-get autoclean
apt-get autoremove
rm /etc/hostname
rm /etc/resolv.conf
rm /root/.bash_history
  • Container stoppen
  • Netzwerk Interfaces entfernen
  • Backup anfertigen mit den Einstellungen Mode=Stop und Compressionn=GZip
  • auf dem PVE Host in den Backup-Ordnner (default: /var/lib/vz/dump/) wechseln
cd /var/lib/vz/dump/
  • Erstelltes Backup in den Template Ordner verschieben
mv backup.tar.gz /var/lib/vz/template/cache/template.tar.gz


CT und VM Backups

PVE bietet eine komfortable Backup Funktion zum automatischen Backup von Containern und Vrituallen Maschinen in PVE Datacenter/Backup auswählen und add anklicken

  • Storage: Vorhandenen Storage für Backups auswählen. Dieser muss evtl. vorher im Storage Manager angelegt werden
  • Day of Week: gewünschte Tage des Backups auswählen
  • Start Time: Uhrzeit des Backups
  • Email notification: je nach Wunsch, immer oder nur bei Fehler
  • Mode: Snapshot
  • Selection Mode: Include Selected VMs
  • für Backups gewünschte VMs und Container auswählen
  • add anklicken