Proxmox에서 쿠버네티스 구축하기: K8s vs K3s 현실적인 비교
Proxmox 환경에서 컨테이너 오케스트레이션을 구축할 때 가장 고민되는 부분이 바로 “표준 Kubernetes를 쓸까, K3s를 쓸까?”입니다. 둘 다 쿠버네티스지만 실제 운영 환경에서는 상당한 차이가 있어서, 선택을 잘못하면 나중에 골치 아픈 일이 생깁니다.
Kubernetes와 K3s, 뭐가 다른가?
Kubernetes (일반적으로 K8s)
구글에서 만든 원조 쿠버네티스입니다. 엔터프라이즈 환경에서 사용하는 “완전체”라고 보면 됩니다.
구성 요소
- Control Plane에 etcd, kube-apiserver, kube-controller-manager, kube-scheduler가 모두 독립적으로 돌아감
- 각 Worker 노드에는 kubelet과 kube-proxy 필요
- CNI, CSI, Ingress Controller 등을 별도로 설치해야 함
특징
- 모든 기능을 다 쓸 수 있음
- 설정이 복잡하지만 커스터마이징 자유도가 높음
- 메모리를 상당히 많이 먹음
K3s
Rancher에서 만든 경량화 버전입니다. “Kubernetes의 가벼운 형제”라고 생각하면 됩니다.
구성 요소
- 모든 Control Plane 구성 요소가 하나의 프로세스로 통합
- etcd 대신 SQLite를 기본으로 사용 (외부 DB도 가능)
- Flannel CNI, Traefik Ingress, CoreDNS가 기본으로 포함
특징
- 설치가 정말 간단함 (curl | sh 한 줄이면 끝)
- 메모리를 적게 사용
- 100% 쿠버네티스 API 호환
실제 리소스 사용량 비교
홈랩 환경에서 3노드 클러스터를 기준으로 비교하면:
Kubernetes
Control Plane: 4 vCPU, 8GB RAM
Worker 1: 4 vCPU, 8GB RAM
Worker 2: 4 vCPU, 8GB RAM
총합: 12 vCPU, 24GB RAM
시스템 자체 오버헤드만 해도 노드당 2-3GB 정도 먹습니다. 실제 워크로드 올리기 전에 이미 상당한 리소스가 필요해요.
K3s
Server: 2 vCPU, 4GB RAM
Agent 1: 2 vCPU, 4GB RAM
Agent 2: 2 vCPU, 4GB RAM
총합: 6 vCPU, 12GB RAM
노드당 오버헤드가 500MB-1GB 수준입니다. 같은 기능을 하는데 절반의 리소스로 가능해요.
VM vs LXC 선택
이 부분이 Proxmox에서 가장 중요한 선택입니다.
Kubernetes는 VM이 낫다
이유:
- 완전한 커널 격리가 필요함
- 모든 CNI 플러그인(Cilium, Calico 등)을 제대로 쓰려면 VM이 안전
- eBPF 같은 고급 기능들은 LXC에서 제약이 있음
K3s는 LXC도 괜찮다
이유:
- 경량화 설계로 중첩 컨테이너 문제가 적음
- 기본 Flannel CNI는 LXC에서도 잘 작동
- 리소스 효율성이 더 중요한 환경에서는 LXC 장점이 큼
어떤 걸 선택해야 할까?
Kubernetes를 써야 하는 경우
엔터프라이즈급 기능이 필요할 때
- Service Mesh (Istio, Linkerd)
- 고급 네트워킹 (Cilium eBPF 모드)
- 복잡한 보안 정책
- 대규모 클러스터 (노드 50개 이상)
충분한 리소스가 있을 때
- 64GB+ RAM
- 16+ CPU 코어
- 전용 스토리지
K3s를 써야 하는 경우
홈랩이나 소규모 환경
- 제한된 하드웨어 리소스
- 간단한 웹 애플리케이션 호스팅
- 개발/테스트 환경
빠른 구축이 필요할 때
- 프로토타이핑
- 데모 환경
- 학습 목적
실제 구성 예시
32GB RAM 홈랩 서버에서 K3s + LXC
# LXC 컨테이너 생성
pct create 100 local:vztmpl/ubuntu-22.04-standard_22.04-1_amd64.tar.zst \
--cores 2 --memory 4096 \
--net0 name=eth0,bridge=vmbr0,ip=192.168.1.10/24,gw=192.168.1.1 \
--storage local-lvm --rootfs local-lvm:30 \
--unprivileged 0 --features nesting=1,fuse=1
# K3s 설치 (서버 노드)
curl -sfL https://get.k3s.io | sh -
# 에이전트 노드 추가
curl -sfL https://get.k3s.io | K3S_URL=https://192.168.1.10:6443 \
K3S_TOKEN=<서버에서 복사한 토큰> sh -이렇게 하면 10분 내에 3노드 클러스터가 완성됩니다.
64GB+ RAM 서버에서 Kubernetes + VM
# VM 생성 (Control Plane)
qm create 100 --name k8s-control \
--cores 4 --memory 8192 \
--net0 virtio,bridge=vmbr0 \
--scsi0 local-lvm:100G
# kubeadm으로 초기화
kubeadm init --pod-network-cidr=10.244.0.0/16
# CNI 설치 (예: Flannel)
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml설치 과정이 복잡하지만 모든 기능을 자유롭게 사용할 수 있습니다.
결론
리소스가 제한적이거나 간단한 용도라면 K3s + LXC
- 빠르고 간단
- 리소스 효율적
- 대부분의 일반적인 워크로드에 충분
복잡한 기능이나 대규모 환경이라면 Kubernetes + VM
- 완전한 기능성
- 확장성과 안정성
- 엔터프라이즈 환경에 적합
개인적으로는 홈랩에서는 K3s로 시작해서, 나중에 필요하면 Kubernetes로 넘어가는 것을 추천합니다. 어차피 kubectl 명령어나 yaml 파일은 동일하니까 학습 내용이 무효가 되지 않거든요.
중요한 건 완벽한 선택보다는 지금 상황에 맞는 선택입니다. 일단 시작해보고 부족하면 확장하는 것이 더 현실적인 접근이라고 생각합니다.