Minikube (미니쿠브)

누구에게 적합한가? 쿠버네티스를 처음 배우는 학습자, 개발자

  • 장점: 로컬 PC에 쉽게 설치 가능 (Windows/Mac/Linux 모두 지원), 개발 도구(IntelliJ 등)와 연동 가능
  • 단점: 단일 노드만 지원, 가상화 도구(Docker, VirtualBox) 필요
  • 활용 예시: 내 컴퓨터에서 쿠버네티스 기능 테스트하기

K3s

누구에게 적합한가? 리소스가 제한적인 환경, IoT 장치

  • 장점: 매우 가볍고 빠른 설치, SQLite 사용으로 경량화, 라즈베리파이에서도 실행 가능
  • 단점: 구조가 단순해서 대규모 운영 환경에는 부적합할 수 있음
  • 활용 예시: 사물인터넷(IoT) 프로젝트, 소규모 서비스

Rancher (랜처)

누구에게 적합한가? 기업 환경, 대규모 시스템 운영자

  • 장점: 모니터링/보안 기능 기본 제공, 여러 클러스터 통합 관리, 멀티 클라우드 지원
  • 단점: 상대적으로 무거움, 소규모 환경에는 과할 수 있음
  • 활용 예시: AWS, Azure, GCP 등 여러 클라우드를 동시에 관리

Kubeadm

누구에게 적합한가? 쿠버네티스 전문가, 커스터마이징이 필요한 경우

  • 특징: 기본 클러스터만 구성, 세부 설정은 직접 해야 함
  • 난이도: 높음 (초보자에게는 어려움)
  • 활용 예시: 특정 요구사항에 맞춘 맞춤형 클러스터 구축

매니지드 쿠버네티스 서비스

누구에게 적합한가? 빠른 시작을 원하는 모든 사용자

  • 종류: AWS EKS, Azure AKS, GCP GKE, Samsung SCP
  • 장점: 설치/관리 부담 없음, 클라우드 제공업체가 관리
  • 활용 예시: 프로덕션 환경 빠른 구축

**개념 간 관계도

[개발자] 
   ↓ 작성
[컨테이너 이미지] (예: nginx, mysql)
   ↓ 실행
[컨테이너] → [파드]로 묶임
   ↓
[컨트롤러]가 파드 관리
   ↓
[스케줄러]가 배치 결정
   ↓
[노드]에서 실행

각 개념 자세히 다시 정리

컨테이너 (Container)

비유: 도시락 통

  • 애플리케이션 + 실행에 필요한 모든 것이 하나로 포장됨
  • Docker 이미지로 만들어짐
예시:
- nginx 컨테이너 = 웹서버
- mysql 컨테이너 = 데이터베이스
- python 앱 컨테이너 = 백엔드 서버

파드 (Pod)

비유: 도시락 가방 (여러 도시락 통을 함께 들고 다님)

왜 필요한가?

  • 컨테이너는 혼자서는 쿠버네티스에서 실행 불가
  • 반드시 파드 안에 들어가야 함

특징:

  • 보통 1개 파드 = 1개 컨테이너
  • 가끔 긴밀하게 협력하는 컨테이너들을 같은 파드에 넣음
예시:
Pod "웹서버파드"
├─ nginx 컨테이너 (메인)
└─ 로그수집 컨테이너 (보조)

중요: 파드는 일시적! 죽으면 새로 만들어짐


컨트롤러 (Controller)

비유: 자동 온도 조절기 (설정 온도 유지)

역할: “항상 원하는 상태를 유지”

주요 컨트롤러 종류:

A. Deployment (디플로이먼트) ⭐ 가장 많이 사용

설정: "nginx 파드 3개를 항상 실행"

실제 상황:
- 파드 1개 죽음 → 자동으로 1개 새로 생성
- 업데이트 필요 → 하나씩 교체 (무중단 배포)

B. ReplicaSet (레플리카셋)

  • Deployment가 내부적으로 사용
  • 보통 직접 안 만듦

C. DaemonSet (데몬셋)

설정: "모든 노드마다 1개씩 실행"
용도: 모니터링 에이전트, 로그 수집기

D. StatefulSet (스테이트풀셋)

특징: 파드에 고정된 이름/저장소 제공
용도: 데이터베이스처럼 상태를 저장하는 앱

E. Job / CronJob

Job: 한 번만 실행 (예: 데이터 마이그레이션)
CronJob: 주기적 실행 (예: 매일 밤 백업)

스케줄러 (Scheduler)

비유: 택배 배송 센터 (어느 지역으로 보낼지 결정)

역할: 새 파드를 어느 노드(서버)에 배치할지 자동 결정

