GNU/Linux >> Znalost Linux >  >> Debian

Jak nastavit virtuální kontejnery s podporou LXC a kvót na Debianu 8

Podpora kvót je často požadovaná funkce v lxc. Kvóta souborového systému Linux je vyžadována, když chcete dát více uživatelům přístup ke kontejneru a chcete mít pod kontrolou, že jeden uživatel nevyužívá celý prostor na disku. Kvóta je také vyžadována pro webhostingové servery, např. s ISPConfig 3 ze stejného důvodu:jeden web nebude schopen zaplnit celý disk. Tento návod vám ukáže, jak můžete použít lxc s kvótou pevného disku pomocí qemu nbd s obrazovým souborem qcow v Debianu 8 .

Předpoklady

Chcete-li používat lxc, potřebujete nástroje qemu a samotný balíček lxc. Nainstalujte je zavoláním:

apt-get install lxc qemu-utils

Instalační program vás požádá o výběr adresáře, kam se později nainstalují obrazy virtuálního počítače lxc. Tento adresář by měl být na oddílu se spoustou volného místa. Pokud máte v /var dostatek místa, přijměte výchozí /var/lib/lxc, v opačném případě zvolte volný adresář na svém největším oddílu. Pokud použijete jinou než výchozí cestu, ujistěte se, že jste změnili cestu ve všech příkazech a konfiguračních souborech níže.

Příprava

Zkontrolujte, zda je modul kernel loop načten s:

lsmod | grep '^loop'

Pokud se výsledek nezobrazí, můžete modul aktivovat spuštěním:

modprobe loop

Vytvořit virtuální počítač

Nyní můžeme začít vytvářet VM. V tomto tutoriálu použiji Debian Jessie v hostiteli i v kontejneru, ale můžete samozřejmě použít i jiné šablony lxc, např. G. Debian wheezy nebo ubuntu.

lxc-create -B loop -t debian -n mydebianvm --fssize=20G -- -r jessie

-t argument vybere hlavní šablonu -r rozhodne, které vydání použít. Chcete-li nastavit velikost pevného disku pro virtuální počítač, můžete změnit --fssize argument. Řekněme, že chcete vytvořit disk s 50 gigabajty, změnili byste argument na ---fssize=50G .
Argument -n nastavuje název vm. Použil jsem mydebianvm v tomto tutoriálu. Změňte prosím název ve všech následujících příkazech podle toho, co jste zvolili.

Protože nechceme používat nezpracovaný obrazový soubor, musíme obraz disku převést na qemu qcow2 formát. To se provádí následujícím příkazem

qemu-img convert -O qcow2 /var/lib/lxc/mydebianvm/rootdev /var/lib/lxc/mydebianvm/rootdev.qcow2

Abychom usnadnili práci se zálohami, později vytvoříme sadu souborů obrazu, tj. E. druhý soubor, který zaznamenává všechny změny v zařízení.

qemu-img create -f qcow2 -b /var/lib/lxc/mydebianvm/rootdev.qcow2 /var/lib/lxc/mydebianvm/rootdev-live.qcow2

Nyní můžete smazat původní nezpracovaný soubor obrázku pomocí:

rm /var/lib/lxc/mydebianvm/rootdev

Nakonfigurujte síťový most

Nainstalujte bridge-utils:

apt-get install bridge-utils

Otevřete konfigurační soubor Debian Network /etc/network/interfaces v editoru

vim /etc/network/interfaces

a přidejte následující řádky:

auto br0 
iface br0 inet static
     address 192.168.1.254
     netmask 255.255.255.0
     bridge_ports eth0
     bridge_stp off
     bridge_fd 2
     bridge_maxwait 20

Nahraďte adresu a masku sítě hodnotami pro vaši místní síť.

Poté aktivujte síťový most příkazem:

ifup br0

Nakonfigurujte virtuální počítač

Zálohujte starý konfigurační soubor:

mv /var/lib/lxc/mydebianvm/config /var/lib/lxc/mydebianvm/config_bak

A vytvořte konfiguraci pro kontejner:

