HomeLab Cluster 구축기 1 - 기본 세팅

Created
Oct 6, 2024 02:20 AM
Tags
kubernetes
homelab
오랜 고민 끝에 미니PC를 하나 샀다. 40만원 가까이 되는 금액이라.. 줄곧 고민했다. 라즈베리 파이, 좋다. 하지만 가벼운 쿠버네티스 클러스터라도 제대로 돌리려면 하드웨어 스펙이 너무 낮은 건 문제가 된다고 생각했다.
 

프로젝트의 목표

  • 물리 서버 구축 및 쿠버네티스 클러스터 구축을 해보는 경험과 관련된 학습
  • 클라우드 비용 절감
가장 중요한 목표 2개는 물리 서버를 직접 구축하고 그 위에 클러스터를 구축하는 경험을 해보는 것과, 클라우드를 사용하면서 발생하는 비용을 절감하는 것 2가지였다.
 
물리서버를 사용해 서비스를 해본 적이 한 번도 없었고, EKS는 써봤지만 Kubernetes Cluster를 직접 구축해본 경험은 적었다. 클라우드가 편하지만 너무 클라우드에 종속적인 엔지니어가 되는 것은 좋지 않다고 생각했다. 이 참에 집에 조그마한 클러스터 하나 가져보는 것도 좋지 아니한가.
 
AWS의 리소스들은 너무 비싸다. EKS는 숨만 쉬어도 한 달에 10만원은 거뜬히 나왔다. EC2는 상대적으로 저렴하지만, 결국 서비스에 DB가 필요하면 RDS 비용이 무시할 수 없었다. 매달 5만원씩 10만원씩 AWS에 지출하느니, 컴퓨터를 사서 서버를 직접 돌리고 비용을 절감하자는 만용을 부리게 되었다.
 

물리장비 사양

 
내 컴퓨터의 사양이다.
CPU
Ryzen 7 4800H
코어/스레드
8/16
Frequency
2.9GHz
RAM
16GiB
Storage
512GiB
 
관부가세 포함해서 40만원 정도에 구매한 것 같다. 알리 익스프레스를 이용했다. 이 가격에 윈도우 11도 포함되어 있다. (물론 나는 우분투를 바로 깔았다)
 

대략적인 프로젝트 설계

홈랩 클러스터 프로젝트는 대략 다음과 같은 순서로 진행할 예정이다.
flowchart LR; A["우분투 설치"] B["K3S 설치"] C["DDNS 설정"] D["애플리케이션 배포 및 테스트"] E["CI/CD"] A --> B --> C --> D --> E
 
EKS는 써봤지만 직접 물리서버에 Kubernetes를 설치해본 적도 없고, 물리버서를 구축해본 적도 없다. 지금 생각하는 순서는 이렇지만 아마 하다 보면 바뀌게 될지도 모르겠다.
 
  • K3S
    • 고민 많이 했다. 결국은 Kubernetes보다 좀 더 가벼운 K3S가 프로젝트에 적합할 것 같다고 판단했다.
    • 단일 하드웨어에 하드웨어 성능도 부족한 점을 고려했다.
    • kubernetes를 구축해보는 경험도 좋지만 나는 내가 개발하는 실제 서비스들을 저렴하게 서빙하려고 홈랩 클러스터를 구축하고 있기에, 좀 더 light한 K3S를 선택했다.
  • DDNS
    • 집에서 사용하는 인터넷은 default가 유동IP다. 즉 서버를 띄워도 IP가 변경될 가능성이 있는 것.
    • 고정IP를 받을 수도 있지만, 목표가 비용절감이다 보니 매월 만원이 넘는 금액을 내고 고정IP를 받는 것은 피하고 싶었다.
    • DDNS를 이용하면 동적으로 IP의 변경을 감지하고 변경된 IP로 routing해줄 수 있겠다는 생각에 DDNS를 쓰기로 결정했다.
 

우분투 설치

집에 쓸만한 USB 드라이브가 없어서 저렴한 것을 하나 구매했다.
notion image
notion image
 
우분투를 설치하고 WiFi 연결을 해줬다. 집에 남는 랜 선이 없어서, 우선 무선 연결을 했다. 우분투 서버에서 CLI로 WiFi 연결을 해본건 그러고 보니 처음이다.
 

WiFi 연결

네트워크 인터페이스 확인

사양 상 무선랜카드는 포함된 제품이라, 먼저 우분투용 네트워크 드라이버가 있는지 체크해본다.
"wlp3s0" 또는 "wlan0" 와 같은 이름으로 표시되는 것이 무선랜 인터페이스 이름입니다. 출처: https://apost.dev/1140/
 
블로그를 참고하면서 진행했다.
$ ls /sys/class/net
 
확인해보니 내 컴퓨터는 wlp3s0 이었다.
 

WiFi 이름 및 비밀번호 준비

다음으로 연결할 WiFi의 이름(SSID NAME)과 비밀번호를 준비해준다. SSID가 뭘까 싶었는데, 맥 기준 연결하는 WiFI의 이름이었다. (U+NetB123_5G 와 같은 우리가 흔히 연결하는 WiFi 이름)
 
비밀번호는 WiFi 비밀번호다.
 

yaml 수정으로 WiFi 연결하기

다음으로 yml 파일을 수정해주어 수동으로 WiFi를 연결해주었다.
$ ls /etc/netplan 50-cloud-init.yaml
 
저 디렉토리 안에 있는 yaml 파일을 수정해 주면 된다고 한다. 자세한 내용은 위 블로그 참고.
 
아래와 같이 설정하면 된다.
network: ethernets: {} version: 2 wifis: wlp3s0: dhcp4: true optional: true access-points: "WiFi 이름을 따옴표 안에 입력": password: "비밀번호를 따옴표 안에 입력"
 
입력 후 apply를 해준다
$ sudo netplan apply
 

확인

$ ip a
 
  1. 업데이트 해준 wlp3s0 / wlan0 의 state가 “UP”으로 되어 있는지 확인해준다.
  1. 유선랜 연결 제거 후, curl 명령어로 google.com 같은 사이트를 가져오는지 체크해본다
 
 

유선랜 연결

나의 경우 유선랜을 연결해도 바로 유선랜으로 연결이 되지 않았다. 그래서 유선랜도 유사한 방법으로 수동 연결해줬다.
 
$ ip a
명령어로 확인해보면, enp2s0이 DOWN 상태였다.
notion image
 
/etc/netplan/50-cloud-init.yaml을 확인해보니 아래와 같아서 그런 것이었다.
network: ethernets: {} version: 2 wifis:
WiFi 말고 이더넷 설정도 아래처럼 추가해줬다.
network: ethernets: enp2s0: dhcp4: true
 
이후 다시 sudo netplan apply
 
ip a 명령어로 확인해보니 정상적으로 UP으로 state가 변경되었다.
 
 

마치며

우분투를 UI로는 사용해봤지만 서버로 설치해보고 사용해본 것은 처음이었다. WSL을 사용하면 WiFi도, 이더넷도 자동으로 연결해줬기 때문에 평소에는 생각해보지 않았는데, 네트워크 연결부터 신선했다.
 
다음으로는 K3S를 설치하고 클러스터를 구축하는 작업을 할 것이다.

참고자료