쿠버네티스 개요

김도비·2025년 9월 20일
0

Kubernates

목록 보기
5/9

기존에 정리해놓고 또 잊어먹어 리마인드차 꼼꼼히 정리해본다.

쿠버네티스 개요

1. 쿠버네티스란?

  • 컨테이너 오케스트레이션 플랫폼
  • 컨테이너 애플리케이션을 배포, 스케일링, 로드밸런싱, 복구까지 자동으로 관리
  • “원하는 상태(Desired State)”를 선언하면, 쿠버네티스가 실제 상태를 계속 조정(Reconcile)

2. Docker와 차이

  • Docker: 컨테이너를 빌드/실행하는 도구
  • Kubernetes: 여러 노드에 흩어진 수많은 컨테이너를 자동으로 배포·운영하는 시스템
  • 비유
    • Docker = “컨테이너 화물 박스”를 만드는 공장
    • Kubernetes = “수천 개 화물을 항구·트럭에 자동 분배하는 물류 시스템”

3. 기존 가상화와 차이

  • 기존 VM
    • 하이퍼바이저 위에 Guest OS 단위로 격리 → 무겁고 부팅 느림
  • 컨테이너
    • Host OS 커널 공유, 프로세스 수준 격리 → 가볍고 빠름 (몇 초 만에 실행)
  • 핵심 차이: OS 전체를 띄우냐(App+OS) vs 앱만 패키징하냐(App만)

4. 쿠버네티스 클러스터 구성요소

Control Plane (중앙 두뇌)

  • API Server: 모든 명령의 입구, kubectl 요청 처리
  • etcd: 클러스터 상태 저장소 (Key-Value DB)
  • Controller Manager: 원하는 상태와 실제 상태를 맞추는 조정기
  • Scheduler: Pod를 어떤 노드에 배치할지 결정

Worker Node (실행부)

  • Kubelet: 노드 내 Pod 실행 관리
  • Kube-Proxy: Service 네트워크 트래픽 처리
  • Container Runtime: 컨테이너 실행기 (containerd, CRI-O 등)

5. 쿠버네티스 오브젝트 비교

오브젝트목적특징비유
Pod가장 작은 실행 단위1개 이상 컨테이너 + 공유 네트워크/스토리지컨테이너 박스 1개
ReplicaSetPod 개수 보장항상 N개 유지 (죽으면 새로 생성)예비 병력 유지
DeploymentReplicaSet 관리 + 업데이트/롤백롤링 업데이트/버전 관리 지원부대 운영+교대
ServicePod 집합 네트워크 접근점 제공ClusterIP/NodePort/LoadBalancer 지원고정 전화번호
Ingress외부 트래픽 라우팅도메인/경로 기반 L7 라우팅건물 입구 안내원
ConfigMap일반 설정 값 관리ENV/파일로 주입메뉴얼
Secret민감정보 관리Base64 저장, 마운트/ENV금고
Volume/PV/PVC데이터 영속성Pod 재시작 후에도 데이터 유지외장하드
Job일회성 작업완료되면 종료택배 1회 배송
CronJob주기적 작업스케줄 기반 반복 실행정기 구독 배송
Namespace리소스 논리적 격리팀/환경별 분리아파트 단지 동

6. 예시: Nginx 웹 배포

예: nginx 웹서버를 배포한다고 하면:

1. Pod

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
spec:
  containers:
  - name: nginx
    image: nginx:1.25

컨테이너 하나만 실행. 죽으면 수동으로 다시 만들어야 함.

2. Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deploy
spec:
  replicas: 3
  selector:
    matchLabels: { app: nginx }
  template:
    metadata: { labels: { app: nginx } }
    spec:
      containers:
      - name: nginx
        image: nginx:1.25

항상 3개 유지, 자동 복구, 버전 업/롤백 가능.

3. Service

apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
spec:
  selector: { app: nginx }
  ports:
  - port: 80
    targetPort: 80
  type: NodePort

Pod들이 죽고 새로 떠도, nginx-svc라는 안정된 주소로 접근 가능.

4. Ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ing
spec:
  rules:
  - host: nginx.local
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-svc
            port:
              number: 80

외부에서 http://nginx.local 로 들어오면 Service로 연결.

profile
모든 걸 기록하자

0개의 댓글