판단 기준:
✓ 노드에 여유 CPU/메모리 있는가?
✓ 특정 노드에만 배치해야 하는가?
✓ 같은 파드들을 분산해야 하는가?

예시:
파드 생성 요청 → 스케줄러 분석 → "Node-2에 배치!"

전체 흐름 예시

시나리오: nginx 웹서버 3개를 실행하고 싶다

1. 개발자: Deployment 작성
   ---
   apiVersion: apps/v1
   kind: Deployment
   metadata:
     name: nginx-deployment
   spec:
     replicas: 3  # 3개 유지
     template:
       spec:
         containers:
         - name: nginx
           image: nginx:1.14
   ---

2. 컨트롤러 (Deployment Controller):
   "3개 파드를 만들어야겠군"
   → 파드 3개 생성 요청

3. 스케줄러:
   "Node-1에 여유 많네, 2개 배치"
   "Node-2에 1개 배치"

4. 각 노드에서 파드 실행:
   Node-1: [nginx파드] [nginx파드]
   Node-2: [nginx파드]

5. 만약 Node-1의 파드 1개가 죽으면?
   컨트롤러: "어? 2개밖에 없네, 1개 더 만들자"
   → 스케줄러: "Node-3에 배치"
   → 다시 3개 유지 ✓

Minikube - 깊이 파기

내부 동작 원리

[내 컴퓨터]
  └─ [가상머신 (VirtualBox/Docker)]
       └─ [리눅스 OS]
            └─ [쿠버네티스 클러스터]
                 ├─ Control Plane (마스터)
                 └─ Worker Node (실제로는 같은 머신)
```

**핵심 포인트**:
- 실제로는 **가상머신 1개**를 만들어서 그 안에 쿠버네티스를 설치
- Control Plane + Worker가 **한 노드에 함께** 존재 (실제 환경과 다름)

### 💡 **왜 가상화가 필요한가?**
```
문제: 쿠버네티스는 원래 리눅스 환경 전용
해결: Windows/Mac에서는 가상머신으로 리눅스 환경 구축

필요한 가상화 도구:
- Docker Desktop (Docker 드라이버)
- VirtualBox (VirtualBox 드라이버)
- Hyper-V (Windows 전용)
- VMware (VMware 드라이버)

실무 관점: 언제 사용하나?

적합한 경우:

  • 쿠버네티스 명령어 연습
  • 로컬에서 앱 개발/테스트
  • CI/CD 파이프라인 테스트
  • 쿠버네티스 인증 시험 (CKA/CKAD) 준비

부적합한 경우:

  • 다중 노드 클러스터 테스트 (노드 장애, 네트워크 분리 등)
  • 고가용성(HA) 구성 실습
  • 실제 부하 테스트

추가 학습 포인트

# Minikube 명령어 예시
minikube start --driver=docker    # Docker로 시작
minikube start --nodes=3           # ❌ 가능하지만 모두 가상노드
minikube dashboard                 # 웹 UI 자동 실행
minikube addons enable ingress     # 부가 기능 쉽게 활성화

질문: “IntelliJ와 연동”이 뭘 의미하나? → 코드 수정하면 자동으로 컨테이너 빌드 → 미니쿠브에 배포 → 결과 바로 확인


K3s - 깊이 파기

경량화의 비밀

아티클의 다이어그램을 분석하면:

일반 쿠버네티스:
├─ ETCD (클러스터 정보 저장, 별도 프로세스)
├─ API Server
├─ Scheduler
├─ Controller Manager
└─ 각각 독립 프로세스로 실행

K3s:
└─ 단일 실행 파일 (약 70MB!)
    ├─ SQLite (ETCD 대체) ← 핵심!
    ├─ API Server
    ├─ Scheduler
    └─ Controller Manager (모두 하나로 통합)

ETCD → SQLite 변경의 의미

ETCD란?

  • 쿠버네티스의 “두뇌” (모든 상태 정보 저장)
  • 분산 데이터베이스 (클러스터로 구성, 고가용성)
  • 메모리 사용량 큼

SQLite 사용 시:

장점:
✓ 단일 파일 DB (설정 간단)
✓ 메모리 사용량 1/10 수준
✓ 설치 과정 불필요

단점:
✗ 고가용성 구성 어려움
✗ 대규모 클러스터 부적합 (수백 개 노드)
✗ 성능 한계 명확

📊 실무 관점: K3s의 실제 사용 사례

예시 1: IoT 엣지 컴퓨팅

시나리오: 공장 현장 100곳에 각각 소형 서버 설치
요구사항: 
- 각 서버는 저사양 (라즈베리파이 수준)
- 중앙에서 관리 필요
- 네트워크 단절 시에도 동작

해결책: K3s 설치
- 메모리 512MB로도 실행 가능
- 각 현장이 독립적으로 동작

