노트

쿠버네티스 핵심 개념

Kubernetes Core Concepts

인프라#k8s · 연결된 개념 11개

쉽게 말하면

쿠버네티스는 원하는 온도만 정해 두면 알아서 냉난방을 켜고 끄는 온도 조절기 같아요. '이 앱은 항상 3개 떠 있어야 해'라고 적어 두면, 하나가 죽어도 스스로 새로 띄워 개수를 맞춰요.

비유의 한계 온도 조절기는 방 하나만 보지만 쿠버네티스는 여러 서버에 Pod를 배치하고, 바뀌는 Pod IP 앞에 Service라는 고정 이름을 세워 줘요. 메모리 limit을 넘은 컨테이너는 강제 종료(OOMKilled)돼요.

쿠버네티스는 여러 서버에 컨테이너를 배치하고, 죽으면 다시 띄우고, 트래픽에 맞춰 복제 수를 조절하는 컨테이너 오케스트레이션(container orchestration) 시스템이다. 사람이 하던 서버 운영을 "원하는 상태를 선언하면 계속 맞춰 주는" 제어 루프(control loop)로 자동화한다.

선언형과 재조정(reconciliation)

"Pod를 하나 띄워라"가 아니라 "이 앱은 항상 3개 떠 있어야 한다"를 YAML로 선언한다. 컨트롤러가 현재 상태와 선언한 상태를 끊임없이 비교해 차이를 메운다. React가 선언한 UI에 맞춰 DOM을 고치는 재조정과 같은 멘탈 모델이다(선언형과 명령형 프로그래밍).

핵심 오브젝트

  • Pod: 배포의 최소 단위. 보통 컨테이너 하나(때로 보조 컨테이너 포함)
  • Deployment: Pod 템플릿과 복제 수(replicas)를 선언한다. 롤링 업데이트(rolling update)와 롤백을 맡는다
  • Service: 라벨로 고른 Pod 묶음 앞의 고정 이름·주소. Pod IP가 바뀌어도 Service로 접속하면 알아서 분배된다
  • Ingress: 도메인·경로에 따라 외부 요청을 Service로 보내는 라우팅 규칙
  • Namespace: dev·qa·prod처럼 리소스를 나누는 단위
apiVersion: apps/v1
kind: Deployment
metadata: { name: web }
spec:
  replicas: 3
  selector: { matchLabels: { app: web } }
  template:
    metadata: { labels: { app: web } }
    spec:
      containers:
        - name: web
          image: registry.example.com/web:1.2.0
          ports: [{ containerPort: 3000 }]
          resources:
            requests: { memory: 256Mi, cpu: 250m }
            limits: { memory: 512Mi, cpu: 500m }

자동으로 해 주는 것

  • 자가 치유(self-healing): Pod가 죽으면 새로 띄워 개수를 맞춘다
  • 롤링 업데이트·롤백: 새 버전으로 하나씩 교체해 무중단 배포, 문제가 생기면 이전 ReplicaSet으로 되돌린다
  • 오토스케일링(autoscaling): 지표에 따라 Pod 수를 늘리고 줄인다(수직 확장과 수평 확장)
  • requests는 스케줄링 때 보장받는 양, limits는 상한이다. 메모리 limit을 넘으면 컨테이너가 강제 종료된다(OOMKilled, Out Of Memory)

kubectl apply -f로 선언을 반영하고, 그 선언을 git에서 자동 동기화하면 GitOps가 된다. 전제가 되는 컨테이너는 컨테이너와 이미지, 실제 디버깅 명령은 kubectl 디버깅 치트시트을 본다.

출처: Kubernetes 개요 · Deployment: 롤링 업데이트 · Service · requests와 limits

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • Turborepo

    Turborepo는 JavaScript·TypeScript 모노레포의 태스크(빌드·린트·테스트)를 빠르게 돌리는 빌드 시스템이다. 기존 package.json 스크립트는 그대로 두고, 스크립트 사이의 의존 관계만 알려 주면 병렬 실행과 캐싱을 맡는다. 의도적으로 "빠른 실행과 캐시" 한 가지에 집중한다.

  • Nx

    Nx는 캐싱과 병렬 실행에 더해 프로젝트 그래프, 코드 생성, 아키텍처 규칙 강제까지 제공하는 모노레포 플랫폼이다. "빠른 실행 한 가지"에 집중하는 turborepo와 달리 기능을 두루 갖춘 쪽을 지향한다.

  • 권한 있는 데이터(기준 데이터)

    권한 있는 데이터(authoritative data)는 어떤 값이 맞는지 판단할 때 최종 기준으로 삼기로 정한 데이터의 원천이다. 여러 곳에 같은 정보가 있고 값이 서로 다르면 권한 있는 쪽을 따르고, 나머지는 사본으로 다룬다. 데이터 관리에서는 이런 저장 시스템을 기록 시스템(System of Record, SoR)이라 부른다.

  • 커밋 메시지와 원자적 커밋

    좋은 커밋은 한 가지 변경만 담고(원자적 커밋, atomic commit), 그 변경이 무엇이고 왜 필요했는지를 메시지로 설명한다. 히스토리는 나중의 나와 동료가 읽는 문서다.

  • 커맨드 패턴

    요청이나 작업을 실행 가능한 객체로 포장하는 패턴. 작업을 값처럼 저장·전달·대기열에 넣을 수 있게 되고, 되돌리기 같은 부가 연산을 붙일 수 있다.

보기 옵션