ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • macOS 환경 minikube 간편 설치
    2022. 4. 7. 0 comments

    요즘 개발환경

    이제는 개발 환경에 컨테이너를 활용하는 것은 흔한 일이 되었다. 사업을 한다면 서비스가 막 시작하는 단계이거나 트래픽이 별로 없는 경우를 제외하고는 컨테이너 환경을 이용하지 않을 이유가 없다. 개발 생산성 또는 비용(money)적인 면에서 얻어갈 이점이 많기 때문이다. 개인 개발 환경 또한 컨테이너를 사용하면 Redis나 MySQL를 순식간에 설치해서 바로 활용할 수 있거나 신규 python 버전을 테스트해보기 위해서 신규 이미지를 받아서 실행을 하면 끝이다. 프로그램 설치 과정에서 발생할 오류나 설치가 잘 된 이후로도 OS가 업데이트 될 때 이상 현상이 갑자기 나타날지등을 걱정할 필요가 없다. 

    Docker Desktop 안녕

    수 많은 개발자 PC에 설치되어 있는 Docker Desktop

    작년까지만 해도 개인 개발 환경에서의 컨테이너 프로그램의 최강자는 사실 Docker Desktop이였다. 프로그램 설치 한방으로 너무나도 편리하게 사용할 수 있고 심지어 무료다. 하지만 라이센스 정책 변경으로 회사에서 사용하려면 비용을 내도록 변경이 되었다.

    https://www.docker.com/blog/updating-product-subscriptions/

     

    Docker is Updating and Extending Our Product Subscriptions - Docker

    Learn from Docker experts to simplify and advance your app development and management with Docker. Stay up to date on Docker events and new version announcements!

    www.docker.com

    개인에게 여전히 무료이지만 일반적으로 회사 일을 병행하는 흔한 직장인 개발자에게는 고민이 될 수 밖에 없다. 고민을 하다가 이 참에 로컬 환경도 Docker Desktop에서 Kuberetes 환경으로 넘어가기로 마음먹었다.

    minikue 설치

    이모티콘도 귀여운 minikube

    여기서부터 이야기할 minikube는 로컬 개발환경에 설치하여 활용할수 있게 만들어진 Kubernetes의 미니 버전이다. 설치 과정은 Docker desktop보다는 몇몇 단계가 더 있을 수 있지만 그리 어렵지는 않다. 아래의 절차를 따라하면 뚝딱뚝딱 준비가 완료될 것이다. 이상하게도 필자가 설치할 때는 몇몇 시련이 있었는데 관련 내용도 함께 작성하였으니 참고가 되었으면 한다. 

    brew를 통해서 간편 설치가 가능

    $ brew install minikube

    사람들이 주로 이야기하는 그리고 여기서 이야기하는 컨테이너 환경이란 주로 Linux OS에서 동작하는 격리된 어플리케이션들을 의미한다. 그럼 MacOS에서 잘 동작할까??를 생각하면 그렇지는 않다. 그러다보니 리눅스 컨테이너(사실 이게 더 정확한 명칭이긴 하다)와 Kubernetes를 동작시키려면 Linux OS를 돌릴 가상화 환경이 준비되어 있어야 한다.

    그래서 brew 설치 이후 start를 해도 시작이 되지 않는다.

    $ minikube start
    
    🤷  Exiting due to PROVIDER_VIRTUALBOX_NOT_FOUND: The 'virtualbox' provider was not found: unable to find VBoxManage in $PATH
    
    💡  권장: Install VirtualBox
    
    📘  문서: https://minikube.sigs.k8s.io/docs/reference/drivers/virtualbox/

    minikube에서도 가상화 환경이 필요하며 프로그램 시작시 여러 가상화 솔루션 중 선택해서 사용할 수 있다.

    virtualbox

    우리는 minikube의 original driver에 해당하는 virtualbox를 사용할 것이다. virtualbox 프로그램을 다운로드 받고 설치를 진행한다.

    자 이제 다시 시작을 해보자

    $ minikube start --disk-size='50000mb'
    
    😄  Darwin 12.2 의 minikube v1.25.1
    
    ✨  유저 환경 설정 정보에 기반하여 virtualbox 드라이버를 사용하는 중
    
    👍  minikube 클러스터의 minikube 컨트롤 플레인 노드를 시작하는 중
    
    🔥  virtualbox VM (CPUs=2, Memory=4000MB, Disk=50000MB) 를 생성하는 중 .../

    그러나 실패

    첫번째 시련

    VirutalBox 프로그램을 직접 실행해서 생성된 VM을 실행해보면 다음과 같은 오류가 발생하는 것을 확인하였다. virtualbox를 자주 사용해본 사람이라면 가끔씩 만나게 되는 오류이다.

    Kernel driver not installed (rc=-1908)
    Make sure the kernel module has been loaded successfully.
    where: suplibOsInit what: 3 VERR_VM_DRIVER_NOT_INSTALLED (-1908) - The support driver is not installed. On linux, open returned ENOENT. 

    The virtual machine 'minikube' has terminated unexpectedly during startup with exit code 1 (0x1).

    결과 코드: NS_ERROR_FAILURE (0x80004005)
    구성 요소: MachineWrap
    인터페이스: IMachine {85cd948e-a71f-4289-281e-0ca7ad48cd89}

    대부분 이 문제는 OS 보안 관련 문제로써 설치가 완료된 후에는 시스템 환경 설정 > 보안 및 개인정보 보호에서 허용을 선택하고 리부팅하면 된다. 근데 이상하게도 나의 경우에는 허용 관련 내용이 나타나지 않았다.

    이 문제를 해결하려면 약간의 설정이 필요하다. 아래 csrutil 명령을 내리고 재부팅을 한 뒤에 Virtualbox를 재 설치하면 시스템 환경 설정 > 보안 및 개인정보 보호에서 허용을 선택할 수 있게 된다.

    csrutil disable; reboot

    자 이제 준비가 되었으니 다시 시작을 하려하니, 엇 이제는 다른 오류가...

    2번째 시련

    😿  Failed to start virtualbox VM. Running "minikube delete" may fix it: creating host: create: creating: Error setting up host only network on machine start: /usr/local/bin/VBoxManage hostonlyif ipconfig vboxnet3 --ip 192.168.99.1 --netmask 255.255.255.0 failed:

    VBoxManage: error: Code E_ACCESSDENIED (0x80070005) - Access denied (extended info not available)

    VBoxManage: error: Context: "EnableStaticIPConfig(Bstr(pszIp).raw(), Bstr(pszNetmask).raw())" at line 242 of file VBoxManageHostonly.cpp

    구글링을 통해 이래저래 찾아보니 호환성 문제가 있다라는 것을 알게 되었다. hashicorp discuss 내용을 참고해서 6.1.26으로 다운그레이드하였다.

    드디어 성공!

    성공

    virtualbox에 VM을 항상 실행하고 있는 것이라 메모리 소비가 꽤 된다. 그래서 사용안할 때는 아래 명령어로 종료를 하자.

    $ minikube stop

    클러스터를 일시정지하거나 재개할 수도 있다.

    $ minikube pause
    
    $ minikube unpause

    그리고 Kubernetes에서 기본 제공하는 대시보드 또한 손쉽게 실행할 수 있다.

    $ minikube dashboard

    연결한 port를 알려주는데 웹브라우저로 접속하면 아래와 같이 기본 대시보드 화면을 만날 수 있다. 

    마지막으로 minikube에서 동작하는 container 리소스를 확인하기 위해 metrics 서버를 설정하자.

    $ minikube addons enable metrics-server

    이제 커맨드로 사용 중인 리소스 또한 확인할 수 있다.

    $ kubecl top pods
    
    $ kubectl top node

     

    See also

    반응형

    댓글 0

Designed by Tistory.