지난 글에서는 Laptop PC 에 VirtualBox 기반 가상환경을 구성하여 한 대의 PC 로 여러 노드를 구동시켜 보았습니다. 이 방법의 장점은, 별도의 하드웨어를 구입하지 않고도 여러 노드를 구동시킬 수 있고 가상화 툴인 VirtualBox 의 편리한 기능(이미지 복사, 스냅샷 등)을 이용할 수 있다는 점입니다. 하지만 저의 경우 주로 사용하는 Laptop 에 구성을 하였기 때문에 다른 작업(일상업무)을 할 때 간섭이 있을 뿐 아니라 24시간 내내 켜놓아야 하는 서버 특성상 전기료 및 하드웨어 수명단축 등이 부담이 되기도 하였습니다. 이를 해결하기 위해서는 AWS / GCP / Azure 와 같은 클라우드 플랫폼을 이용하거나 혹은 전용서버장비를 구입하는 방법이 있을 것입니다. 하지만 두 방법 모두 개인프로젝트를 해보려는 개인개발자 입장에서는 비용부담이 될 수밖에 없습니다. 또한 비용이 유동적이기 때문에 장기간 운영할 경우 비용예측을 하기 어려운 부분도 있습니다. 이러한 상황을 고려하여 저는 Raspberry pi 보드를 여러 개 구입하여 서버 클러스터 구성을 하기로 결정했습니다. 최근 출시된 Raspberry pi 4B 8GB 모델 기준 대당 11만원정도에 구입가능하고 전원공급장치 및 전용 Rack / Cooler / SD Card(삼성 MLC 기준) 구입시 3대 기준 대략 4~50만원정도에 구성이 가능합니다. 적은 돈은 아니지만 한번 구입해 놓으면 추가적인 비용이 나가지 않고(전기요금은 무시해도 될 수준으로 나올 것으로 예상) 나만의 하드웨어를 직접 운영해본다는 의의도 있기 때문에 개발자로서의 욕구를 충족시켜주기에 충분할 것으로 생각합니다. 또한 필요에 따라 동일 Spec 의 하드웨어로 Scale-Out 이 가능하다는 장점도 있습니다. 모두 구입하여 조립을 완료하였고 아래와 같은 깜찍한 장난감이 완성되었습니다.

이번 글에서는 우선 각 보드에 Ubuntu 20.04 LTS 를 설치를 진행해보겠습니다.

  • Raspberry pi 용 Ubuntu 20.04 LTS 이미지 다운로드

Ubuntu 에서는 Raspberry pi 보드용 전용 OS 를 별도로 제공하고 있습니다. 이 링크에 가서 Ubuntu Server 20.04.2 LTS 64bit 버전을 다운로드 받습니다. 다운로드 받은 파일명은 ubuntu-20.04.2-preinstalled-server-arm64+raspi.img.xz 일텐데 7-Zip 과 같은 압축프로그램을 이용해 압축을 풀어 ubuntu-20.04.2-preinstalled-server-arm64+raspi.img 파일을 추출합니다.

  • Win32 Disk Imager 1.0 다운로드 및 설치

다운로드 받은 Ubuntu Server 20.04.2 LTS 이미지를 SD 카드에 굽기 위해 Win32 Disk Imager 1.0 이라는 프로그램을 이용합니다. 이 링크에 가서 Win32 Disk Imager 를 다운로드 받고 설치합니다.

  • Micro SD 카드에 Ubuntu 20.04 LTS 이미지 굽기

상단의 Image File 에 오른쪽 폴더아이콘을 클릭하여 위에서 다운로드 받은 Ubuntu Server 20.04.2 LTS 파일의 경로를 지정합니다. 그리고 하단의 Write 버튼을 클릭하여 이미지 버닝을 시작합니다.

이 경고문구는 무시하고 Yes 를 클릭합니다.

완료되었습니다. 나머지 3개의 Micro SD 카드에도 동일한 작업을 진행합니다.

  • Raspberry pi 4B 에 Micro SD 카드 삽입 후 부팅하기

