• Home
  • About
    • 검은색 잉크 블로그 photo

      검은색 잉크 블로그

      github GIST → https://gist.github.com/BlaCkinkGJ입니다.

    • Learn More
    • Email
    • Github
  • Posts
    • All Posts
    • All Tags
  • Projects

[LXD] LXD의 사용법

30 Jun 2020

Reading time ~4 minutes

LXD의 설치 및 실행

본 자료는 ubuntu 공식 사이트의 내용 1에 기반하여 작성되었습니다.

LXD의 설치

LXD는 LXC를 대체하기 위한 것으로 LXC보다 좀 더 범용적이면서 편리한 인터페이스를 가지는 특징이 있습니다. 현재는 LXC보다는 LXD를 사용할 것을 권고합니다.

먼저, 우분투에서 lxd를 설치해주도록 합니다.

sudo apt install lxd

LXD 데몬에 로컬로 접근하기 위해서는 lxd 그룹에 유저(여기서는 BlaCkinkGJ라고 하겠습니다.)가 속해야 하므로 lxd 그룹에 등록을 해주도록 합니다.

sudo adduser BlaCkinkGJ lxd

이 설정은 다음 세션에서부터 적용되기 때문에, 즉시 적용하기 위해서는 아래의 명령을 수행해줘야 합니다.

newgrp lxd

다음으로 LXD는 ZFS 저장소를 백엔드로 사용하기 때문에 ZFS 툴을 반드시 설치해줘야 합니다. 따라서, 관련 유틸을 아래의 명령을 통해서 설치해주도록 합니다.

sudo apt install zfsutils-linux

그리고 sudo lxd init을 하면 아래의 설정들이 나오게 됩니다. 유심히 읽어보고 default로 하지 말아야 할 설정이 있다면 변경을 해주도록 합니다.

Would you like to use LXD clustering? (yes/no) [default=no]:
Do you want to configure a new storage pool? (yes/no) [default=yes]:
Name of the new storage pool [default=default]:
Name of the storage backend to use (dir, zfs) [default=zfs]:
Create a new ZFS pool? (yes/no) [default=yes]:
Would you like to use an existing block device? (yes/no) [default=no]:
Size in GB of the new loop device (1GB minimum) [default=46GB]:
Would you like to connect to a MAAS server? (yes/no) [default=no]:
Would you like to create a new local network bridge? (yes/no) [default=yes]:
What should the new bridge be called? [default=lxdbr0]:
What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]:
What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]:
Would you like LXD to be available over the network? (yes/no) [default=no]:
Would you like stale cached images to be updated automatically? (yes/no) [default=yes]
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:

LXD의 실행

이제 lxc list라고 치면 아무것도 없이 아래와 같은 창이 뜨는 것을 확인할 수 있습니다.

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

그리고 우분투 16.04 버전을 첫 컨테이너로 만들기 위해서는 아래의 명령을 쳐주도록 합니다.

sudo lxc launch ubuntu:16.04

그러면 이전의 LXC와 달리 알아서 다운을 받고 설치하기 시작합니다. 여기서 만약 컨테이너에 특정 이름을 지정하고 싶은 경우에는 sudo lxc launch ubuntu:16.04 myInstance와 같이 하시면 myInstance라는 인스턴스가 생기게 됩니다.

Creating the container
Container name is: funky-spaniel
Starting funky-spaniel # funcky-spaniel이 container 이름입니다.

그리고 기존의 LXC는 console에 들어가기 위해서는 lxc-console을 사용해야 했지만 LXD는 exec을 사용해서 좀 더 인터렉티브(interactive)하게 사용할 수 있습니다. 이를테면, 컨테이너 내부의 ls -la를 수행하는 경우에는 호스트에서 아래와 같이 사용하면 됩니다.

sudo lxc exec funky-spaniel -- ls -la

이러면 컨테이너의 홈 디렉터리의 내용이 출력이 되게 됩니다. 만약 내부로 들어가고 싶은 경우에는 아래와 같이 쓰면 내부에 루트 계정으로 바로 들어갈 수 있습니다.