예시 2: 개발/테스트 환경

문제: 팀원 10명이 각자 쿠버네티스 환경 필요
기존 방법: Minikube → 무겁고 느림
K3s 방법: 
- 각자 로컬 PC에 K3s 설치 (5분 완료)
- 실제 쿠버네티스와 거의 동일한 환경

🎓 아티클의 “높은 호환성” 의미

호환성 = Kubernetes Conformance Test 통과

의미:
✓ 표준 kubectl 명령어 모두 사용 가능
✓ Helm 차트 그대로 사용 가능
✓ 쿠버네티스 API 100% 호환
✓ 다른 도구로 마이그레이션 쉬움

단, 내부 구현은 다름:
- 컨테이너 런타임: containerd (고정)
- 네트워크 플러그인: Flannel (기본)
- Ingress 컨트롤러: Traefik (내장)

3️⃣ Rancher - 깊이 파기

🔍 “관리 플랫폼”의 의미 분석

아티클 다이어그램의 핵심:

[Rancher] = 쿠버네티스를 관리하는 쿠버네티스!

구조:
Rancher 자체도 쿠버네티스 클러스터 위에서 실행됨
    ↓ 관리
Target Cluster 1 (GKE - Google)
Target Cluster 2 (EKS - AWS)
Target Cluster 3 (RKE - 온프레미스)

💡 “마켓 플레이스”의 실체

Rancher Catalog = Helm Chart 저장소

클릭 한 번으로 설치되는 것들:
├─ Monitoring (Prometheus + Grafana)
├─ Logging (ELK Stack)
├─ Service Mesh (Istio)
├─ CI/CD (Jenkins, GitLab)
└─ Backup (Velero)

내부 동작:
1. 사용자가 "Prometheus" 선택
2. Rancher가 Helm Chart 다운로드
3. 자동으로 values.yaml 구성
4. 타겟 클러스터에 배포
5. 대시보드에 연동

📊 실무 관점: 언제 “무겁다”가 문제가 되나?

Rancher 자체 리소스 사용량:

최소 요구사항:
- CPU: 4 core
- Memory: 8GB
- 스토리지: 50GB

실제 사용량 (중규모):
- Rancher Server: 2-4GB 메모리
- Monitoring Stack: 4-8GB 메모리
- Logging Stack: 2-4GB 메모리
───────────────────────────────
총: 8-16GB 메모리 필요

문제 상황 예시:

시나리오 1: 스타트업, 작은 클러스터
클러스터 전체: 노드 3개 (각 4GB RAM)
→ Rancher에만 절반 이상 메모리 사용
→ 실제 앱 실행 공간 부족!

시나리오 2: 단일 서비스만 운영
→ Monitoring/Logging 필요 없는데 기본 설치됨
→ 리소스 낭비

🎓 “멀티 클라우드 관리”의 실전 의미

실제 사용 케이스:

상황: 기업이 AWS + GCP 동시 사용
이유: 
- AWS: 주요 서비스 (계약 체결)
- GCP: 빅데이터 분석 (BigQuery 활용)

Rancher 없으면:
- AWS Console 로그인 → EKS 관리
- GCP Console 로그인 → GKE 관리
- 두 곳 다 kubectl 설정 변경

Rancher 있으면:
- Rancher UI 하나에서
- 클러스터 선택 → 즉시 전환
- 통합 모니터링, 통합 로깅
- 통합 사용자 권한 관리

4️⃣ kubeadm - 깊이 파기

🔍 “세부 구성 요소 직접 설정”의 의미

다른 도구들:
설치 버튼 → 완성 ✓

kubeadm:
1. 서버 준비 (OS 설치)
2. 컨테이너 런타임 설치 (Docker/containerd)
3. kubeadm, kubelet, kubectl 설치
4. kubeadm init (마스터 노드 초기화)
5. 네트워크 플러그인 수동 설치 (Calico/Flannel)
6. kubeadm join (워커 노드 추가)
7. 스토리지 클래스 수동 설정
8. Ingress 컨트롤러 수동 설치
9. 모니터링 직접 구축

💡 왜 이렇게 복잡하게?

실무 시나리오:

요구사항:
- 특정 컨테이너 런타임 사용 (cri-o)
- 특정 네트워크 정책 (Calico with BGP)
- 특정 보안 요구사항 (PSP 설정)
- 온프레미스 환경 (인터넷 제한)

→ 사전 패키지 도구로는 불가능
→ kubeadm으로 하나하나 커스터마이징

📊 kubeadm vs 다른 도구 비교

