컨테이너가 많아지면 어떻게 되나요. 어떤 서버에 어떤 앱을 띄웠는지 헷갈립니다. 한 서버가 죽으면 그 안의 앱도 같이 죽습니다. 트래픽이 몰리면 손으로 복제본 수를 늘려야 합니다. Kubernetes는 이런 운영을 엔진에 맡기는 오케스트레이션 도구입니다. 다만 풀 Kubernetes는 무겁습니다. 이 글에서는 단일 VPS에 k3s라는 경량 Kubernetes를 올려 입문하는 완벽 가이드를 다룹니다.
Kubernetes가 해결하는 문제
W31에서 Docker Compose로 웹·DB·캐시 컨테이너를 한 번에 올렸습니다. Compose는 단일 호스트에서는 훌륭합니다. 하지만 컨테이너가 죽었을 때 자동으로 다시 띄워주지는 않습니다. 트래픽에 맞춰 복제본 수를 자동 조절하지도 않습니다. 여러 서버에 컨테이너를 분산하는 것도 직접 해야 합니다.
Kubernetes는 이런 것들을 선언적으로 처리합니다. “nginx 복제본 2개가 항상 떠 있어야 해”라고 YAML로 적어두면, 컨테이너가 죽어도 자동으로 다시 띄워주고 서버 자원에 맞춰 분산합니다.
핵심 개념 3가지 — 파드·디플로이먼트·서비스
- 파드(Pod): Kubernetes의 최소 실행 단위. 보통 컨테이너 한 개를 담습니다.
- 디플로이먼트(Deployment): “파드를 몇 개 유지할지”를 선언하는 컨트롤러. 복제본 수, 재시작 정책, 롤링 업데이트를 관리합니다.
- 서비스(Service): 파드를 외부에 노출하거나 파드 간 통신을 중개하는 안정적인 엔드포인트. 파드는 언제든 재생성되어 IP가 바뀌므로, 서비스가 고정 주소를 제공합니다.
왜 k3s인가 — 경량 Kubernetes의 등장
풀 Kubernetes는 etcd라는 분산 키-값 저장소, 컨트롤플레인 여러 컴포넌트로 구성됩니다. 배우는 데도, 리소스도 무겁습니다. k3s는 Rancher Labs가 만든 경량 Kubernetes입니다.
- 단일 바이너리: 모든 구성 요소가 하나의 실행 파일에 들어 있습니다.
- SQLite 기본 저장소: etcd 대신 SQLite를 써서 단일 노드에서 가볍게 동작합니다(외부 DB로 확장도 가능).
- 512MB 메모리면 동작: 작은 VPS 한 대에 올라갑니다. W32 Redis와 같은 서버에 공존할 수 있을 만큼 가볍습니다.
- 엣지·IoT·단일 노드: 사이드 카 빌드, CI runner, 개발 클러스터 등에 널리 쓰입니다.
1. 단일 VPS에 k3s 설치
설치는 공식 스크립트 한 줄입니다.
curl -sfL https://get.k3s.io | sh -
# 확인
sudo systemctl status k3s
sudo kubectl get nodes
# NAME STATUS ROLES AGE VERSION
# your-vps Ready control-plane,master 30s v1.29.0+k3s1
kubeconfig는 /etc/rancher/k3s/k3s.yaml에 생깁니다. kubectl이 즉시 사용 가능합니다.
2. kubectl 기본 조작
Docker(W15) 명령어와 비슷하지만, 대상이 “로컬 컨테이너”가 아니라 “클러스터 전체의 파드”입니다.
# 파드 목록
kubectl get pods -A
# 디플로이먼트
kubectl get deployments
# 상세 정보
kubectl describe pod <name>
# 로그
kubectl logs <pod-name>
# 파드 안에서 명령 실행
kubectl exec -it <pod-name> -- /bin/sh
# 리소스 삭제
kubectl delete -f app.yaml
3. 디플로이먼트 + 서비스 배포
YAML로 nginx 복제본 2개를 선언합니다.
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
spec:
type: NodePort
selector:
app: nginx
ports:
- port: 80
targetPort: 80
nodePort: 30080
kubectl apply -f deployment.yaml
# 파드 2개 확인
kubectl get pods
# nginx-deploy-xxxx-aaaa Running
# nginx-deploy-xxxx-bbbb Running
파드 하나를 강제로 지워봅니다:
kubectl delete pod nginx-deploy-xxxx-aaaa
# 디플로이먼트가 즉시 새 파드를 띄움 → "자가 치유"
트래픽이 몰리면 복제본 수만 바꿉니다:
kubectl scale deployment nginx-deploy --replicas=5
4. Ingress + Traefik — 도메인 연결
k3s는 Traefik을 기본 Ingress 컨트롤러로 내장합니다. W29 Nginx 리버스 프록시와 같은 역할을 클러스터 안에서 수행합니다.
# ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
annotations:
ingress.kubernetes.io/ssl-redirect: "true"
spec:
rules:
- host: app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-svc
port:
number: 80
Traefik이 외부 트래픽을 받아 nginx-svc로 라우팅합니다. cert-manager를 붙이면 Let’s Encrypt 자동 발급까지 가능합니다.
5. Ansible과 결합 — 설치 자동화
W33에서 다룬 Ansible playbook으로 k3s 설치를 자동화할 수 있습니다. role 하나만 있으면 새 VPS에 k3s를 한 번에 올릴 수 있습니다.
# roles/k3s/tasks/main.yml
- name: k3s 설치
shell: curl -sfL https://get.k3s.io | sh -
args:
creates: /usr/local/bin/k3s
- name: kubeconfig 복사
copy:
src: /etc/rancher/k3s/k3s.yaml
dest: "{{ ansible_env.HOME }}/.kube/config"
remote_src: yes
mode: '0600'
이렇게 하면 서버 10대에 k3s를 동시에 올릴 수 있습니다. W33 멱등성 패턴 그대로 적용됩니다.
k3s vs Docker Compose — 언제 뭘 쓸까
| 구분 | Docker Compose (W31) | k3s (W34) |
|---|---|---|
| 적합 규모 | 단일 호스트, 소규모 서비스 | 단일~다중 노드, 컨테이너 수가 많을 때 |
| 자가 치유 | restart: always (제한적) | 디플로이먼트가 항상 복제본 유지 |
| 스케일링 | 수동 scale | kubectl scale, HPA 자동 확장 |
| 학습 비용 | 낮음 (YAML) | 중간~높음 (Kubernetes 개념) |
한 대 서버에 서비스 몇 개면 Compose가 빠르고 단순합니다. 컨테이너가 많아지거나 여러 서버로 확장하면 k3s가 유리합니다.
마무리 — VPS 데브옵스 시리즈 21주 피날레
k3s로 단일 VPS에 경량 Kubernetes를 올리는 방법을 다뤘습니다. 설치 한 줄, YAML 선언으로 자가 치유와 스케일링을 확보했습니다. W33 Ansible과 결합하면 여러 서버로도 쉽게 확장할 수 있습니다.
이것으로 VPS 데브옵스 시리즈 21주차(W14-W34)가 마무리됩니다. W32 Redis 객체 캐시, W33 Ansible playbook과 함께 이 3차 배치를 마무리합니다. 이전 Docker Compose 프로덕션 스택(W31), PostgreSQL 백업 자동화(W30), Nginx 리버스 프록시(W29)도 함께 참고하세요.
VPS 데브옵스 시리즈 피날레. 추천 VPS 링크는 영상 설명란에서 확인하세요.



















