Incus (LXC 리눅스 컨테이너 관리자) 설치 및 설정
Incus란?
- Incus는 컨테이너 및 가상 머신을 관리하는 시스템으로, LXD에서 파생된 오픈 소스 프로젝트입니다.
주로 리눅스 환경에서 사용할 수 있으며, 개발과 프로덕션 환경 모두에서 사용 가능한 유연성과 확장성을 제공합니다.
Incus는 컨테이너와 가상 머신을 동시에 운영할 수 있어, 마치 작은 개인 클라우드 환경처럼 느껴지게 하는 것이 특징입니다
이 서비스는 REST API 기반으로 로컬 및 원격에서의 관리 기능을 제공하며, 여러 Linux 배포판의 이미지를 지원합니다.
Incus는 클러스터 설정을 통해 단일 시스템에서 수천 개의 노드에 이르는 대규모 인프라까지 확장 가능하여, 효율적인 리소스 관리와 비용 절감을 원하는 사용자에게 적합합니다
서버의 운영체제는 다음과 같습니다.
– OS : Ubuntu 24.04
-
Incus 설치
# apt -y update
# apt -y upgrade
# apt -y install incus incus-tools incus-migrate
컨테이너가 아닌 VM을 생성할 경우에는 아래 패키지가 추가적으로 필요합니다.
# apt -y install qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils virt-manager
-
Incus 초기화
# incus admin init
해당 명령을 사용하여 초기화를 진행하며, 저장소 네투어크 및 기타 환경 설정을 구성합니다.
임의로 설정할 수 있으며, 엔터를 치면 기본값으로 설정되어 테스트시 모든 항목을 기본값으로 사용하였습니다.
Would you like to use 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 (lvm, lvmcluster, btrfs, dir) [default=btrfs]:
Create a new BTRFS pool? (yes/no) [default=yes]:
Would you like to use an existing empty block device (e.g. a disk or partition)? (yes/no) [default=no]:
Size in GiB of the new loop device (1GiB minimum) [default=5GiB]:
Would you like to create a new local network bridge? (yes/no) [default=yes]:
What should the new bridge be called? [default=incusbr0]:
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 the server 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 “init” preseed to be printed? (yes/no) [default=no]:
-
Incus 스토리지 생성
컨테이너나 이미지를 저장할 스토리지가 필요하며, 저장 장치를 추가하여 스토리지화 하거나
외부 장치를 이용하여 사용하는 방법이 있습니다.
해당 작업에서는 ZFS 파일 시스템 형식의 파일을 만들고 LXC 생성하도록 하겠습니다
ZFS 형식을 생성을 위해 관련 패키지를 생성합니다.
# apt -y install zfsutils-linux
패키지 설치 후 2GIB 크기의 빈 파일을 생성하며 ZFS 풀을 만들기 위한 디스크 이미지 파일로 사용됩니다.
# truncate -s 2GiB /var/lib/incus/disks/pool1.img
디스크 이미지를 기반으로 pool1 이라는 이름의 ZFS풀을 생성합니다.
# zpool create pool1 /var/lib/incus/disks/pool1.img
스토리지 풀 리스트 보기
# incus storage list
스토리지 풀 상세 보기
# incus storage show pool1
-
Incus LXC 생성
컨테이너 전체이미지 출력
# incus image list images;
해당 명령어를 통해 이미지를 다운로드 할 수 있습니다.
# incus image copy images:ubuntu/24.04 local: --alias ubuntu-24.04
다운로드 받은 이미지 확인
# incus image list
t
실행중인 컨테이너의 상태 확인
# incus list
-
Incus 웹 UI 설치(ixconsole)
참고 : https://github.com/PenningLabs/lxconsole/tree/main
# git clone https://github.com/PenningLabs/lxconsole.git
# cd lxconsole
# apt -y install python3-pip python3.12-venv
가상 환경 생성, 활성화 및 관련된 python 패키지 설치
# python3 -m venv myenv
# source myenv/bin/activate
# pip install -r requirements.txt
# python3 run.py
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
해당 문구는 개발용으로 프로덕션에 사용하려면 WSGI 서버를 사용하라는 말으로 Ctrl + C를 눌러 취소하고 아래 명령을 통해 WSGI 서버를 실행합니다.
# pip install uwsgi
# wsgi --http 0.0.0.0:5000 --module run:app --processes 4 --threads 2 --logto /root/5000_access.log &
# deactivate
# systemctl start lxconsoled
데몬이 실행이 되면 5000번 포트를 통해 웹 UI에 접근할 수 있습니다.
(방화벽이 열려있는지 확인을 해야합니다.)
# http://[server ip:5000]
처음 접속시 관리자 ID / PW를 생성하고 로그인해야합니다.
생성후에 로그인을 하게 되면 해당 페이지가 보이며 오른쪽 상단에 + Server 버튼을 클릭합니다.
here 링크를 통해 uncus 서버에 접근 인증을 해야하며, 인증 키값을 서버에 파일을 생성하여 적용시켜줍니다.
인증키값을 복사하여 lxconsole.crt 파일로 생성하여 적용시켜줍니다.
# incus config trust add-certificate lxconsole.crt
# incus config set core.https_address=[::]:8443
이후에 +Server 메뉴로 돌아가 아래 내용을 입력합니다.
입력 후 노드 이름을 누르면 대시보드 출력과 함께 다양한 설정 메뉴가 제공되어 다른 노드도 추가하여 사용할 수 있습니다.