개발 및 시험환경을 proxmox으로

1.
Rocky Linux, Centos 그리고 Chelsio에서 잠시 언급했던 서버가 있습니다. 우연히 뻘짓연구소의 영상을 보면서 흥미를 가졌습니다.
중국에서 24코어 컴퓨터 본체를 70만원에 샀습니다. 풀세트로 맞춰도 3950X 보다 싸네요? 에서 소개한 보드는
HUANANZHI X79-4D입니다. Xeon E6 2670이 두개인 보드이고 메모리는 128M까지 가능합니다. 개발서버로 사용하던 제품이 오래되어서 교체하려고 하던 생각을 가졌지만 가격때문에 선듯 결정을 못하다고 CPU 코어수에 솔깃하여 사서 조립하였습니다. 2018년입니다. 우여곡절끝네 성공적으로 조립을 하고 Centos등 필요한 OS를 그때그때 설치해서 사용하였습니다.

어느 날 페친인 개발자가 올려놓은 글에서 단어 하나가 눈에 들어왔습니다.

Proxmox

가상환경이라고 하는데 금시초문이었습니다. 그래서 이런저런 검색을 하다가 유튜브 영상을 하나보았습니다.

My Proxmox Home Server Walk-Through: Part 1 (TrueNAS, Portainer, Wireguard)

Centos8이후 레드햇의 정책이 바귀면서 Rocky Linux등을 시험하고 사용하는 상황이라 가상환경을 손쉽게 관리할 수 있는 환경이 마음에 들었습니다. 그래서 무작정 ISO파일을 받아서 설치하였습니다. 그리고 필요한 몇 개의 OS를 선정하여 설치하였습니다. 설치도 편하고 관리도 너무 편합니다. Proxmox는 Debian에 기반을 둔 가상환경이라 Type2가 아닐까 생각했는데 이와 관련한 토론이 있었네요. Proxmox type 1 hypervisor?라는 글을 보면

Hello,I’d like to know why Proxmox is classified as a type 1 hypervisor despite the fact that it uses qemu, which is defined as a type 2 hypervisor. Does anyone know?

라는 질문에 이런 답변이 있네요.

Esxi emulates hardware as does Hyper-V, Xenserver etc….
In fact in Xenserver all IO scheduling is managed in DOM0. Does that make Xen type 2? The virtualization in Proxmox happens in KVM. KVM is baked into the Linux kernel and so the virtualization is running on bare metal.

Proxmox의 구조입니다. OS와 Linux Kernel의 차이입니다. 실제로 Proxmox를 설치한 후 console로 살펴보면 서버로서의 기능은 거의 없습니다.

2.
Proxmox를 설치하는 것은 쉽습니다. 설치를 마무리하면 아주 생소한 로그인 화면을 봅니다. 구글링한 이미지입니다.

권고한 대로 웹으로 접속하면 아래와 같은 화면을 접할 수 있습니다.

이제 웹화면을 이용하여 VM이나 Container를 설치하면 됩니다.이와 관련한 글은 워낙 많고 동영상도 많으니까 참고하시면 됩니다. 제가 굳이 글을 쓰는 이유는 개인적인 삽질때문입니다.

삽질 교휸 1. Proxmox는 Local Network을 좋아합니다.

처음 설치를 할 때 네트워크 인터페이스를 선택하는 화면이 있습니다. 이 때 저는 인터넷에 연결된 상태로 설치를 진행하였기때문에 공인IP주소를 할당받았습니다.

아무런 생각없이 공인IP를 통하여 접속을 시도하였습니다. “계속 접속을 한다…..”는 메시지만 보일 뿐 화면을 만날 수 없었습니다.

“왜 그럴까…”

재설치를 할 때는 별도의 Local Network와 연결하고 복수의 인터페이스는 인터넷으로 연결하도록 하였습니다. 이 때 관리할 인터페이스는 로컬네트워크에 연결된 인터페이스를 선택하였습니다. 그래고 연결하니까 모든 것이 정상입니다. 왜 이렇게 설계했을까 하고 콘솔로 접속을 해서 네트워크환경을 살폈습니다.

웹 인터페이스를 제외하면 Manual로 되어 있음을 확인할 수 있었습니다. 그러면 Manual로 된 이더넷환경을 사용하지 못하느냐? 그건 아닙니다. 가상화인터페이스를 만들어서 VM에서 사용하도록 하였습니다. 관리와 운용을 분리하기 위한 선택인 듯 합니다.

삽질 교휸 2. Proxmox를 잘 사용하려면 Storage 정책을 잘 세워야 한다.