Raspberry pi 4B 보드에 Micro-SD 카드를 넣고 부팅을 하면 위와 같은 화면에서 더 이상 진행이 되지 않습니다. 이 상태에서 엔터 키를 한번 눌러줍니다.

이제 로그인화면이 떴습니다. 최초 기본 로그인 ID / PW 는 ubuntu / ubuntu 입니다. ID 와 PW 를 입력한 후 로그인을 해줍니다.

최초 로그인 후에는 비밀번호를 변경해야 합니다. 변경할 비밀번호를 입력 후 엔터를 누릅니다.

이제 로그인이 완료되었습니다.

  • Raspberry pi 4B wifi 설정하기
$ sudo vi /etc/netplan/50-cloud-init.yaml

Raspberry pi 의 wifi 를 설정합니다. vi 편집기를 통해 위 파일을 아래와 같이 수정합니다.

network:
ethernets:
eth0:
dhcp4: true
optional: true
wifis:
wlan0:
addresses: [192.168.0.200/24]
gateway4: 192.168.0.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
access-points:
"{SSID 이름}":
password: "{WIFI 비밀번호}"
version: 2

이전 글에서 VirtualBox 의 VM 의 고정 IP 들을 192.168.0.100, 192.168.0.101, 192.168.0.102 로 설정했었는데 Raspberry pi 의 고정 IP는 192.168.0.200, 192.168.0.201, 192.168.0.202로 설정하도록 하겠습니다.

$ sudo netplan apply

변경된 설정을 netplan 명령어를 통해 적용해줍니다. 지금까지의 작업을 나머지 두 대의 Raspberry pi 에도 동일하게 해줍니다. (IP만 192.168.0.201, 192.168.0.202 로 변경)

  • IPTIME 공유기에서 고정IP 설정하기

이제 각각의 Raspberry pi 에 대해 고정IP 를 설정할 차례입니다. 이전 포스팅에서도 다뤘듯이 IPTIME 공유기 설정페이지의 DHCP Server Setup 메뉴에서 작업하도록 합니다.

위와 같이 rasp-master(192.168.0.200), rasp-worker1(192.168.0.201), rasp-worker2(192.168.0.202) 를 Static Lease 로 등록해주었습니다.

  • IPTIME 공유기의 DDNS 설정 및 Port-Fowarding 설정하기

이제 DDNS 를 통해서 외부에서 접속할 도메인주소를 생성하고, Port-Fowaring 을 통해 ssh 접속을 할 수 있도록 설정해보겠습니다. 이전 포스팅에서도 다뤘듯이 IPTIME 공유기 설정 페이지의 DDNS 설정 메뉴에서 작업하도록 합니다.

이미 이전에 DDNS 설정을 해놓은 상태라 추가로 해줄 작업이 없습니다. 이제 Port Fowarding 메뉴로 이동합니다.

20022 ~ 20024포트에서 각 Raspberry pi 의 22번 포트로 Port Fowarding 규칙을 설정합니다. rasp-master 의 경우 20022, rasp-worker1의 경우 20023, rasp-worker2의 경우 20024 로 포트를 세팅합니다.

  • 각 Raspberry pi 에 ssh 접속하기

이제 각 Raspberry pi 장비에 ssh 접속할 준비가 완료되었습니다. Raspberry pi 용 Ubuntu 20.04.2 LTS OS 에는 기본적으로 ssh daemon 이 실행되고 있기 때문입니다. putty 와 같은 ssh 접속툴을 이용해 접속해봅니다.

이렇게 master, worker1, worker2 에 정상적으로 ssh 접속된 것을 확인할 수 있습니다.

  • 마무리

이번 포스팅에서는 VirtualBox 대신 Raspberry pi 4B 장비를 활용하여 나만의 하드웨어 환경을 구성해보았습니다.

다음으로 Raspberry pi 4B 3대에 Kubernetes cluster 를 설치하는 작업을 진행하도록 하겠습니다.

--

--

Ethan Park
Ethan Park

Written by Ethan Park

Software engineer on paternity leave.

No responses yet