회사에서 라이센스를 구입하기가 여러모로 귀찮으므로 docker desktop을 사용하기 난감함.
wsl2를 쓰면 docker를 기본적으로 세팅해서 사용할 수 있지만 나는 wsl1을 쓰고 싶음.
wsl2를 쓰기 싫은 가장 큰 이유는 파일 시스템의 차이로 인해 성능을 많이 날려먹는 것. 내 경우 wsl의 config에서 mount root를 /로 잡아서 사용하고 있음. 이렇게 하면 소스코드들을 윈도우에 저장해놓고 goland든 vscode든 linux 작업이든 모두 하나의 디렉토리에서 실행할 수 있어서 적잖이 만족하고 있음. 근데 wsl2를 쓸 경우 이 windows 디렉토리에서 뭔가 작업을 할 때 어마어마한 오버헤드가 발생함.
그리고 wsl2의 버그(https://github.com/microsoft/WSL/issues/8725)때문에 램을 거의 무제한적으로 차지하는데 이것도 마음에 안듬.
따라서 wsl1을 기본적으로 사용하면서 리소스 제한을 걸고 docker랑 k8s만 띄운 별도의 wsl2 인스턴스를 생성해서 사용하기로 결정.
1. wsl2 세팅
우선 관리자 권한을 가진 cmd 또는 powershell을 하나 띄워서 진행해야함.
내 경우엔 기존 wsl1용으로 Ubuntu-22.04 distro를 사용하고 있었기 때문에 이번에는 Ubuntu-20.04 distro를 써서 docker 및 k3s를 구축하기로 결정.
:: 뭘 설치해야할지 모르겠다면 wsl --list --online 명령어로 확인하여 선택.
:: wsl --list 까지만 치면 현재 설치되어있는 것들을 확인할 수 있음.
wsl --set-default-version 2
wsl --install Ubuntu-20.04
wsl2 인스턴스 내부로 들어가서 /etc/wsl.conf 파일을 생성하여 아래와 같은 내용 넣기. 이렇게 해야 wsl2에서도sudo systemctl ... 명령어를 사용할 수 있음.
[boot]
systemd=true
windows의 %USERPROFILE%\.wslconfig 파일에 아래 내용 넣기. 이렇게 해야 wsl2 인스턴스가 무제한적으로 메모리를 차지하는 것을 막을 수 있음.
[wsl2]
memory=8GB
이후 wsl.exe -t Ubuntu-20.04 명령어로 재시작.
마지막으로 아래 명령어를 파일로 만든 다음 관리자 권한을 가진 cmd 또는 powershell을 통해 실행. 방금 생성한 ubuntu wsl2 인스턴스에 2375, 6443 포트를 포워딩해주는 단계임.
for /f "tokens=1" %%a in ('wsl -d Ubuntu-20.04 sh -c "hostname -I"') do set wsl_ip=%%a
netsh.exe interface portproxy add v4tov4 listenport=2375 connectport=2375 connectaddress=$wsl_ip
netsh.exe interface portproxy add v4tov4 listenport=6443 connectport=6443 connectaddress=$wsl_ip
다음부터 docker가 필요하면 터미널에서 새로 만든 ubuntu를 실행하면 됨. 단, 관리자 계정으로 실행하도록 설정 수정 필요.