Bullshitting Blog

개소리하는 블로그

KVM K8S 클러스터 대충 완성

Tags = [ infra ]

회사에선 사용성 높은 RKE2를 이용해서 Ubuntu 머신에 쿠버네티스 클러스터를 운영한다.
하지만 집에선? 깡으로 간다. 항상 그 깡으로 가는 방식을 실제로 해보는게 실제로 습관이자 취미이다.

결과물은 여기에 있다. 세팅이라는 행위 자체가 무한 삽질이므로, 단계별로 스크립트를 짜면서 삽질을 한다. 그래서 VM까지 다 통째로 날리고 다시 테스트하는 짓을 해도 20분 걸린다.

home-cluster

What or Why

VM

자 그럼 일단, 그 KVM이 뭔가? QEMU는 또 뭔가? 간단히 말하면, VM을 만들어주는 녀석은 QEMU, 거기다가 각종 커널 인터페이스를 제공해주는 녀석이다.
이렇게 설명할거면 뭐하러 설명을 하냐. 그냥 문서 찾아보라고 하지.
쉽게 설명해 보겠다.
조립컴퓨터를 만든다 치자. 신나게 부품을 사다가 가지고 왔다. 케이스에 메인보드와 파워를 체결한다. 이게 QEMU가 해주는 역할이다.
이제 메모리를 꽂고, cpu를 꽂고, gpu도 꽂아보자. 그게 KVM이 해주는 역할이다.

쿨러 등은 생각하지 말자.

KVM은 그 cpu, mem, gpu 자원을 호스트에서 실행하게 해주고, 커널은 호스트의 것을 사용하게 한다. 물론 격리된다.

그런데 QEMU도 단독으로 사용 가능하다. 내장된 기능이 있다. 게다가 이건 다른 아키텍쳐도 실행이 가능하다. arm이라던지 말이다.
너무 좋잖아? 세상 너무 대단하다.

Network

GPT 선생은 bridge를 강력 추천했다. 그래서 NAT로 구성했다. 박진감 넘치는 미래가 예상된다. 물론 현재도 박진감 넘쳤다. 나중에 그림이 하나 나올건데, 서버에서 포트포워딩을, 노트북에서 라우팅 설정을 하다가 포기한 결과다. 라우팅만 해결하면 되는거같지만, 사실 더 있다. modprobe, sysctl도 건드렸다. 그래도 안됨. 결국 dns가 문제였다. 커맨드라인에서 dig까진 성공했으나, 웹에서 포기함. 근데 또 언젠가 또 오기 생기면 이거 파고 있을 예정이다.

Alpine

VM의 OS는 Alpine을 선택했다. 경량 하면 Alpine이다. glibc조차 없다. 대신 musl 라이브러리를 사용한다.
호환성? 당연 개구리다(개굴개굴 노 멍멍 예스). libtorch 이용도 안된다. 물론 어찌저찌 붙인 적은 있는데, 실제로 잘 돌지는 모름.
근데 왜 사용하냐 한다면, 이것도 그냥 취미다. 안된다는거 골라서 다 해보는 것 말이다. 근데 그런걸 회사에서 할 수는 없으니, 집에서 푸는거다.
아 물론, GPU 노드는 ubuntu server minimal로 깔았다. libtorch는 glibc가 없으면 안돈다. 물론 학습 돌릴 것은 없지만 말이다.

Kubernetes with kubeadm

RKE2를 한 번 써봤더니, 그 편함에 잠시 약해졌다. 게다가 1.26버전이 나오던 시절에 쿠버네티스와 잠시 이별을 했었기 때문에, 오랜만에 사용하니 보안성 강화를 위해 kubeadm 사용이 조금 복잡해졌다. 뭐 어쨌든, 다시 강해지도록 하자 ㅋㅋ.
과거 kubespray라는 툴이 있었고, 실제로 사용법도 배웠다. 하지만, 폐쇄망 기반에 보안팀이 강력한 고객사에서 클러스터를 운영하려니 스택이 많을 수록 더 어려워져서 결국 kubeadm이 가장 좋은 선택지였다. 그냥 이미지랑 바이너리를 미리 파일로 말아서 가져가면 되는 일이었기 때문이다(우린 이미지를 빌드하거나, 패키징을 하는 행위를 "말다"로 표현했다).

Bind

DNS 서버 구축하기 위한 아주 오래된 스택이다.
문법도 지랄맞다. 암기과목이다. 하지만 요즘은 GPT라는 집단지성 하드디스크가 있으므로, 오히려 이런 오래된게 더 편함.

HaProxy

로드밸런서이자, Proxy이다. 회사에서 써보고 감탄했다. dns 세팅은 간단히 해버리고, proxy에서 왠만한건 다 라우팅해버린다. 여기다 인증서 반영해 두면 https도 알아서 지원된다. control-plane 노드를 3개 구성한 후 이걸 어떻게 분산해서 쓰는가에 대해 답을 주는 녀석이다. 물론 virtual ip를 이용하는 방법도 있는데, 이건 스위치랑 라우터 등등 네트워크 장비와 싱크가 안맞으면 지옥을 맛본다.

How

아 이게... 설명하기가 정말 귀찮다. 다 스크립트 만들어 뒀고 실행하면 되는데 그걸 설명하는건 정말이지...
그래서 RTFM을 시전한다. README에 다 있다.
무슨 짓을 한 것인지는, 그림을 첨부하겠다.

원래 목표

topology-objective.png

현재 상태

topology-current.png

현재 목표=원래 목표

Next

NAS 서버를 직접 만들어 볼 것이다. 부품은 다 왔는데, GPU passthrough 한다고 삽질하느라 많이 지체됐다.