vim /var/lib/lxc/mydebianvm/config

A přidejte do souboru následující obsah:

lxc.rootfs = /var/lib/lxc/mydebianvm/rootfs
lxc.rootfs.options = usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0

lxc.hook.pre-start = /var/lib/lxc/prestart-nbd.sh
lxc.hook.post-stop = /var/lib/lxc/poststop-nbd.sh

# Common configuration
lxc.include = /usr/share/lxc/config/debian.common.conf

# only if bridge is set up (or use other method)
lxc.network.type = veth
lxc.network.name = veth0
lxc.network.flags = up
lxc.network.link = br0
lxc.network.ipv4 = 192.168.1.101/24
lxc.network.ipv4.gateway = 0.0.0.0

# Container specific configuration
lxc.mount = /var/lib/lxc/mydebianvm/fstab
lxc.utsname = debian8
lxc.arch = amd64
lxc.autodev = 1
lxc.kmsg = 0

Nahraďte IP-adresu 192.168.1.101 volnou IP z vaší sítě.

Přidejte předspouštěcí skript /var/lib/lxc/prestart-nbd.sh

vim /var/lib/lxc/prestart-nbd.sh

s následujícím obsahem:

#!/bin/bash
CHK=$(lsmod | grep '^nbd');
if [[ "$CHK" == "" ]] ; then
modprobe nbd nbds_max=64 max_part=8
fi
DEV=""

for D in /dev/nbd* ; do
F=$(basename $D)
if [[ $(lsblk | grep "^${F} ") == "" ]] ; then
DEV="$D"
break;
fi
done

echo "Next free NBD is $DEV";

CHK=$(lsof /var/lib/lxc/${LXC_NAME}/rootdev-live.qcow2 | grep 'qemu-nbd' | awk '{ print $2 }');
if [[ "$CHK" == "" ]] ; then
if [[ "$DEV" == "" ]] ; then
print "No free nbd device found";
exit 1;
fi
echo "Connecting $DEV to /var/lib/lxc/${LXC_NAME}/rootdev-live.qcow2"
qemu-nbd -c ${DEV} -n --aio=native /var/lib/lxc/${LXC_NAME}/rootdev-live.qcow2
else
NBD=$(lsof -p ${CHK} | grep '/dev/nbd' | awk '{ print $9 }');
if [[ "$NBD" != "" ]] ; then
echo "/var/lib/lxc/${LXC_NAME}/rootdev-live.qcow2 is already connected to $NBD"
DEV="$NBD";
else
echo "/var/lib/lxc/${LXC_NAME}/rootdev-live.qcow2 is used by suspicious PID";
exit 1;
fi
fi

CHK=$(mount | grep " /var/lib/lxc/${LXC_NAME}/rootfs ")
if [[ "$CHK" == "" ]] ; then
echo "/var/lib/lxc/${LXC_NAME}/rootfs not mounted";
echo "Mounting ${DEV} to /var/lib/lxc/${LXC_NAME}/rootfs"
mount ${DEV} /var/lib/lxc/${LXC_NAME}/rootfs
fi
echo "${DEV} ${DEV:1} none bind,create=file,optional 0 0" > /var/lib/lxc/${LXC_NAME}/fstab

a udělejte jej spustitelným:

chmod +x /var/lib/lxc/prestart-nbd.sh

Přidejte poststop skript /var/lib/lxc/poststop-nbd.sh

vim /var/lib/lxc/poststop-nbd.sh

s následujícím obsahem:

#!/bin/bash
CHK=$(mount | grep " /var/lib/lxc/${LXC_NAME}/rootfs " | awk '{ print $1 }')
if [[ "$CHK" != "" ]] ; then
echo "Unmounting ${CHK} from /var/lib/lxc/${LXC_NAME}/rootfs"
echo "Disconnecting ${CHK}"
umount /var/lib/lxc/${LXC_NAME}/rootfs && qemu-nbd -d ${CHK}
fi

a udělejte jej spustitelným:

chmod +x /var/lib/lxc/poststop-nbd.sh

