Kubernetes Intro

1— title: Kubernetes 입문 weight: 1

IT 인프라의 진화

메인프레임 → 가상화(VM) → 클라우드 → 컨테이너
시대특징확장 방식
2000년대x86 가상화 환경스케일 아웃 (서버 대수 증가)
2010년대퍼블릭 클라우드IaaS / PaaS / SaaS
현재컨테이너 오케스트레이션쿠버네티스

클라우드 서비스 모델 비교

┌─────────────────────────────────────────────────────┐
│                      SaaS                           │
│              (Gmail, Slack, Notion)                 │
├─────────────────────────────────────────────────────┤
│                      PaaS                           │
│            (Heroku, Google App Engine)              │
├─────────────────────────────────────────────────────┤
│                      IaaS                           │
│              (AWS EC2, GCP Compute)                 │
└─────────────────────────────────────────────────────┘
        ↑ 관리 범위 증가 / 자유도 감소 ↑

컨테이너 vs 가상머신

아키텍처 비교

[ 가상머신 ]                    [ 컨테이너 ]
┌─────────┐ ┌─────────┐        ┌─────────┐ ┌─────────┐
│  App A  │ │  App B  │        │  App A  │ │  App B  │
├─────────┤ ├─────────┤        ├─────────┴─┴─────────┤
│ Guest OS│ │ Guest OS│        │   Container Runtime │
├─────────┴─┴─────────┤        │       (Docker)      │
│     Hypervisor      │        ├─────────────────────┤
├─────────────────────┤        │      Host OS        │
│      Host OS        │        ├─────────────────────┤
├─────────────────────┤        │     Hardware        │
│     Hardware        │        └─────────────────────┘
└─────────────────────┘
구분가상머신컨테이너
가상화 수준하드웨어운영체제
크기GB 단위MB 단위
부팅 시간분 단위초 단위
커널개별 커널호스트 커널 공유
격리 수준강함상대적으로 약함

컨테이너 / 도커 / 쿠버네티스 관계

┌─────────────────────────────────────────────────┐
│              Kubernetes (오케스트레이션)          │
│  ┌───────────────────────────────────────────┐  │
│  │           Docker (컨테이너 런타임)          │  │
│  │  ┌─────────┐  ┌─────────┐  ┌─────────┐   │  │
│  │  │Container│  │Container│  │Container│   │  │
│  │  └─────────┘  └─────────┘  └─────────┘   │  │
│  └───────────────────────────────────────────┘  │
└─────────────────────────────────────────────────┘
  • 컨테이너: 애플리케이션 + 실행 환경을 패키징한 단위
  • Docker: 컨테이너를 생성/실행하는 런타임 (필수)
  • Kubernetes: 다수의 컨테이너를 관리하는 오케스트레이션 도구 (선택)

쿠버네티스 클러스터 구조

┌─────────────────── Kubernetes Cluster ───────────────────┐
│                                                          │
│  ┌──────────────┐    ┌──────────────┐  ┌──────────────┐ │
│  │ Master Node  │    │ Worker Node  │  │ Worker Node  │ │
│  │              │    │              │  │              │ │
│  │ - API Server │    │ ┌──────────┐ │  │ ┌──────────┐ │ │
│  │ - Scheduler  │────│ │   Pod    │ │  │ │   Pod    │ │ │
│  │ - Controller │    │ │┌────────┐│ │  │ │┌────────┐│ │ │
│  │ - etcd       │    │ ││Container││ │  │ ││Container││ │ │
│  │              │    │ │└────────┘│ │  │ │└────────┘│ │ │
│  │              │    │ └──────────┘ │  │ └──────────┘ │ │
│  └──────────────┘    └──────────────┘  └──────────────┘ │
│                                                          │
└──────────────────────────────────────────────────────────┘
  • Master Node: 클러스터 전체 관리 (API 서버, 스케줄러, 컨트롤러)
  • Worker Node: 실제 컨테이너가 실행되는 노드
  • Cluster: Master + Worker 노드들의 집합

쿠버네티스 핵심 오브젝트

기본 오브젝트

오브젝트설명예시
Pod가장 작은 배포 단위, 1개 이상의 컨테이너 포함nginx pod
ServicePod를 외부에 노출시키는 네트워크 추상화LoadBalancer
Volume컨테이너 간 공유 가능한 스토리지PersistentVolume
Namespace클러스터 내 논리적 분리 단위dev, staging, prod

Pod YAML 예제

# nginx-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.21
    ports:
    - containerPort: 80

자주 사용하는 kubectl 명령어

# 클러스터 정보 확인
kubectl cluster-info
kubectl get nodes

# Pod 관리
kubectl apply -f nginx-pod.yaml    # Pod 생성
kubectl get pods                    # Pod 목록 조회
kubectl describe pod nginx-pod      # Pod 상세 정보
kubectl logs nginx-pod              # Pod 로그 확인
kubectl delete pod nginx-pod        # Pod 삭제

# 네임스페이스 관리
kubectl get namespaces
kubectl create namespace dev

# 서비스 확인
kubectl get services
kubectl get svc

쿠버네티스 핵심 장점

1. 무중단 배포 (Rolling Update)

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1        # 최대 추가 Pod 수
      maxUnavailable: 0  # 최소 가용 Pod 수
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.21
# 이미지 업데이트 (무중단)
kubectl set image deployment/nginx-deployment nginx=nginx:1.22

2. 오토스케일링 (HPA)

# hpa.yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx-deployment
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

3. 자원 제한 설정

spec:
  containers:
  - name: nginx
    image: nginx:1.21
    resources:
      requests:          # 최소 보장 자원
        memory: "128Mi"
        cpu: "250m"
      limits:            # 최대 사용 가능 자원
        memory: "256Mi"
        cpu: "500m"

핵심 용어 정리

용어설명
컨테이너 런타임컨테이너를 실행하는 환경 (Docker, containerd)
오케스트레이션다수의 컨테이너를 자동으로 배포, 확장, 관리
스케일 아웃서버 대수를 늘려 처리량 증가
스케일 업단일 서버 성능을 향상
락인 (Lock-in)특정 벤더에 종속되는 현상
하이퍼바이저하드웨어를 가상화하여 VM을 실행하는 소프트웨어

다음 단계