기능MinikubeK3sRancherkubeadm
네트워크 플러그인 선택❌ 고정⚠️ 제한적⚠️ 제한적✅ 자유
컨테이너 런타임 선택❌ 고정❌ containerd⚠️ 제한적✅ 자유
ETCD 구성 변경❌ 불가❌ SQLite 고정⚠️ 제한적✅ 자유
인증서 관리❌ 자동❌ 자동❌ 자동✅ 수동

5️⃣ 매니지드 서비스 - 깊이 파기

🔍 “관리까지 해준다”의 실체

사용자가 관리하는 것:
├─ Worker Node (VM)
│   ├─ OS 업데이트
│   ├─ kubelet 업데이트
│   └─ 리소스 모니터링
└─ 애플리케이션 (Pod, Service 등)

클라우드가 관리하는 것:
├─ Control Plane ← 핵심!
│   ├─ API Server (고가용성)
│   ├─ ETCD (백업/복구)
│   ├─ Scheduler
│   └─ Controller Manager
└─ 업그레이드 (버튼 클릭만)

💡 Control Plane 관리의 복잡성

직접 관리 시 (kubeadm):

1. ETCD 백업 (매일 자동화 스크립트 작성)
2. ETCD 장애 시 복구 절차
3. API Server 인증서 갱신 (만료 전)
4. 쿠버네티스 버전 업그레이드:
   - Control Plane 먼저
   - Worker Node 하나씩
   - 롤백 계획 수립
5. 보안 패치 적용

매니지드 서비스:

1. 버전 선택 → [업그레이드] 버튼 클릭
2. 끝

📊 비용 vs 편의성 분석

EKS 예시 (AWS):
- Control Plane: $0.10/시간 ($72/월)
- Worker Node: EC2 비용 (직접 관리와 동일)

자체 구축 시 숨은 비용:
- 엔지니어 인건비 (월 수백만원)
- 장애 대응 시간
- 학습 비용
- 실수로 인한 장애 리스크

결론: 대부분의 경우 매니지드 서비스가 저렴

6️⃣ “Kubernetes the Hard Way” - 깊이 파기

🔍 왜 “어려운 방법”이 중요한가?

실무 장애 사례:

장애: API Server 응답 없음
증상: kubectl 명령어 모두 실패

kubeadm만 아는 사람:
→ "재시작해봐야겠다" (무작정)

Hard Way 실습한 사람:
→ 원인 추적:
   1. API Server 로그 확인
   2. ETCD 상태 확인 ← 여기서 문제 발견
   3. ETCD 인증서 만료 확인
   4. 인증서 갱신 → 해결

💡 각 구성 요소를 직접 설정하는 의미

인증서 체계:

쿠버네티스는 모든 통신이 TLS 암호화

생성해야 하는 인증서:
├─ CA 인증서 (루트)
├─ API Server 인증서
├─ ETCD 인증서
├─ kubelet 인증서
└─ 사용자 인증서

Hard Way로 배우는 것:
- 각 인증서의 역할
- 만료 시 증상
- 갱신 방법
- 문제 해결 능력

🎓 실무 활용도

CKA/CKAD 인증 시험:
→ Hard Way 수준의 지식 필요

시니어 쿠버네티스 엔지니어:
→ 대부분 Hard Way 경험자

커리어 패스:
1단계: Minikube로 시작
2단계: 매니지드 서비스로 실무
3단계: Hard Way로 깊이 학습
4단계: 복잡한 온프레미스 환경 운영 가능

🎯 실전 선택 가이드

상황별 최적 도구

Q1: 혼자 쿠버네티스 처음 배울 때?
→ Minikube (의심의 여지 없음)

Q2: 팀 개발 환경 구축?
→ K3s (가볍고 빠름) 또는 매니지드 서비스

Q3: 스타트업 프로덕션 환경?
→ 매니지드 서비스 (EKS/GKE/AKS)

Q4: 대기업, 여러 클라우드 사용?
→ Rancher

Q5: 금융권, 보안 요구사항 많음?
→ kubeadm (또는 Red Hat OpenShift)

Q6: 쿠버네티스 전문가 되고 싶음?
→ 1) Minikube → 2) 매니지드 서비스 → 3) Hard Way

1.왜 K3s는 SQLite를 사용하는데도 “호환성”이 높을까요?

  • 쿠버네티스 API는 표준화되어 있고, 데이터 저장 방식은 내부 구현일 뿐입니다. 2.Rancher가 “무겁다”는 것이 왜 단점일까요? 기능이 많은 건 좋은 거 아닌가요?
  • 필요 없는 기능도 리소스를 차지하고, 복잡도가 올라갑니다. 3.매니지드 서비스를 사용하면서도 kubeadm 지식이 필요한 이유는?
  • Worker Node는 직접 관리해야 하고, 깊은 트러블슈팅이 필요합니다.

작성일: 2025-11-04