웹사이트 검색

Debian 8에서 LXC 및 할당량 지원으로 가상 컨테이너를 설정하는 방법


이 페이지에서

  1. 전제 조건
  2. 준비 중
  3. 가상 머신 만들기
  4. 네트워크 브리지 구성
  5. VM 구성
  6. VM 시작 및 할당량 설정\n
  7. 결과 확인\n
  8. 가상 머신 제거
  9. VM 백업

할당량 지원은 lxc에서 자주 요청되는 기능입니다. 여러 사용자에게 컨테이너에 대한 액세스 권한을 부여하고 한 사용자가 모든 디스크 공간을 사용하지 않도록 제어하려는 경우 Linux 파일 시스템 할당량이 필요합니다. 할당량은 웹 호스팅 서버에도 필요합니다. 같은 이유로 ISPConfig 3을 사용하면 하나의 웹사이트가 전체 디스크를 채울 수 없습니다. 이 하우투는 Debian 8에서 qcow 이미지 파일과 함께 qemu nbd를 사용하여 하드 디스크 할당량과 함께 lxc를 사용하는 방법을 보여줍니다.

전제 조건

lxc를 사용하려면 qemu 유틸리티와 lxc 패키지 자체가 필요합니다. 다음을 호출하여 설치하십시오.

apt-get install lxc qemu-utils

설치 프로그램은 나중에 lxc 가상 머신 이미지가 설치될 디렉토리를 선택하라는 메시지를 표시합니다. 이 디렉터리는 여유 공간이 많은 파티션에 있어야 합니다. /var에 충분한 공간이 있으면 기본 /var/lib/lxc를 수락하고, 그렇지 않으면 가장 큰 파티션에서 사용 가능한 디렉터리를 선택합니다. 기본 경로가 아닌 경로를 사용하는 경우 아래의 모든 명령 및 구성 파일에서 경로를 변경해야 합니다.

준비 중

커널 루프 모듈이 다음과 같이 로드되었는지 확인합니다.

lsmod | grep '^loop'

결과가 표시되지 않으면 다음을 실행하여 모듈을 사용 설정할 수 있습니다.

modprobe loop

가상 머신 만들기

이제 VM 생성을 시작할 수 있습니다. 이 튜토리얼에서는 호스트와 컨테이너 모두에서 Debian Jessie를 사용하지만 물론 다른 lxc 템플릿을 사용할 수도 있습니다. g. Debian wheezy 또는 우분투.

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

-t 인수는 기본 템플릿을 선택하고 -r은 사용할 릴리스를 결정합니다. 가상 머신의 하드 디스크 크기를 설정하려면 --fssize 인수를 변경할 수 있습니다. 50기가바이트의 디스크를 생성하려는 경우 인수를 --fssize=50G로 변경합니다.
인수 -n은 VM의 이름을 설정합니다. . 이 튜토리얼에서는 mydebianvm을 사용했습니다. 선택한 항목에 따라 다음 모든 명령에서 이름을 변경하십시오.

원시 이미지 파일을 사용하고 싶지 않기 때문에 디스크 이미지를 qemu qcow2 형식으로 변환해야 합니다. 이는 다음 명령으로 수행됩니다.

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

백업 처리를 더 쉽게 하기 위해 나중에 이미지 파일 세트를 만듭니다. i. 이자형. 장치에 대한 모든 변경 사항을 기록하는 두 번째 파일.

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

이제 다음을 사용하여 원본 원시 이미지 파일을 삭제할 수 있습니다.

rm /var/lib/lxc/mydebianvm/rootdev

<엠>

네트워크 브리지 구성

브리지 유틸리티를 설치합니다.

apt-get install bridge-utils

편집기에서 데비안 네트워크 구성 파일 /etc/network/interfaces를 엽니다.

vim /etc/network/interfaces

다음 줄을 추가합니다.

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

주소와 넷마스크를 로컬 네트워크의 값으로 바꿉니다.

그런 다음 다음 명령을 사용하여 네트워크 브리지를 활성화합니다.

ifup br0

VM 구성

이전 구성 파일을 백업합니다.

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

그리고 컨테이너에 대한 구성을 만듭니다.

vim /var/lib/lxc/mydebianvm/config

그리고 파일에 다음 내용을 추가합니다.

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

IP 주소 192.168.1.101을 네트워크의 무료 IP로 교체하십시오.

사전 시작 스크립트 /var/lib/lxc/prestart-nbd.sh를 추가합니다.

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

다음 내용으로:

#!/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

실행 가능하게 만드십시오.

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

사후 중지 스크립트 /var/lib/lxc/poststop-nbd.sh를 추가합니다.

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

다음 내용으로:

#!/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

실행 가능하게 만드십시오.

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

VM 시작 및 할당량 설정

이제 다음을 입력하여 백그라운드 모드에서 컨테이너를 시작할 수 있습니다.

lxc-start -n mydebianvm -d

할당량에 필요한 패키지를 설치합니다. 이를 위해 컨테이너에 들어갈 필요가 없습니다. lxc-attach를 사용하여 컨테이너 외부에서 명령을 실행할 수 있습니다.

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

lxc-attach를 통해 할당량을 활성화할 수 없습니다. 따라서 다음 번 컨테이너 부팅 시 실행되는 bash 스크립트를 만듭니다.

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

다음 내용으로:

#!/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

스크립트는 자체적으로 삭제되고 나중에 컨테이너의 /etc/rc.local을 비웁니다.
이제 bash 스크립트가 실행 가능하고 시작 시 호출되는지 확인합니다.

실행 가능하게 만드십시오.

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

vms rc.local 파일에 호출을 추가합니다.

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

모든 전제 조건이 설정되면 이제 컨테이너를 다시 시작할 수 있습니다. 단계를 올바르게 따른 경우 할당량이 활성화됩니다.

lxc-stop -r -n mydebianvm

결과 확인

이제 할당량이 작동하는지 확인해야 합니다. 용기로 변경합니다.

lxc-attach -n mydebianvm

컨테이너 유형 내부:

repquota -avug

이제 사용자 및 그룹의 사용된 할당량이 표시되어야 합니다.

가상 머신 파괴

명령을 올바른 순서로 사용하는 것이 매우 중요합니다. nbd 장치를 연결 해제하기 전에 실행 중인 컨테이너를 중지해야 합니다.

lxc-stop -n mydebianvm

그런 다음 루트 fs를 마운트 해제해야 합니다.

umount /var/lib/lxc/mydebianvm/rootfs

마지막 단계는 nbd를 분리하는 것입니다. 올바른 장치 번호를 선택했는지 확인하십시오.
rootfs를 마운트 해제하기 전에 절대 nbd를 분리하지 마십시오. 이로 인해 많은 문제가 발생하고 호스트를 완전히 강제 재부팅해야 합니다.

qemu-nbd -d /dev/nbd0

VM 백업

컨테이너용 이미지 파일을 생성할 때 두 개의 파일을 생성했기 때문에 vm을 중지하지 않고도 쉽게 백업할 수 있습니다. 먼저 그동안 발생한 변경 사항을 기본 파일에 커밋해야 합니다.

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

/var/lib/lxc/mydebianvm/rootdev.qcow2에는 이제 vms 하드 디스크의 현재 상태가 포함되어 있으므로 이 파일을 백업할 수 있습니다.