처음 Proxmox를 설치할 때는 120G SSD 하나로 시작하였습니다. 설치하면서 보니까 생각보다 저장공간이 많이 필요하더군요. HDD를 이용할까 생각하니까 속도가 문제일 듯 하여 SSD를 추가로 설치할 계획이었습니다. 대략 몇 개의 VM을 사용할지를 고민했습니다. 그것도 동시에.. 일반적인 경우 VM을 여럿 설치하더라도 하나정도를 사용합니다. 그렇지만 Proxmox는 동시에 수많은 가상환경을 운영할 수 있는 것이 장점이었습니다. 500G를 이용하여 가상환경 4을 설치하려고 하나가 공간이 낭비인 듯 하여 가상환경 5을 설치하는 것으로 방향을 바꾸었습니다. 이 작업은 웹환경으로는 힘들고 콘솔환경에서 작업을 해야 하더군요.

Partition Addition / Expansion와 같이 lvm으로 하는 경우도 있지만 저는 Directory로 하였습니다. 이 때 사용한 명령어가 parted입니다.

이상의 작업을 한 후 기존에 만들었던 qcow2 이미지를 백업한 후 새로 만든 파키션에 옮겨서 이전 환경을 복구하려고 하였습니다. 이 때 qcow2의 크기가 파티션에 할당한 크기보다 커셔 줄여야 하는 일이 발생하였습니다. 최초 VM 설정할 때 디스크 사이즈를 크게 잡은 이미지들입니다.웹환경을 보면 디스크 크기를 늘리는 기능은 있지만 줄이는 기능은 없습니다. 이 뜻은 디스크크기를 할당할 때 최소로 시작해서 필요할 때마다 늘리라는 뜻입니다.

하여튼 콘솔에서 디스크크기를 줄이는 방법을 찾앗습니다. 만약에 Directory 타입의 디스크이면 qemu-img를 사용합니다.

qemu-img resize –shrink <path/to/vm disk> [+|-]<축소할DISK크기>

늘리고자 하면 +를 사용하고, 줄이고자 하면 -를 사용합니다. 그렇지 않고 lvm일 경우에는 lvm을 이용합니다.

lvm lvreduce -L -10g /dev/pve/vm-103-disk-0
qm rescan

자세한 사항은 How to resize a qcow2 disk image on Linux에서 확인하실 수 있습니다. virt-resize를 사용할 수도 있지만 Proxmox는 관련프로그램을 별도로 설치하여야 합니다. KVM, QEMU등의 관계입니다.

KVM is the technology in the Linux kernel for using accelerated virtualization.
QEMU is an CLI and userspace program to manage emulation and virtualization and can use KVM when it creates vitual machines.
Libvirt provides an abstracted api for storage, network, computer, and virtualization. so other programs or people can managed it by one interface instead of manually
virt-manager can use libvirt and make it pretty for meatbags.

삽질 교휸 3. Proxmoxg환경에서 가상화 아닌 자원을 할당할 수 있다.

처음 Proxmox로 서버환경을 만들 때 각 프로젝트별로 어떻게 자원을 할당할지를 고민하였습니다.

전체 CPU코어 16개, HyperThreading을 32개입니다. 코어를 각 프로젝트=VM에 할당하면 좋겠다는 생각을 했죠. 그래서 찾아보니까 CPU설정에 Affinity 항목이 있습니다. 그런데 화면을 보면서 익숙한 단어들이 등장합니다. Socket, Core, vcpu인데 문제는 내가 원하는 환경을 위해 각 항목에 어떤 값을 넣어야 하는지가 헷갈렸습니다.

Proxmox VE Administration Guide는 다음과 같이 기술합니다.

A CPU socket is a physical slot on a PC motherboard where you can plug a CPU. This CPU can then contain one or many cores, which are independent processing units. Whether you have a single CPU socket with 4 cores, or two CPU sockets with two cores is mostly irrelevant from a performance point of view.

Increasing the number of virtual CPUs (cores and sockets) will usually provide a performance improvement though that is heavily dependent on the use of the VM. Multi-threaded applications will of course benefit from a large number of virtual CPUs, as for each virtual cpu you add, QEMU will create a new thread of execution on the host system. If you’re not sure about the workload of your VM, it is usually a safe bet to set the number of Total cores to 2.

Sockets vs Cores vs vCPUs에 올라온 또다른 설명이 있습니다.

  • Socket is the physical slot for a CPU. It matters if, for instance, you need NUMA (allocated RAM per CPU, which speeds up computation).
  • Core – is the physical core a CPU has. Here it gets a bit confusing – within Proxmox the number of cores equals the number of threads, so if your CPU supports hyper-threading, the cores count is double the physical cores of the CPU. Within Proxmox settings, it tells how many threads per each socket should be allocated.
  • vCPU – by default, it’s the product of sockets and cores per socket allocated. To cite the docs:
    In Proxmox VE the maximal number of plugged CPUs is always cores * sockets. To start a VM with less than this total core count of CPUs you may use the vpus setting, it denotes how many vCPUs should be plugged in at VM start.

    As far as i understand, you can start a VM with less vCPUs than set via sockets and cores and increase them upon need (ballooning style).

Given your scenarios:

  1. 4 Sockets, 1 Core, 1 vCPU means that a max of 4 vCPUs are possible, but you are starting a VM (only Linux support) with one vCPU
  2. 1 Socket, 4 Cores, 1 vCPU – same situation – max of 4 vCPUs are possible, but you are starting a VM with one vCPU
  3. 1 Socket, 1 Core, 4 vCPUs – not possible to set it up, as vCPUs are <= sockets * cores.

At the same time:

  1. 4 Sockets, 1 Core, 4 vCPUs – allows for NUMA optimisations if your server has actual 4 sockets

예를 들어서 저의 환경은 socket은 2, CPU당 Core는 8입니다. 첫번째 VM에는 4, 두번째 vm에도 4, 세번째,네번째 모두 동일합니다. 이 때 어떻게 입력하여야 할가요? 첫번째와 두번째의 Socket은 1이고 core는 4로 하고, 세번째와 네번째의 socket은 2로 하고 core는 4로 하면 원하는 설정일까요?

한번 나아가보죠.. 첫번째와 두번째 VM이 Socket 1의 CPU를 사용하다고 했고 각각 core를 4개 할당했습니다. 코어는 0부터 7까지 있는데… 각 VM은 어떤 core를 사용할까요? 지정하면 어떨까요? 그래서 affinity항목을 찾아서 각각 아래와 같이 입력했습니다.

첫번재 VM – 0,1,2,3
두번째 VM 0 4,5,6,7

관리자문서에 나온 설명입니다.

The third CPU resource limiting setting, affinity, controls what host cores the virtual machine will be permitted to execute on. E.g., if an affinity value of 0-3,8-11 is provided, the virtual machine will be restricted to using the host cores 0,1,2,3,8,9,10, and 11. Valid affinity values are written in cpuset List Format. List Format is a comma-separated list of CPU numbers and ranges of numbers, in ASCII decimal.

마지막으로 CPU Type입니다. 가상화 타입을 사용할지 아니면 호스트에 있는 것으로 그대로 사용하지를 정해야 하는데 성능을 위주로 생각해서 그냥 HOST로 선택했습니다. 문서는 다양한 환경에서 사용하는 것을 고려하여 HOST사용을 권장하지 않습니다.

QEMU can emulate a number different of CPU types from 486 to the latest Xeon processors. Each new processor generation adds new features, like hardware assisted 3d rendering, random number generation, memory protection, etc. Also, a current generation can be upgraded through microcode update with bug or security fixes.

Usually you should select for your VM a processor type which closely matches the CPU of the host system, as it means that the host CPU features (also called CPU flags ) will be available in your VMs. If you want an exact match, you can set the CPU type to host in which case the VM will have exactly the same CPU flags as your host system.

삽질 교휸 4. VM과 관련한 정보는 웹이 아나더라도 CLI에서 변경할 수 있습니다.

처음 Proxmox를 설치한 후 네다섯번정도 환경을 바꾸었습니다. 그럴 때마다 웹으로 하는 것이 골치였습니다. 그래서 콘솔로 접속해서 변경하는 방법을 찾았습니다.

/etc/pve/qemu-conf/100.conf -> VM설정과 관련한 정보
/etc/pve/storage.cfg -> 저장장치와 관련한 정보

그리고 네트워크와 관련한 정보는 Network Configuration을 참고하시길 바랍니다.

3.
이상과 같은 삽질을 하면서 점차로 proxmox에 적응하고 있습니다. 슬슬 성능을 높이기 위한 방법을 고민하는 중입니다. CPU등은 그렇고 메모리를 늘릴까 합니다. 32G인데 128까지 늘리면 좋을 듯 하네요. 알리를 검색하니까 32G 서버 메모리가 35,000원정도하네요… 투자하기 적당한 금액입니다.

그리고 Proxmox를 설치한 후 이런저런 작업을 편하게 해주는 스크립트 모음입니다. 저도 도움을 받았습니다.

Scripts for Streamlining Your Homelab with Proxmox VE

Leave a Comment

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.