Spuštění virtuálního počítače a nastavení kvóty

Nyní můžeme spustit kontejner v režimu na pozadí zadáním:

lxc-start -n mydebianvm -d

Nainstalujte potřebné balíčky pro kvótu. Kvůli tomu nemusíme vstupovat do kontejneru. Pomocí lxc-attach můžeme spouštět příkazy mimo kontejner.

lxc-attach -n mydebianvm -- apt-get -y update
lxc-attach -n mydebianvm -- apt-get -y install quota

Není možné aktivovat kvótu pomocí lxc-attach. Vytvoříme tedy bash skript, který se spustí při příštím spuštění kontejneru

vim /var/lib/lxc/mydebianvm/rootfs/opt/actquota.sh

s následujícím obsahem:

#!/bin/bash
mount -o remount,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0 /
touch /aquota.user /aquota.group
chmod 0600 /aquota.*
quotacheck -cmug /
quotaon -avug
echo '#!/bin/sh -e
exit 0' > /etc/rc.local
rm -f /opt/actquota.sh

Skript se poté sám smaže a vyprázdní /etc/rc.local kontejneru.
Nyní se ujistěte, že je bash skript spustitelný a volán při spuštění:

Udělejte jej spustitelným:

chmod 700 /var/lib/lxc/mydebianvm/rootfs/opt/actquota.sh

Přidejte volání do souboru rc.local vm:

echo '#!/bin/bash
if [[ -e "/opt/actquota.sh" ]] ; then
/opt/actquota.sh
fi' > /var/lib/lxc/mydebianvm/rootfs/etc/rc.local

Po nastavení všech nezbytných předpokladů můžete nyní kontejner restartovat. Pokud jste postupovali správně, kvóta se aktivuje.

lxc-stop -r -n mydebianvm

Ověřte výsledky

Nyní byste měli zkontrolovat, zda kvóta funguje. Změňte na kontejner.

lxc-attach -n mydebianvm

Typ uvnitř kontejneru:

repquota -avug

Nyní byste měli vidět použitou kvótu uživatelů a skupin.

Zničení virtuálního počítače

Je to velmi důležité používat příkazy ve správném pořadí. Než budete moci odpojit zařízení nbd, musíte zastavit kontejner, pokud běží:

lxc-stop -n mydebianvm

Poté musíte odpojit root fs.

umount /var/lib/lxc/mydebianvm/rootfs

Posledním krokem je odpojení nbd. Ujistěte se, že jste vybrali správné číslo zařízení.
NIKDY odpojte nbd před odpojením rootfs. To povede k mnoha problémům a bude vyžadovat úplný vynucený restart vašeho hostitele.

qemu-nbd -d /dev/nbd0

Zálohujte virtuální počítač

Protože jsme při vytváření image souboru pro kontejner vytvořili dva soubory, můžeme snadno zálohovat bez zastavení vm. Nejprve musíme uložit změny, které mezitím nastaly, do základního souboru.

qemu-img commit /var/lib/lxc/mydebianvm/rootdev-live.qcow2

Soubor /var/lib/lxc/mydebianvm/rootdev.qcow2 nyní obsahuje aktuální stav pevného disku vm, takže můžete zálohovat tento soubor.


Debian
  1. Jak nainstalovat a nastavit Debian 8 minimalistický Docker Host

  2. Jak nastavit NTP server a klienta na Debian 9 Stretch Linux

  3. Jak nastavit Nginx s podporou HTTP/2 na Debianu 9

  1. Jak nastavit PostgreSQL Streaming Replication s replikačními sloty na Debianu 10

  2. Nastavte Apache a Php pomocí mod_fcgid na Ubuntu/Debian

  3. Jak nastavit poštovní server s Exim4 a DBMail na Debian 7 VPS

  1. Jak nastavit vsftpd na Debianu

  2. Jak nainstalovat a zabezpečit phpMyAdmin pomocí Apache na Debianu 9

  3. Jak vytvořit a spustit kontejnery LXC Linux pomocí příkazů LXC