Kubernetes
를 본격 공부하려고 하는데 개발 장비에 Docker Desktop
기반으로 해보자니 이가 하나 빠진 느낌이다. 한땀한땀 장인정신으로 구성해보면서 클러스터 관리까지 제대로 공부해보고싶은데 클러스터를 개발 장비에 바로 구성하려니 시스템이 금방 오염될 것 같아 오랜만에 VM 을 만지작거려봤다.
Windows WSL 2
에서도 Vagrant 로 VirtualBox VM 제어가 가능한데 일반적이진 않은 것 같아서 기록해두려고 한다.
WSL2 에서 도커 데스크탑을 활용하는 것과 마찬가지로, VirtualBox backend 는 윈도우즈 시스템에 구성하고 Vagrant 는 WSL 내에서 리눅스 배포 버전을 이용한다.
아주 약간 더 자세한 내용은 공식 문서에 있다.
https://developer.hashicorp.com/vagrant/docs/other/wsl
VirtualBox 는 다음 경로에서 Windows Hosts 용을 받아 WSL 2 호스트 (Windows) 에 설치하고
https://www.virtualbox.org/wiki/Downloads
Vagrant 는 WSL2 쉘에서 다음과 같은 명령으로 설치한다.
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install vagrant
설치 직후에 vagrant
명령을 날려보면 다음과 같이 정상동작하지 않는데
# vagrant
Vagrant failed to initialize at a very early stage:
Vagrant is unable to use the VirtualBox provider from the Windows Subsystem for
Linux without access to the Windows environment. Enabling this access must be
done with caution and an understanding of the implications. For more information
on enabling Windows access and using VirtualBox from the Windows Subsystem for
Linux, please refer to the Vagrant documentation:
https://www.vagrantup.com/docs/other/wsl.html
아래와 같이 환경변수를 설정해주면 설치 끝.
export VAGRANT_WSL_ENABLE_WINDOWS_ACCESS="1"
export PATH="$PATH:/mnt/c/Program Files/Oracle/VirtualBox"
# vagrant --version
Vagrant 2.4.0
환경변수 설정 외에 추가적인 주의사항은 호스트 시스템과 같은 파일시스템에서만 동작하기때문에 /mnt/{c,d,...}
하위에서 Vagrant 프로젝트를 생성해야하는데 wsl 안으로 symlink 를 걸어서 사용하는것도 가능하다.
mkdir -p ~/projects/vagrant && cd $_
mkdir -p /mnt/c/Users/user/vagrant/example && ln -s $_ .
우분투 박스를 하나 구성해보면 VM 자체는 잘 구성되지만 ssh 접근이 제대로 되지 않는데
# vagrant init generic/ubuntu2204
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
# vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'generic/ubuntu2204' could not be found. Attempting to find and install...
...
==> default: Fixed port collision for 22 => 2222. Now on port 2200.
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> default: Forwarding ports...
default: 22 (guest) => 2200 (host) (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2200
default: SSH username: vagrant
default: SSH auth method: private key
default: Warning: Connection refused. Retrying...
default: Warning: Connection refused. Retrying...
...
virtualbox_WSL2
플러그인을 설치해주고 다시 시도해보면 SSH 주소가 정상적으로 맵핑되는 것을 확인할 수 있고 vagrant ssh
명령도 정상적으로 동작한다.
# vagrant destroy
default: Are you sure you want to destroy the 'default' VM? [y/N] y
==> default: Forcing shutdown of VM...
==> default: Destroying VM and associated drives...
# vagrant plugin install virtualbox_WSL2
Installing the 'virtualbox_WSL2' plugin. This can take a few minutes...
Fetching rake-13.1.0.gem
Fetching virtualbox_WSL2-0.1.3.gem
Installed the plugin 'virtualbox_WSL2 (0.1.3)'!
# vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'generic/ubuntu2204'...
...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> default: Forwarding ports...
default: 22 (guest) => 2200 (host) (adapter 1)
default: 22 (guest) => 2200 (host) (adapter 1)
...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 172.17.160.1:2200
default: SSH username: vagrant
default: SSH auth method: private key
default: Warning: Connection reset. Retrying...
default:
default: Vagrant insecure key detected. Vagrant will automatically replace
default: this with a newly generated keypair for better security.
default:
default: Inserting generated public key within guest...
default: Removing insecure key from the guest if it's present...
default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
...
# vagrant ssh
vagrant@ubuntu2204:~$
네트워크 설정에 나름 자신있는 (?, 익숙한) vmware 로 쓸 수 있으면 더 좋겠지만 vagrant-vmware-utility
설치까지 하려면 좀 더 번거롭다.
https://developer.hashicorp.com/vagrant/docs/providers/vmware