sudo lxc exec funky-spaniel /bin/bash

만약 만들어진 컨테이너를 정지시키고 싶은 경우에는 sudo lxc stop funky-spaniel을 수행해주시고, 삭제하고 싶은 경우에는 sudo lxc delete funcky-spaniel을 수행하시면 됩니다.

LXD의 사용

SSH를 통한 접근 설정

앞서 언급한 sudo lxc exec funky-spaniel /bin/bash를 통해서 루트 계정으로 passwd를 수행하여 루트의 패스워드를 설정해줍니다. 그리고 sudo adduser test를 통해서 계정을 만들어주고, visudo로 슈퍼 유저 권한을 부여해주도록 합니다.

그리고 아래의 과정을 통해서 openssh-server를 설치해주도록 합니다.

apt update && sudo apt upgrade
apt install openssh-server
systemctl status sshd

그런 다음에 vi /etc/ssh/sshd_config를 수행해서 PasswordAuthentication을 yes로 설정해줍니다. 그러면 정상적으로 컨테이너의 IP가 10.100.96.21인 경우에 호스트에서 ssh test@10.100.96.21 -p 22로 들어갈 수 있게 됩니다.

사용 제한 설정 방법

기본적으로, 리눅스 컨테이너는 cgroup을 기반으로 하기 때문에 /sys/fs/cgroup/<subsystem>/lxc에서 제한을 걸 수도 있지만 아래와 같은 방법을 통해서 변경이 가능합니다. 이 자료2를 바탕으로 작성 가능합니다.

스토리지 크기 설정

특정 컨테이너에 대한 스토리지 용량을 변경하고 싶은 경우에는 아래와 같은 명령을 사용하면 됩니다. 이는 cgroup으로 설정 가능한 부분이 아닙니다.

lxc config device override funky-spaniel root size=10GB

메모리 크기 설정

특정 컨테이너의 메모리 크기를 변경하고 싶은 경우에는 아래와 같이 진행합니다.

lxc config set funky-spaniel limits.memory 8GB

CPU 크기 설정

특정 컨테이너의 CPU 갯수를 변경을 하고 싶은 경우에는 아래와 같이 진행합니다.

lxc config set funky-spaniel limits.cpu 2

네트워크 대역 제한 설정

특정 컨테이너의 네트워크 대역폭을 제한할 때에는 다운로드(ingress)와 업로드(egress) 제한을 아래와 같이 걸 수 있습니다.

# 다운로드 제한
lxc config device set funky-spaniel eth0 limits.ingress 1Mbit
# 업로드 제한
lxc config device set funky-spaniel eth0 limits.egree 1Mbit

추가

LXD의 경우에 디스크의 제작은 zpool3이라는 것을 사용하기에 LXD로 만들어지는 파일시스템은 일반적으로 ZFS 파일 시스템이 만들어지게 됩니다. 이를 확인하기 위해서 컨테이너 안에서 df -hT를 쓰면 Type이 zfs인 것이 확인 가능합니다. 좀 더 자세한 LXD의 사용을 알고 싶으시다면 링크를 참조 해주시길 바랍니다.

그리고 SSH를 외부에서 접근하기 위해서는 이 자료4에서 나오는 내용처럼 아래와 같이 적어서 수행해주시길 바랍니다. 이때, 127.0.0.1 대신해서 localhost를 적어서는 안됩니다.

lxc config device add funky-spaniel myport1234 proxy listen=tcp:0.0.0.0:1234 connect=tcp:127.0.0.1:22

삭제하고 싶은 경우에는 아래와 같이 진행해주시길 바랍니다.

lxc config device remove funky-spaniel myport1234

참고 문헌

  1. https://ubuntu.com/tutorials/tutorial-setting-up-lxd-1604#1-overview ↩

  2. https://www.maketecheasier.com/limit-lxd-containers-resources/ ↩

  3. https://stanislas.blog/2018/02/lxc-zfs-pool-lxd/ ↩

  4. https://discuss.linuxcontainers.org/t/forward-port-80-and-443-from-wan-to-container/2042/3?escaped_fragment= ↩



container Share Tweet +1