LXD Container bauen und konfigurieren

Inhalte

Linuxcontainer und der Container-Hypervisor LXD sind elemantare Tools, die jeder Adminsitrator kennen sollte. Mithilfe von Containern, kann man sowohl eigene Umgebungen für Programmen, als auch für komplette Betriebssystemen erstellen. So ist man in der Lage abgeschotte Container zu erstellen. Hier eine kleine Anleitung:

Voraussetzungen

  • Ubuntu 18.04 LTS
  • sudo rechte oder root
  • IP Adressen /24 oder /32

Um LXD zu benutzen, müssen wir es ersteinmal per APT installieren. Folgendes Befehl genügt schon aus. Wichtig ist zu wissen, dass wir auch die zfs Tools brauchen. Dies installeiren wir gleich mit.

sudo apt install zfsutils-linux
sudo apt install lxd

Nach der Installation erstellen wir unser Profil. Profile werden benutzt, um standardeigenschaften zu definieren. Wir rufen hierfür ein initialscript auf:

sudo lxd init

Hier können wir alle Fragen mit einem [Enter] bestätigen. [Enter] = default Antwort. Am Ende sind wir schon soweit. Wir können nun ein ersten Container bauen. Jedoch testen wir LXC/LXD mit einem list befehl.

lxc list

Sollten wir folgende Antwort sehen, ist LXD voll einsatzbereit.

Generating a client certificate. This may take a minute...
If this is your first time using LXD, you should also run: sudo lxd init
To start your first container, try: lxc launch ubuntu:16.04

+------+-------+------+------+------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+------+-------+------+------+------+-----------+

Nun erstellen wir ein Ubuntu LXC:

lxc launch ubuntu:18.04 <containernamen>

<containernamen> ersetzen wir mit einem beliebigen namen. Standardmäßig wird nun eine internen 10er IPv4 Adresse dem Container vergeben. Um dem Container eine feste IPv4 Adresse zu vergeben, werden wir nun eine Netzwerkbrige auf dem Host erstellen. Folgene Konfiguration geht davon aus, dass der Host nur eine physical Netzwerkkarte besietzt und dies mit eth0 benannt worden ist.

Auf dem Hostsystem

Wir gehen in unser Netzplan oder interface und erstellen nun eine Bridge:

auto br0
iface bro0 inet static
  address 192.168.100.125/24
  gateway 192.168.100.1
  dns-nameservers 8.8.8.8 8.8.4.4
  bridge_ports eth0
  bridge_fd 5
  bridge_stp yes

wenn netplan verwendet wird, sieht die konfiguration wie folgt aus:

# This file is generated from information provided by
# the datasource.  Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    ethernets:
        enth0:
            dhcp4: no
    version: 2
    bridges:
        br0:
            dhcp4: no
            addresses: [192.168.100.125/24]
            gateway4: 192.168.100.1
            nameservers:
                addresses: [8.8.8.8,8.8.4.4]
            interfaces: [eth0]

nun mit einem netplan applay die Netzwerkkonfiguration aktivieren. Ggf. mit einem netplan –debug apply überprüfen.

Nun hat unser Host die feste IP Adresse: 192.168.100.125

Dem Container eine feste IP Adresse zuordnen

Nachdem wir unserem Host eine feste Ip Adresse vergeben haben und dabei noch eine Bridge erstellt haben, fügen wir nun einem Container eine neue Netzwerkkarte hinzu. Dabei gilt.

parent=Host Bridge namen
name=dem im Container simulierte Netzwerkkarte

lxc config device add <containernamen> eth0 nic nictype=bridged parent=br0 name=eth0

Nun loggen wir uns in den Container per Bash ein:

lxc exec <containernamen> bash

und könenn ein neustart versuchen:

reboot

Nachdem reboot können wir uns die liste wieder aufrufen: lxc list

Dort sollte nun der Contaienr mit der IP Adresse zu sehen sein.

Ubuntu IP Adresse vergeben

Nun vergeben wir dem Container eien feste IP Adresse hinzu:

Bei Ubuntu ab Version 18.04 zum Netplan:

sudo nano /etc/netplan/50-cloud-init.yaml

Standardmäßig wird hier per DHCP eine Ip Adresse geholt. Deshalb sieht die Standardkonfiguration wie folgt aus:

# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s3:
      dhcp4: yes

Wir ändern die Konfiguration und geben dem Container eine feste IP Adresse an:

# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s3:
     dhcp4: no
     addresses: [192.168.1.110/24]
     gateway4: 192.168.1.1
     nameservers:
       addresses: [8.8.8.8,8.8.4.4]

Nun Speichern und aktivieren

sudo netplan apply

Bei einer Fehlermeldung könnten wir nochmals ein –debug anfügen, um mehr Inforamtionen zur Fehlermeldung zu bekommen.

sudo netplan --debug apply

Nützliche Befehle

#Übersicht aller Container
lxc list

#Snapshot erstellen
lxc snapshot <containernamen>

#Restore eines snaps
lxc restore <containernamen> snap0

#Aus einem Snap ein neuen Contaienr erstellen
lxc copy <containernamen>/snap0 <neuer_containernamen>

#Bridged anschauen
brctl show

Weitere nützliche Befehle

Aus Container, ein Template erstellen:

Variante 1:

lxc launch ubuntu:14.04 <containernamen>
lxc exec <containernamen> bash
<do whatever change you want>
lxc publish <containernamen> --alias <name_of_template>

Variante 2:

sudo apt install debootstrap
mkdir /tmp/<name_of_template>
sudo debootstrap sid /tmp/<name_of_template>

sudo chroot /tmp/<name_of_template>
<do whatever change you want>
exit

#Create Rootf Data
sudo tar -cvzf rootfs.tar.gz -C /tmp/<name_of_template> .

#Create metadata.yaml
nano metadate.yaml
>>
architecture: "x86_64"
creation_date: 1458040200 # To get current date in Unix time, use `date +%s` command
properties:
architecture: "x86_64"
description: "Debian Unstable (sid) with preconfigured Node.js repository (20171227)"
os: "debian"
release: "sid"
<<EOF

#Create Tar GZ of Metadata
tar -cvzf metadata.tar.gz metadata.yaml

#Import LXD Image
lxc image import metadata.tar.gz rootfs.tar.gz --alias <name_of_template_alias>

#Start Container
lxc launch <name_of_template_alias> <containernamen>

Weiterführende Links

Wie hilfreich war dieser Beitrag?

Klicke auf die Sterne um zu bewerten!

Durchschnittliche Bewertung 5 / 5. Anzahl Bewertungen: 1

Bisher keine Bewertungen! Sei der Erste, der diesen Beitrag bewertet.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert