시리즈
배경
Vagrant를 사용해서 VM을 생성할 것이다. 물론 VM 생성에는 VirtualBox와 같은 여러 좋은 프로그램이 많을 것이다. 하지만 나는 qemu를 사용할 예정이다. 이유는 다음과 같다.
1. 실험 환경 ESXi 환경에서 VirtualBox가 동작하지 않는다.
내가 멍청하게 가상화 옵션을 안주고 설정해서 VirtualBox가 돌지 않는다... 게다가 kvm도 아니라 qemu로 동작한다... 이건 추후 더 좋은 솔루션을 찾으면 사용할 예정이다.
2. 오픈소스 + 기능
오픈소스다. 난 VMWare를 사용하다가 돈내기도 싫고, VirtualBox의 라이센스 때문에 문제 생기기도 싫다. 또한 Qemu는 VNC를 지원해서 Openstack을 흉내내기도 좋을 것 같다.
시작
간단하다. 삽질에 시간이 조금 걸리긴 했지만, 이제 삽질을 하며 화내지 않는 경지에 와버려서 그냥 아무렇지도 않다. 아마 사람은 적응의 동물임에 틀림이 없다.
우선 환경은 CentOS 8의 기준으로 작성되었다.
왜 CentOS냐?
바로 내가 네트워크 인터페이스 이름을 쉽게 바꿀 수 있는게 CentOS이기 때문이다.... 좀 쪽팔리지만 그렇다 ㅎㅎ... 그리고 또 뿐만 아니라, 개인적으로 느꼈을 때 Ubuntu도 좋긴 하나, 이런 서버 환경에서는 CentOS가 더 좋은 것 같다. 당장 Openstack만 봐도 그런 것 같아보인다고 나름의 변명을 해본다.
Vagrant 설치
https://developer.hashicorp.com/vagrant/downloads?product_intent=vagrant
여기 공식 문서에 따르면
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo yum -y install vagrant
를 통해 설치할 수 있다.
Libvirt 설치 및 설정
Vagrant 만으로는 VM을 생성할 수 없다. Provider를 설정해줘야 하는데, 기본으로 VirtualBox, Docker (물론 VM은 아니지만..)이 내장되어있다. 다음의 명령어로 Libvirt를 설치 및 설정해준다
# Install dependencies for libvirt
sudo dnf install --assumeyes libvirt libguestfs-tools \
gcc libvirt-devel libxml2-devel make pkgconf-pkg-config ruby-devel
sudo dnf install --assumeyes byacc cmake gcc-c++ rpm-build wget zlib-devel
sudo systemctl enable libvirtd # Start libvirtd daemon
sudo systemctl start libvirtd
sudo usermod -aG libvirt $USER # add user to libvirt
여기서 systemctl enable, start, usermod를 안하는 경우, 이후 sock 문제 때문에 데몬 접근이 안된다.
Libvirt 플러그인 설정
Vagrant에서 Libvirt를 기본으로 지원하지 않기에, 이를 지원해주는 플러그인이 친절하게 존재한다.
https://github.com/vagrant-libvirt/vagrant-libvirt
여기 튜토리얼 중 설치 부분을 따라하면
vagrant plugin install vagrant-libvirt # Install libvirt plugin
위 설치 후 이 명령어만 해주면 플러그인이 설치된다.
검증
검증이라 하니 뭔가 거창하다. 그냥 테스트다. 간단하게, Vagrantfile을 하나 만들고, 안에 libvirt를 사용하는 VM을 만들어주자. 우리의 경우 kvm 대신 qemu를 사용한다. 또한 버전의 경우 ubuntu2204를 사용하게 설정할 것이다. + 스펙은 2코어 2GB RAM.
Vagrant.configure("2") do |config|
config.vm.box = "generic/ubuntu2204" # Ubuntu 22.04
config.vm.box_check_update = false
config.vm.provider :libvirt do |libvirt|
# Disable KVM and use pure QEMU
libvirt.driver = "qemu"
libvirt.memory = "2048" # Set the VM memory to 2GB
libvirt.cpus = 2 # Set the number of CPUs to 2
end
config.vm.provision "shell", inline: <<-SHELL
# Additional provisioning steps can be added here
SHELL
end
이렇게 파일에 작성을 하고, Vagrantfile로 저장한다. 이후
$ vagrant up
Bringing machine 'default' up with 'libvirt' provider...
==> default: Box 'generic/ubuntu2204' could not be found. Attempting to find and install...
default: Box Provider: libvirt
default: Box Version: >= 0
==> default: Loading metadata for box 'generic/ubuntu2204'
default: URL: https://vagrantcloud.com/generic/ubuntu2204
==> default: Adding box 'generic/ubuntu2204' (v4.2.16) for provider: libvirt
default: Downloading: https://vagrantcloud.com/generic/boxes/ubuntu2204/versions/4.2.16/providers/libvirt.box
default: Calculating and comparing box checksum...
==> default: Successfully added box 'generic/ubuntu2204' (v4.2.16) for 'libvirt'!
...
이렇게 잘 나오면 된다. 초기에 ubuntu2204 이미지를 다운 받아야해서 실행에 시간이 조금 걸린다. 그동안 잠시 쉬고 오는걸 추천한다. 아무튼 이러고 나서는
vagrant ssh
를 통해서, 해당 VM에 ssh로 접속한다.
다음 얘기
다음으로는, OVS의 bridge를 사용하는 Vagrant VM을 만들 예정이다.
'Playground > KlosedStack' 카테고리의 다른 글
[KlosedStack #3] Vagrant + OVS (Multi-Interface) (0) | 2023.07.02 |
---|---|
[KlosedStack #1] Intro (0) | 2023.06.30 |