KVM-Node: Unterschied zwischen den Versionen

Aus sourceDESK Wiki
Wechseln zu: Navigation, Suche
(Konfiguration)
 
(21 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 13: Zeile 13:
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
apt-get install qemu-kvm libvirt-bin
+
apt-get install qemu-kvm libvirt-bin bridge-utils uuid
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Zeile 25: Zeile 25:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Die Zeit können wir recht einfach synchronisieren:
+
Wir müssen nun sicherstellen, dass der Netzwerk-Manager von Debian deaktiviert ist:
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
ntpdate pool.ntp.org
+
systemctl stop NetworkManager.service
</syntaxhighlight>
+
systemctl disable NetworkManager.service
 
+
Um den SSH-Login schneller zu machen, bearbeiten wir die Datei ''/etc/ssh/sshd_config'' und fügen folgendes am Ende ein:
+
 
+
<syntaxhighlight lang="bash">
+
UseDNS no
+
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
Eine Portänderung von SSH ist möglich, auch wenn wir davon abraten. Wenn der Port geändert wird, auf jeden Fall einen Port kleiner als 1024 wählen! Passwort-Authentifizierung darf nicht deaktiviert werden.
 
Eine Portänderung von SSH ist möglich, auch wenn wir davon abraten. Wenn der Port geändert wird, auf jeden Fall einen Port kleiner als 1024 wählen! Passwort-Authentifizierung darf nicht deaktiviert werden.
  
Nach Änderung der Konfiguration müssen Sie den SSH-Server neustarten:
+
Jetzt kommt der komplizierteste Schritt bei KVM: Die Netzwerkkonfiguration. Wir nutzen hierzu eine Netzwerk-Brücke (Bridge).
 
+
<syntaxhighlight lang="bash">
+
service sshd restart
+
</syntaxhighlight>
+
  
Danach müssen wir die Datei ''/etc/sysctl.conf'' bearbeiten. Hier wird am Ende folgendes eingefügt:
+
Wir erstellen die Bridge ''br0'' mit folgendem Kommando von ''bridge-utils'':
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
net.ipv4.ip_forward = 1
+
brctl addbr br0
net.ipv4.conf.default.proxy_arp = 1
+
net.ipv4.conf.all.rp_filter = 1
+
kernel.sysrq = 1
+
net.ipv4.conf.default.send_redirects = 1
+
net.ipv4.conf.all.send_redirects = 0
+
net.ipv4.icmp_echo_ignore_broadcasts = 1
+
net.ipv4.conf.default.forwarding = 1
+
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Diese Werte müssen nun noch durch folgendes Kommando übernommen werden:
+
Als nächstes müssen wir einen Autostart der Bridge beim Server-Start einrichten. Wir gehen mit dieser Konfiguration davon aus, dass ''eth0'' zum Zugriff auf das Netzwerk durch den Server genutzt wird. Andernfalls muss das Interface entsprechend geändert werden. Wir müssen nun die Datei ''/etc/network/interfaces'' bearbeiten. Am Ende der Datei fügen wir folgende Konfiguration für die Bridge ein:
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
sysctl -p
+
auto br0
 +
iface br0 inet dhcp
 +
        bridge_ports eth0
 +
        bridge_stp off
 +
        bridge_fd 0
 +
        bridge_maxwait 0
 
</syntaxhighlight>
 
</syntaxhighlight>
  
In der Datei ''/etc/vz/vz.conf'' wird folgender Wert am Ende eingefügt:
+
Diese Konfiguration geht davon aus, dass DHCP für die IP-Adresse verwendet ist. Ist dies nicht der Fall, übernehmen Sie bitte die IP-Konfiguration von ''eth0''. ''eth0'' taucht später nicht mehr in der Konfigurations-Datei aus, das komplette Netzwerk läuft über die Bridge.
  
<syntaxhighlight lang="bash">
+
Wir starten den Server nun neu. Nach dem Neustart muss ''ifconfig'' zeigen, dass die Bridge ''br0'' eine IP-Adresse hat und ''eth0'' keine IP-Adresse mehr zugeordnet ist. Damit ist die Netzwerk-Konfiguration abgeschlossen.
NEIGHBOUR_DEVS=all
+
</syntaxhighlight>
+
  
Nun wird noch SELinux deaktiviert, dazu wird die Datei ''/etc/sysconfig/selinux'' bearbeitet. Der Wert der Variable ''SELINUX'' wird auf ''disabled'' gesetzt:
+
== Templates ==
 +
Da die Betriebssystem-Installation bei KVM vom Nutzer via VNC erfolgt, ist eine ISO-Datei notwendig, die dann beim Boot-Vorgang eingebunden wird. Es kann hier also theoretisch jedes Betriebssystem verwendet werden, auch Windows.
  
<syntaxhighlight lang="bash">
+
Die entsprechenden Distributionen kann man also direkt auf der jeweiligen Seite der Distribution herunterladen.
SELINUX=disabled
+
</syntaxhighlight>
+
  
Damit das System in den richtigen Kernel bootet, prüfen wir noch die Datei ''/etc/grub.conf''. Hier werden die Kernel über das Schlüsselwort ''title'' definiert. Hinter ''title'' folgt dann zum Beispiel ''OpenVZ''. Diese Einträge nummerieren wir im Kopf durch, der erste Eintrag ist Eintrag Nr. 0, der zweite Eintrag ist Nr. 1 usw. Wir merken uns die Nummer des Eintrages für OpenVZ. Nun steht in der gleichen Datei relativ weit am Anfang die Variable ''default'', zum Beispiel:
+
Der Einfachheit halber nutzt sourceDESK nur ISO-Dateien aus dem Verzeichnis ''/home/iso'', welches Sie anlegen müssen. Dorthin laden Sie bitte sämtliche ISO-Dateien, die Sie mit KVM verwenden möchten.
  
<syntaxhighlight lang="bash">
+
Zu Testzwecken laden wir einfach eine minimale Debian-Version mit Netinstall:
default=0
+
</syntaxhighlight>
+
 
+
Entspricht dieser Wert der Nummer des Eintrages für OpenVZ, sind wir mit der Konfiguration fertig. Wenn nicht, müssen wir die Nummer entsprechend anpassen und die Datei speichern. Danach muss folgender Befehl ausgeführt werden:
+
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
update-grub
+
mkdir -p /home/iso
 +
cd /home/iso
 +
wget http://cdimage.debian.org/debian-cd/8.5.0/amd64/iso-cd/debian-8.5.0-amd64-netinst.iso
 
</syntaxhighlight>
 
</syntaxhighlight>
  
== Templates ==
+
== Testen ==
Für OpenVZ müssen Betriebssystem-Templates für die vServer zur Verfügung stehen. Diese werden in das Verzeichnis ''/var/lib/vz/template/cache'' geladen und müssen die Endung ''.tar.gz'' haben.
+
Wir erstellen nun die Verzeichnisse ''/home/xml'' und ''/home/hdd'':
 
+
Wir laden nun ein erstes Template herunter, um dieses für einen Test-Server zu verwenden:
+
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
cd /var/lib/vz/template/cache
+
mkdir -p /home/xml
wget https://download.openvz.org/template/precreated/debian-7.0-x86_64-minimal.tar.gz
+
mkdir -p /home/hdd
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Weitere Templates können später hinzugefügt werden. Unter [https://download.openvz.org/template/precreated/] stehen viele bereits erstellte Templates zur Verfügung, man kann auch selbst Templates mittels ''debootstrap'' erstellen.
+
Wir erstellen nun die Datei ''/home/xml/test.xml'' mit folgendem Inhalt:
  
== Testen ==
+
<syntaxhighlight lang="xml">
Der Node sollte nun neugestartet werden:
+
<domain type='kvm'>
 
+
  <name>test</name>
<syntaxhighlight lang="bash">
+
  <uuid>f5b8c05b-9c7a-3211-49b9-2bd635f7e2aa</uuid>
reboot
+
  <memory>1048576</memory>
 +
  <currentMemory>1048576</currentMemory>
 +
  <vcpu>1</vcpu>
 +
  <os>
 +
    <type>hvm</type>
 +
    <boot dev='cdrom'/>
 +
  </os>
 +
  <features>
 +
    <acpi/>
 +
  </features>
 +
  <clock offset='utc'/>
 +
  <on_poweroff>destroy</on_poweroff>
 +
  <on_reboot>restart</on_reboot>
 +
  <on_crash>destroy</on_crash>
 +
  <devices>
 +
    <emulator>/usr/bin/kvm</emulator>
 +
    <disk type="file" device="disk">
 +
      <driver name="qemu" type="raw"/>
 +
      <source file="/home/hdd/test.img"/>
 +
      <target dev="vda" bus="virtio"/>
 +
      <address type="pci" domain="0x0000" bus="0x00" slot="0x04" function="0x0"/>
 +
    </disk>
 +
    <disk type="file" device="cdrom">
 +
      <driver name="qemu" type="raw"/>
 +
      <source file="/home/iso/debian-8.5.0-amd64-netinst.iso"/>
 +
      <target dev="hdc" bus="ide"/>
 +
      <readonly/>
 +
      <address type="drive" controller="0" bus="1" target="0" unit="0"/>
 +
    </disk>
 +
    <interface type='bridge'>
 +
      <source bridge='br0'/>
 +
      <mac address="00:00:A3:B0:56:10"/>
 +
    </interface>
 +
    <controller type="ide" index="0">
 +
      <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x1"/>
 +
    </controller>
 +
    <input type='mouse' bus='ps2'/>
 +
    <graphics type='vnc' port='-1' autoport="yes" listen='0.0.0.0'/>
 +
    <console type='pty'>
 +
      <target port='0'/>
 +
    </console>
 +
  </devices>
 +
</domain>
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Nachdem der Node wieder verfügbar ist, sollten wir den Kernel überprüfen:
+
Nun muss die Festplatte noch erstellt werden, wir nutzen hierzu qcow2 als Image-Format:
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
uname -r
+
qemu-img create -f qcow2 /home/hdd/test.img 10G
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Sofern die Ausgabe nun etwas mit ''stab'' zeigt, ist alles korrekt. Andernfalls müssen wir den Bootloader (Grub) noch einmal prüfen.
+
Damit haben eine 10 GB große Festplatte und erstellen nun den vServer mit einem CPU-Kern und 1 GB RAM:
 
+
Wir sollten nun einen Test-vServer erstellen, um das System zu testen. Dafür verwenden wir folgende Kommandos:
+
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
vzctl create 101 --ostemplate debian-7.0-x86_64-minimal
+
virsh create /home/xml/test.xml
vzctl set 101 --onboot yes --save
+
vzctl set 101 --ipadd <ip> --save
+
vzctl set 101 --ipadd <ip6> --save
+
vzctl set 101 --nameserver 8.8.8.8 --save
+
vzctl set 101 --nameserver 8.8.4.4 --save
+
vzctl set 101 --hostname test --save
+
vzctl set 101 --diskspace 10G:10G --save
+
vzctl set 101 --userpasswd root:test1234
+
vzctl set 101 --vmguarpages 1024M --save
+
vzctl set 101 --oomguarpages 1024M --save
+
vzctl set 101 --privvmpages 1024M:1024M --save
+
vzctl set 101 --cpus 1 --save
+
vzctl start 101
+
 
</syntaxhighlight>
 
</syntaxhighlight>
 
''<ip>'' muss durch eine IPv4-Adresse ersetzt werden. Wenn eine IPv6-Adresse vorhanden ist, bitte ''<ip6>'' durch diese ersetzen - ansonsten bitte die ganze Zeile löschen.
 
  
 
Nach der Ausführung aller Kommandos sollte der vServer erreichbar sein. Hier sollten ein paar kleine Tests durchgeführt werden, wichtig ist hier insbesondere die Konnektivität (Node -> vServer, vServer -> Node, Internet -> vServer, vServer -> Internet). Sofern IPv6 verwendet werden soll, unbedingt auch IPv6 testen, dies ist häufig ein Problem.
 
Nach der Ausführung aller Kommandos sollte der vServer erreichbar sein. Hier sollten ein paar kleine Tests durchgeführt werden, wichtig ist hier insbesondere die Konnektivität (Node -> vServer, vServer -> Node, Internet -> vServer, vServer -> Internet). Sofern IPv6 verwendet werden soll, unbedingt auch IPv6 testen, dies ist häufig ein Problem.
Zeile 145: Zeile 152:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
== Freie IP-Adressen ==
+
== IP-Adressen ==
Damit sourceDESK weiß, welche IP-Adressen für die vServer noch zur Verfügung stehen, muss die Datei ''/root/free-v4.txt'' und/oder ''/root/free-v6.txt'' angelegt werden. In diese Dateien wird pro Zeile eine freie IPv4-/IPv6-Adresse eingetragen.
+
Sie müssen die verfügbaren IP-Adressen in der [[IP-Verwaltung]] des Produkts eintragen.
 
+
Beispiel:
+
 
+
<syntaxhighlight lang="bash">
+
1.2.3.4
+
5.6.7.8
+
9.0.1.2
+
</syntaxhighlight>
+
  
 
== Hinzufügen ==
 
== Hinzufügen ==
Beim Hinzufügen eines Produktes in sourceDESK muss nur der Hostname (eventuell mit geändertem SSH-Port, zum Beispiel vz01.sourceway.de:923) und das Root-Passwort angegeben werden.
+
Beim Hinzufügen eines Produktes in sourceDESK muss nur der Hostname (eventuell mit geändertem SSH-Port, zum Beispiel vm01.sourceway.de:923) und das Root-Passwort angegeben werden.
  
 
Sie können sodann die Einstellungen für den vServer vornehmen, hier können Sie die Anzahl der CPU-Kerne, den Arbeitsspeicher und die Festplatte einstellen.
 
Sie können sodann die Einstellungen für den vServer vornehmen, hier können Sie die Anzahl der CPU-Kerne, den Arbeitsspeicher und die Festplatte einstellen.

Aktuelle Version vom 20. November 2018, 10:58 Uhr

Diese Anleitung beschreibt die Konfiguration von KVM-Nodes für das sourceDESK-Plugin für KVM-vServer. Als System wird hier Debian 8 verwendet, dies sollte 64-bit sein, auch wenn 32-bit theoretisch von KVM unterstützt wird.

Software-Installation

Zuerst prüfen wir, ob die verbaute CPU Hardware-Virtualisierung unterstützt.

egrep '(vmx|svm)' --color /proc/cpuinfo

In der Ausgabe muss vmx oder svm auftauchen, ansonsten kann die CPU nicht für KVM verwendet werden.

Nun installieren wir KVM und Tools zur Verwaltung.

apt-get install qemu-kvm libvirt-bin bridge-utils uuid

Konfiguration

Zuerst sollte der Hostname des Nodes konfiguriert werden. Dieser wird in die Datei /etc/hostname eingetragen und über das Kommando hostname gesetzt.

Die System-Zeit und die Zeitzone sollte überprüft werden, diese Einstellungen müssen korrekt sein. Die Zeitzone können wir wie folgt auf die deutsche Zeitzone stellen:

dpkg-reconfigure tzdata

Wir müssen nun sicherstellen, dass der Netzwerk-Manager von Debian deaktiviert ist:

systemctl stop NetworkManager.service
systemctl disable NetworkManager.service

Eine Portänderung von SSH ist möglich, auch wenn wir davon abraten. Wenn der Port geändert wird, auf jeden Fall einen Port kleiner als 1024 wählen! Passwort-Authentifizierung darf nicht deaktiviert werden.

Jetzt kommt der komplizierteste Schritt bei KVM: Die Netzwerkkonfiguration. Wir nutzen hierzu eine Netzwerk-Brücke (Bridge).

Wir erstellen die Bridge br0 mit folgendem Kommando von bridge-utils:

brctl addbr br0

Als nächstes müssen wir einen Autostart der Bridge beim Server-Start einrichten. Wir gehen mit dieser Konfiguration davon aus, dass eth0 zum Zugriff auf das Netzwerk durch den Server genutzt wird. Andernfalls muss das Interface entsprechend geändert werden. Wir müssen nun die Datei /etc/network/interfaces bearbeiten. Am Ende der Datei fügen wir folgende Konfiguration für die Bridge ein:

auto br0
iface br0 inet dhcp
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0
        bridge_maxwait 0

Diese Konfiguration geht davon aus, dass DHCP für die IP-Adresse verwendet ist. Ist dies nicht der Fall, übernehmen Sie bitte die IP-Konfiguration von eth0. eth0 taucht später nicht mehr in der Konfigurations-Datei aus, das komplette Netzwerk läuft über die Bridge.

Wir starten den Server nun neu. Nach dem Neustart muss ifconfig zeigen, dass die Bridge br0 eine IP-Adresse hat und eth0 keine IP-Adresse mehr zugeordnet ist. Damit ist die Netzwerk-Konfiguration abgeschlossen.

Templates

Da die Betriebssystem-Installation bei KVM vom Nutzer via VNC erfolgt, ist eine ISO-Datei notwendig, die dann beim Boot-Vorgang eingebunden wird. Es kann hier also theoretisch jedes Betriebssystem verwendet werden, auch Windows.

Die entsprechenden Distributionen kann man also direkt auf der jeweiligen Seite der Distribution herunterladen.

Der Einfachheit halber nutzt sourceDESK nur ISO-Dateien aus dem Verzeichnis /home/iso, welches Sie anlegen müssen. Dorthin laden Sie bitte sämtliche ISO-Dateien, die Sie mit KVM verwenden möchten.

Zu Testzwecken laden wir einfach eine minimale Debian-Version mit Netinstall:

mkdir -p /home/iso
cd /home/iso
wget http://cdimage.debian.org/debian-cd/8.5.0/amd64/iso-cd/debian-8.5.0-amd64-netinst.iso

Testen

Wir erstellen nun die Verzeichnisse /home/xml und /home/hdd:

mkdir -p /home/xml
mkdir -p /home/hdd

Wir erstellen nun die Datei /home/xml/test.xml mit folgendem Inhalt:

<domain type='kvm'>
  <name>test</name>
  <uuid>f5b8c05b-9c7a-3211-49b9-2bd635f7e2aa</uuid>
  <memory>1048576</memory>
  <currentMemory>1048576</currentMemory>
  <vcpu>1</vcpu>
  <os>
    <type>hvm</type>
    <boot dev='cdrom'/>
  </os>
  <features>
    <acpi/>
  </features>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <devices>
    <emulator>/usr/bin/kvm</emulator>
    <disk type="file" device="disk">
      <driver name="qemu" type="raw"/>
      <source file="/home/hdd/test.img"/>
      <target dev="vda" bus="virtio"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x04" function="0x0"/>
    </disk>
    <disk type="file" device="cdrom">
      <driver name="qemu" type="raw"/>
      <source file="/home/iso/debian-8.5.0-amd64-netinst.iso"/>
      <target dev="hdc" bus="ide"/>
      <readonly/>
      <address type="drive" controller="0" bus="1" target="0" unit="0"/>
    </disk>
    <interface type='bridge'>
      <source bridge='br0'/>
      <mac address="00:00:A3:B0:56:10"/>
    </interface>
    <controller type="ide" index="0">
      <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x1"/>
    </controller>
    <input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='-1' autoport="yes" listen='0.0.0.0'/>
    <console type='pty'>
      <target port='0'/>
    </console>
  </devices>
</domain>

Nun muss die Festplatte noch erstellt werden, wir nutzen hierzu qcow2 als Image-Format:

qemu-img create -f qcow2 /home/hdd/test.img 10G

Damit haben eine 10 GB große Festplatte und erstellen nun den vServer mit einem CPU-Kern und 1 GB RAM:

virsh create /home/xml/test.xml

Nach der Ausführung aller Kommandos sollte der vServer erreichbar sein. Hier sollten ein paar kleine Tests durchgeführt werden, wichtig ist hier insbesondere die Konnektivität (Node -> vServer, vServer -> Node, Internet -> vServer, vServer -> Internet). Sofern IPv6 verwendet werden soll, unbedingt auch IPv6 testen, dies ist häufig ein Problem.

Anschließend kann der vServer heruntergefahren und entfernt werden:

vzctl stop 101
vzctl destroy 101

IP-Adressen

Sie müssen die verfügbaren IP-Adressen in der IP-Verwaltung des Produkts eintragen.

Hinzufügen

Beim Hinzufügen eines Produktes in sourceDESK muss nur der Hostname (eventuell mit geändertem SSH-Port, zum Beispiel vm01.sourceway.de:923) und das Root-Passwort angegeben werden.

Sie können sodann die Einstellungen für den vServer vornehmen, hier können Sie die Anzahl der CPU-Kerne, den Arbeitsspeicher und die Festplatte einstellen.