목차
- 경량 쿠버네티스, 왜 지금 이 선택이 중요한가요?
- k3s와 MicroK8s, 각각 어떤 녀석인가요?
- k3s — "진짜 가볍게 만들어 버렸다"
- MicroK8s — "Ubuntu 생태계에서 편하게"
- k3s vs MicroK8s 핵심 스펙 비교
- k3s 설치: 진짜 이렇게 간단해도 되나?
- 마스터 노드(서버) 설치
- 워커 노드(에이전트) 추가
- kubeconfig 설정 (로컬 PC에서 접속)
- MicroK8s 설치: Ubuntu라면 이게 편할 수도
- 설치 및 기본 설정
- 애드온 활성화 — 이게 MicroK8s의 핵심이에요
- MicroK8s 멀티노드 클러스터 구성
- ⚠️ 실제로 써보면서 만난 문제들
- k3s에서 자주 만나는 문제들
- MicroK8s에서 자주 만나는 문제들
- 간단한 애플리케이션 배포로 검증해보기
- 결국 뭘 골라야 할까? — 상황별 선택 가이드
- k3s를 선택해야 하는 경우
- MicroK8s를 선택해야 하는 경우
- 제 개인적인 결론
- 자주 묻는 질문 (FAQ)
- Q. k3s와 MicroK8s는 실제 쿠버네티스랑 호환되나요?
- Q. 라즈베리파이 4에서 어느 쪽이 더 잘 돌아가나요?
- Q. 나중에 풀스택 쿠버네티스로 마이그레이션하기 어렵나요?
- Q. 프로덕션 환경에서 써도 되나요?
- 마무리: 일단 설치해 보세요
경량 쿠버네티스, 왜 지금 이 선택이 중요한가요?
홈랩을 운영하다 보면 꼭 한 번씩 마주치는 고민이 있어요. "쿠버네티스(Kubernetes)는 써보고 싶은데, 풀스택 k8s를 올리기엔 서버가 너무 작다..." 저도 딱 그랬거든요. 라즈베리파이(Raspberry Pi) 클러스터 위에 뭔가 올려보려고 했는데, 일반 쿠버네티스는 메모리만 수 GB를 잡아먹으니 엄두가 안 나더라고요.
그래서 찾게 된 게 경량 쿠버네티스(Lightweight Kubernetes)입니다. 그중에서도 현재 가장 많이 언급되는 두 가지가 바로 k3s와 MicroK8s예요. 이 둘, 뭐가 다른지 처음엔 저도 진짜 헷갈렸습니다. 이름도 비슷하고 목적도 비슷한 것 같고... 근데 실제로 써보면 꽤 다르거든요.
이번 글에서는 제가 직접 두 솔루션을 홈랩에서 돌려보면서 느낀 점, 그리고 어떤 상황에서 어떤 걸 선택해야 하는지 정리해 드릴게요. 엣지 컴퓨팅(Edge Computing) 환경이나 라즈베리파이 쿠버네티스 구성을 고민 중이신 분들께 특히 도움이 될 거예요.
k3s와 MicroK8s의 전체 아키텍처 구조를 한눈에 비교한 다이어그램. 각각의 구성 요소와 설계 철학의 차이를 보여줍니다.
k3s와 MicroK8s, 각각 어떤 녀석인가요?
k3s — "진짜 가볍게 만들어 버렸다"
k3s는 Rancher Labs(현재 SUSE)에서 만든 경량 쿠버네티스 배포판입니다. 공식 CNCF(Cloud Native Computing Foundation) 인증 프로젝트이기도 해요. 핵심 철학은 딱 하나예요. "싱글 바이너리(single binary)로 모든 걸 해결하자."
쉽게 말해, etcd(이티시디, 쿠버네티스의 상태 저장소) 대신 기본적으로 SQLite를 쓰고, 불필요한 컴포넌트를 싹 쳐냈어요. 덕분에 바이너리 하나가 약 100MB 남짓이고, 메모리도 정말 적게 씁니다. 라즈베리파이 같은 저사양 ARM 기기에서도 잘 돌아가는 이유가 여기 있어요.
- 단일 바이너리로 설치 및 실행
- 기본 데이터스토어: SQLite (고가용성 구성 시 etcd 또는 외부 DB 사용 가능)
- ARM 아키텍처 공식 지원 (라즈베리파이 최적)
- Flannel(플란넬) CNI 기본 내장
- Traefik(트래픽) Ingress Controller 기본 포함
- CNCF 공식 인증 쿠버네티스
MicroK8s — "Ubuntu 생태계에서 편하게"
MicroK8s는 Canonical(캐노니컬, Ubuntu 만드는 회사)에서 만든 경량 쿠버네티스예요. 설치 방식이 좀 독특한데, Snap(스냅) 패키지 매니저를 통해 설치합니다. Ubuntu 환경이라면 진짜 설치가 간단해요.
k3s와 달리 MicroK8s는 애드온(addon) 시스템이 핵심이에요. 기본 설치는 가볍게 하고, 필요한 기능(DNS, 대시보드, Ingress, 스토리지 등)을 명령어 하나로 활성화하는 방식이거든요. 개발 환경이나 Ubuntu 서버에서 빠르게 쿠버네티스를 시험해보고 싶을 때 특히 편합니다.
- Snap 패키지로 설치 (Ubuntu/Linux 최적화)
- 애드온 시스템으로 필요한 기능만 활성화
- 단일 노드 개발 환경에 강점
- Canonical의 지원 및 업스트림 쿠버네티스와 빠른 동기화
- ARM 지원 (단, k3s 대비 리소스 사용량이 다소 높음)
k3s vs MicroK8s 핵심 스펙 비교
말로만 하면 헷갈리니까 표로 정리해 봤어요. 제가 직접 테스트하면서 확인한 내용 위주입니다.
| 항목 | k3s | MicroK8s |
|---|---|---|
| 개발사 | Rancher Labs / SUSE | Canonical (Ubuntu) |
| 설치 방식 | curl 스크립트 / 단일 바이너리 | Snap 패키지 |
| 기본 데이터스토어 | SQLite (소규모) / etcd 선택 가능 | dqlite (분산 SQLite) |
| 기본 CNI | Flannel | Calico (기본 활성화) |
| Ingress 기본 포함 | Traefik (기본 활성화) | nginx (애드온으로 활성화) |
| ARM 지원 | 매우 우수 (라즈베리파이 최적) | 지원 (단, x86 최적화) |
| 멀티노드 클러스터 | 매우 간단 | 가능 (설정 다소 복잡) |
| CNCF 인증 | ✅ 인증 | ✅ 인증 |
| 주요 사용 환경 | 엣지, IoT, 라즈베리파이, 프로덕션 경량화 | 개발/테스트, Ubuntu 서버, 단일 노드 |
| OS 의존성 | 낮음 (대부분의 Linux 지원) | 높음 (Snap 지원 OS 필요) |
💡 핵심 포인트: 둘 다 CNCF 공식 인증을 받은 쿠버네티스예요. 즉, 표준 kubectl 명령어와 YAML 매니페스트가 그대로 동작합니다. "이거 진짜 쿠버네티스 맞아?" 걱정 안 하셔도 돼요.
k3s 설치: 진짜 이렇게 간단해도 되나?
처음 k3s를 설치했을 때 솔직히 당황했어요. 너무 간단해서요. "이게 다야?" 싶었거든요. 라즈베리파이 OS나 Ubuntu 기준으로 설명드릴게요.
마스터 노드(서버) 설치
# k3s 서버(마스터 노드) 설치 — 딱 한 줄입니다
curl -sfL https://get.k3s.io | sh -
# 설치 완료 후 상태 확인
sudo systemctl status k3s
# 노드 상태 확인
sudo kubectl get nodes
이게 전부예요. 진짜로요. 스크립트가 k3s 바이너리를 받아서 systemd 서비스로 등록까지 해줍니다. 설치 후 1~2분 기다리면 노드가 Ready 상태가 돼요.
워커 노드(에이전트) 추가
# 마스터 노드에서 토큰 확인
sudo cat /var/lib/rancher/k3s/server/node-token
# 워커 노드에서 실행 (K3S_TOKEN과 서버 IP를 바꿔주세요)
curl -sfL https://get.k3s.io | K3S_URL=https://마스터노드IP:6443 \
K3S_TOKEN=여기에토큰값 sh -
라즈베리파이 3대로 클러스터 구성할 때 이 명령어로 10분 만에 끝냈어요. 삽질 없이요. 😄
kubeconfig 설정 (로컬 PC에서 접속)
# 마스터 노드에서 kubeconfig 복사
sudo cat /etc/rancher/k3s/k3s.yaml
# 로컬 PC의 ~/.kube/config 에 붙여넣기
# server: https://127.0.0.1:6443 부분을 실제 서버 IP로 변경
# 예: server: https://192.168.1.100:6443
⚠️ 주의: k3s.yaml 파일의 server 주소가 기본적으로 127.0.0.1로 돼 있어요. 원격 접속할 때 반드시 실제 IP로 바꿔줘야 합니다. 이거 놓치면 "connection refused" 보면서 한참 헤맬 수 있어요. 저도 한 30분 고생했었습니다 ㅎㅎ
MicroK8s 설치: Ubuntu라면 이게 편할 수도
MicroK8s는 Ubuntu 환경이라면 진짜 편해요. Snap으로 설치하니까요. 다만 Snap이 없는 OS에서는 좀 번거로울 수 있습니다.
설치 및 기본 설정
# MicroK8s 설치 (Ubuntu 기준)
sudo snap install microk8s --classic
# 현재 사용자를 microk8s 그룹에 추가 (sudo 없이 사용하려면 필수)
sudo usermod -aG microk8s $USER
newgrp microk8s
# 상태 확인
microk8s status --wait-ready
# kubectl 사용 (microk8s.kubectl 또는 alias 설정)
microk8s kubectl get nodes
# 편하게 쓰려면 alias 등록
alias kubectl='microk8s kubectl'
애드온 활성화 — 이게 MicroK8s의 핵심이에요
# DNS 활성화 (거의 필수)
microk8s enable dns
# 대시보드 활성화
microk8s enable dashboard
# Ingress 컨트롤러 활성화
microk8s enable ingress
# 스토리지(hostpath) 활성화
microk8s enable hostpath-storage
# 여러 개 한 번에 활성화
microk8s enable dns dashboard ingress hostpath-storage
# 활성화된 애드온 확인
microk8s status
MicroK8s의 애드온 시스템과 k3s 멀티노드 클러스터 구성 화면. 각각의 설치 및 설정 방식의 차이를 보여줍니다.
MicroK8s 멀티노드 클러스터 구성
# 마스터 노드에서 조인 토큰 생성
microk8s add-node
# 출력된 명령어를 워커 노드에서 실행 (예시)
# microk8s join 192.168.1.100:25000/토큰값/해시값
k3s보다 조금 더 손이 가긴 하지만, 출력된 명령어를 그대로 복붙하면 돼서 어렵진 않아요.
⚠️ 실제로 써보면서 만난 문제들
둘 다 써보면서 "아, 이거 주의해야 하는구나" 싶었던 것들 솔직하게 공유할게요.
k3s에서 자주 만나는 문제들
- 라즈베리파이 cgroup 설정: 라즈베리파이 OS에서 k3s 실행 시 cgroup(컨트롤 그룹, 리소스 제어 메커니즘) 설정이 안 돼 있으면 노드가 NotReady 상태로 뜹니다.
/boot/cmdline.txt(또는/boot/firmware/cmdline.txt)에cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1를 추가하고 재부팅해야 해요. - Traefik vs 내 Ingress 충돌: k3s는 Traefik을 기본으로 깔아줘요. 근데 nginx Ingress를 따로 쓰고 싶다면 k3s 설치 시
--disable traefik옵션을 줘야 합니다. 나중에 충돌 나면 진짜 원인 찾기 어렵거든요. - 방화벽 포트: 멀티노드 구성 시 6443(API 서버), 8472(Flannel VXLAN), 10250(kubelet) 포트가 열려있어야 해요. UFW 켜놓고 왜 에이전트가 안 붙나 한참 봤던 경험이 있어요.
MicroK8s에서 자주 만나는 문제들
- Snap 업데이트 자동 재시작: Snap 패키지 특성상 자동 업데이트가 되면서 MicroK8s가 재시작되는 경우가 있어요. 프로덕션에서 쓴다면
sudo snap refresh --hold microk8s로 자동 업데이트를 잠시 홀드해두는 게 좋습니다. - Snap 미지원 OS: CentOS나 일부 최소화 배포판에서는 Snap 자체가 없어서 설치가 번거로워요. 이런 환경에선 k3s가 훨씬 편합니다.
- DNS 애드온 활성화 순서: 다른 애드온보다 DNS를 먼저 활성화해야 해요. 순서 안 지키면 파드 간 통신이 안 되는 경우가 있더라고요.
💡 공통 팁: 두 솔루션 모두 kubectl 명령어는 동일하게 사용할 수 있어요. 한쪽에서 작성한 YAML 매니페스트를 다른 쪽에서 그대로 apply해도 됩니다. 그 점은 진짜 편하더라고요.
간단한 애플리케이션 배포로 검증해보기
설치만 하고 끝내면 아쉽죠. 간단한 nginx 파드를 배포해서 정상 동작을 확인해 봅시다. 두 솔루션 모두 동일한 YAML로 테스트할 수 있어요.
# nginx-test.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-test
labels:
app: nginx-test
spec:
replicas: 2
selector:
matchLabels:
app: nginx-test
template:
metadata:
labels:
app: nginx-test
spec:
containers:
- name: nginx
image: nginx:stable
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-test-svc
spec:
selector:
app: nginx-test
ports:
- port: 80
targetPort: 80
type: NodePort
# 배포
kubectl apply -f nginx-test.yaml
# 파드 상태 확인 (Running이 되어야 정상)
kubectl get pods -o wide
# 서비스 확인 (NodePort 번호 확인)
kubectl get svc nginx-test-svc
# 접속 테스트 (NodePort 번호는 위에서 확인한 번호로)
curl http://노드IP:NodePort번호
"Welcome to nginx!" 가 뜨면 성공입니다! 🎉 이 YAML은 k3s든 MicroK8s든 동일하게 동작해요.
kubectl get nodes와 get pods 명령어로 확인한 클러스터 정상 동작 결과. 두 노드 모두 Ready 상태이며 파드가 Running 중인 것을 확인할 수 있습니다.
결국 뭘 골라야 할까? — 상황별 선택 가이드
"그래서 뭐 써요?"라는 질문을 제일 많이 받아요. 솔직히 말씀드리면, 상황에 따라 달라요. 제가 정리한 선택 기준 공유해 드릴게요.
k3s를 선택해야 하는 경우
- ✅ 라즈베리파이나 ARM 기기를 사용하는 경우 — k3s가 압도적으로 유리해요
- ✅ 엣지 컴퓨팅, IoT 환경 — 리소스가 제한적인 환경에서의 프로덕션 배포
- ✅ 멀티노드 클러스터를 빠르게 구성해야 할 때
- ✅ Ubuntu 외 OS(CentOS, Debian, Alpine 등)를 사용하는 경우
- ✅ CI/CD 파이프라인에 경량 쿠버네티스 환경이 필요할 때
- ✅ Snap을 쓰기 싫거나 쓸 수 없는 환경
MicroK8s를 선택해야 하는 경우
- ✅ Ubuntu 서버/데스크탑이 주 환경인 경우 — 설치와 관리가 정말 편해요
- ✅ 로컬 개발/테스트 환경 — 단일 노드에서 빠르게 시험해볼 때
- ✅ 애드온 시스템이 매력적인 경우 — 필요한 기능을 명령어 하나로 켜고 끄고 싶을 때
- ✅ Canonical 생태계와 통합이 필요한 경우 (Ubuntu Pro, Landscape 등)
- ✅ 업스트림 쿠버네티스 최신 버전을 빠르게 따라가고 싶을 때
제 개인적인 결론
저는 홈랩에서 라즈베리파이 클러스터는 k3s, x86 Ubuntu 서버에서 빠른 테스트는 MicroK8s를 씁니다. 둘 다 훌륭한 도구예요. 어느 쪽을 선택하든 "진짜 쿠버네티스"를 배울 수 있고, 나중에 풀스택 k8s로 넘어가도 배운 게 그대로 써먹힙니다.
k3s와 MicroK8s 상황별 선택 가이드 요약. 사용 환경, 목적, OS에 따른 최적의 선택을 한눈에 정리한 인포그래픽입니다.
자주 묻는 질문 (FAQ)
Q. k3s와 MicroK8s는 실제 쿠버네티스랑 호환되나요?
네, 둘 다 CNCF 공식 인증을 받은 쿠버네티스입니다. 표준 kubectl 명령어와 YAML 매니페스트가 그대로 동작하고, Helm 차트도 사용할 수 있어요.
Q. 라즈베리파이 4에서 어느 쪽이 더 잘 돌아가나요?
k3s가 더 유리합니다. ARM 아키텍처 최적화가 잘 돼 있고, 메모리 사용량도 더 적어요. MicroK8s도 ARM을 지원하지만, 라즈베리파이 환경에서는 k3s가 훨씬 검증이 잘 돼 있습니다.
Q. 나중에 풀스택 쿠버네티스로 마이그레이션하기 어렵나요?
애플리케이션 레벨(YAML 매니페스트, Helm 차트)은 그대로 이전할 수 있어요. 다만 스토리지 클래스나 네트워크 플러그인 설정은 환경에 맞게 다시 잡아줘야 합니다. 어렵다기보다는 손이 좀 가는 작업이에요.
Q. 프로덕션 환경에서 써도 되나요?
k3s는 실제로 엣지 컴퓨팅, 리테일, 제조업 현장 등 다양한 프로덕션 환경에서 사용되고 있습니다. 고가용성(HA) 구성도 지원해요. MicroK8s도 프로덕션 사용이 가능하지만, 일반적으로 개발/테스트 환경에서 더 많이 쓰이는 경향이 있습니다.
마무리: 일단 설치해 보세요
k3s와 MicroK8s 비교, 어떠셨나요? 사실 이 글을 쓰면서 다시 한번 느낀 건데, 이 두 도구 모두 "쿠버네티스 진입 장벽을 낮추자"는 목표 하나는 정말 잘 달성했어요. 예전엔 쿠버네티스 클러스터 하나 올리는 데 반나절씩 걸렸는데, 지금은 30분이면 충분하니까요.
제 추천은 간단해요. 라즈베리파이나 ARM 기기, 또는 멀티노드 엣지 환경이라면 k3s, Ubuntu 서버에서 빠르게 개발/테스트하고 싶다면 MicroK8s. 고민이 길어지면 일단 k3s로 시작해보세요. 단일 명령어 설치에 문서도 풍부하거든요.
다음 글에서는 k3s 위에 Helm(헬름, 쿠버네티스 패키지 매니저)과 ArgoCD(아르고시디, GitOps 배포 도구)를 올려서 홈랩 GitOps 파이프라인을 구성하는 내용을 다뤄볼 예정입니다. 경량 쿠버네티스를 설치했으면, 이제 그 위에 뭔가를 올려야죠! 🚀
혹시 설치하다가 막히는 부분이 있으시면 댓글로 남겨주세요. 제가 겪어본 삽질이라면 같이 풀어드릴 수 있을 것 같아요. 😄
'IT > k8s' 카테고리의 다른 글
| [k8s] ArgoCD로 멀티 클러스터 GitOps 배포 자동화 완벽 가이드 (0) | 2026.05.20 |
|---|---|
| [k8s] 쿠버네티스 Ingress Controller 비교: Nginx, Traefik, HAProxy 장단점 분석 (0) | 2026.05.18 |
| [k8s] ArgoCD GitOps CI/CD 구축: 쿠버네티스 자동 배포 완벽 가이드 (0) | 2026.05.18 |
| [k8s] ArgoCD 멀티 클러스터 배포 전략: GitOps로 K8s 여러 환경을 효과적으로 관리하기 (1) | 2026.05.16 |
| [k8s] Flux CD GitOps 파이프라인 구축: 안정적인 쿠버네티스 배포 자동화 (0) | 2026.05.15 |
| [k8s] 쿠버네티스 서비스 메시: Istio vs Linkerd 심층 비교 및 선택 가이드 (0) | 2026.05.14 |