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