기존에 VirtualBox 에서 VM 을 생성하여 쿠버네티스 클러스터를 구축·운영하였는데, Type1 Hypervisor 라는 개념을 알게되어 Type 1 Hypervisor 인 Proxmox 위에서 쿠버네티스 클러스터를 재구축하였다. 간단하게 Type1, Type2 하이퍼바이저의 차이와 Proxmox 클러스터 구축 과정, 추후 숙제를 정리해두려고 한다.
1. Hipervisor Type1/Type2
하이퍼바이저는 가상화를 제공하는 플랫폼 소프트웨어를 말한다. 내가 기존에 사용하던 VirtualBox(Oracle) 나 Vmware 같이 가상머신을 생성, 실행, 리소스 관리하는 기능을 수행한다. 쿠버네티스나 도커같이 컨테이너 관련 플랫폼도 가상화의 영역이긴 하지만, OS 수준에서 구현된 컨테이너 런타임에 의존하는 가상화 소프트웨어는 하이퍼바이저로 불리는 것 같진 않고, 기본적으로 하드웨어 수준의 가상화 기술에 의존해서 가상머신을 운용하게 해주는 경우에만 그렇게 불리는 듯 하다.
하이퍼바이저는 하드웨어 수준의 가상화 기술에 크게 의존하기 때문에 물리장치와 직접 상호작용을 하는 매우 로우레벨의 기술이라고 할 수 있다. 그런데 VirtualBox 나 Vmware 같은 Type 2 Hypervisor 의 경우 의존하는 기술은 하드웨어 수준인데, 구동환경은 호스트 OS 위에서 동작하는 어플리케이션이라는 괴리를 갖게 된다. 결국 Type 2 Hypervisor 가 하드웨어 가상화 기술을 사용하기 위해서는 호스트 OS 를 통해 간접적으로 밖에 접근할 수 밖에 없게 되는 것이다.
이와 달리 Type 1 Hypervisor 는 하드웨어 (BareMetal 이라는 더 와닿는 표현이 자주 쓰임) 위에서 바로 VM 를 프로비저닝 하고 관리한다. 때문에 직접적으로 하드웨어 자원을 사용하게 되기 때문에 오버헤드가 훨씬 줄게된다. (거의 네이티브 OS 의 성능을 낼 수 있다고 한다.)
2. Proxmox
나는 Hypervisor 로 Proxmox 를 골랐다. 별다른 이유는 없고 무료이고, UI 가 깔끔해보였기 때문이다. 내부적으로 KVM 이라는 리눅스 커널 내장 하이퍼바이저에 의존한다고 한다. (KVM 은 OpenStack 에서도 쓰이는 가장 널리쓰이는 하이퍼바이저) 이외에도 Xen Project 같은 AWS 의 채택을 받은 기술도 있다. 사실 가상화 기술에 대해서는 구체적으로는 아예 모르기 때문에 더이상의 설명은 무의미해서 스킵... 공부해보고 싶다.
참고로 이런 UI 를 가지고 있다. 하나도 안이쁜데? 싶을 수도 있는데 웹에서 바로 콘솔을 띄울 수 있다. VirtualBox 와는 다르게 하나도 버벅거리지 않고 너무 좋음. 포트를 열어둬서 회사에서도 접속할 수 있다.
3. 쿠버네티스 구축
쿠버네티스 클러스터를 구축하기 위해서는 VM 간 네트워크 접근이 가능해야하는데 가장 간단한 방법은 VM 에 서브넷 인터페이스(NAT 네트워크) 를 추가하는 것이다. 그런데 내 경우에는 운영 PC 의 VM 들과 함께 개발 PC 도 같은 클러스터에 묶어넣고 싶기 때문에, 좀 까다로워진다. 외부에서 VM 에 접근하는 것도 포트포워드 설정을 해야하니 좀 귀찮기도 했다. 그래서 브릿지로 그냥 공유기의 네트워크 대역에 싹 묶어서 관리하기로 했다.
현재는 vm 총 6 개를 띄워서 운용하고 있다.
순번 | host명 | ip | 역할 |
1 | master.comppi | 172.30.1.50 | 컨트롤 플레인 |
2 | worker1.comppi | 172.30.1.51 | 워커 노드 1 |
3 | worker2.comppi | 172.30.1.52 | 워커 노드 2 |
4 | worker3.comppi | 172.30.1.53 | 워커 노드 3 |
5 | cicd.comppi | 172.30.1.60 | 젠킨스가 돌아가는 cicd 서버 kubectl 인증서가 있다. |
6 | nfs.comppi | 172.30.1.70 | nfs 서버 이미지 bucket 과 database 가 저장된다. |
여기에 개발 PC 위에 VM 2-3 개를 띄워서, 개발서버를 구동하는 워커 노드로 편입시키려고 한다.
4. 추후 숙제
1) 인프라 프로비저닝 및 구성 관리 : Terraform, Ansible
VirtualBox 에서 Proxmox 로 하이퍼바이저를 옮기게 되면서 클러스터를 재구축 하였는데, 상당히 많은 시간이 소비 되었다. Proxmox 를 설치하는 것은 금방 했는데, VM 을 각각 생성하고 OS 설치, 네트워크 구성, 컨테이너 런타임 설치, 쿠버네티스 설치, 클러스터 초기화 등... 기존에 이미 했던 작업을 반복하게 되니 너무나 피로한 일이었다.
이걸 자동으로 해주는 도구가 있지 않을까 했는데, 말로만 들어본 Terraform, Ansible 이런 도구들이 VM 을 프로비저닝하는데 쓰이는 애들이었다. 저 둘이 정확히 어떻게 다른지 모르겠는데, 조금 리서치해본 바로는 Terraform 은 VM 에 CPU, 메모리, 디스크, 네트워크 같은 리소스를 할당하여 생성하는 도구로 주로 쓰이는 것 같고, Ansible 은 생성된 VM 에 Playbook 이라는 yml 코드를 기반으로 자동으로 구성 관리를 해주는 도구로 쓰이는 것 같다. 그래서 둘을 적절히 조합을 하면 VM 생성부터, 초기 클러스터 구성까지 자동화가 가능한 것이다.
2) 인프라 HA(High Availablity, 고가용성) 구현
사실 Proxmox 의 강점은 HA 클러스터 구성 기능에 있다고 한다. HA 는 고가용성이라는 뜻인데 가용성이 좋다.? 별로 와닿는 표현은 아닌거 같다. 재료학도인 나로서는 인성(질김)이 좋다는 표현을 쓰고 싶은데... 여튼 예기지 못한 오류로 인해서 VM 이 죽어버려도 기존의 자원을 다른 노드에서 가지고 있다가 그대로 이어 받아서 서비스를 유지할 수 있다는 뜻이다. 한마디로 애지간 해서는 안죽는 그런 기능. 여기에 Failover, Fencing, Quorum 이라는 용어들이 등장함.
이런 HA 를 구성하기 위해서는 물리적으로 3개 이상의 Proxmox 노드가 있어야 한다. 그러니까 컴퓨터를 두대 더 사야된다는 뜻. 아무래도 Low Available 한 지갑 사정으로 인해 실습을 하기는 무리가 있어보인다.