<aside> 📖
Kubernetes Patterns 스터디 회고 (30개 챕터, 8개월 — 함께 완주한 기록)
</aside>

2025년 여름부터 2026년 봄까지, Kubernetes Patterns, 2nd Edition — O'Reilly 한 권을 처음부터 끝까지 함께 읽었습니다. 이 글은 그 시간을 함께한 분들과, 앞으로 비슷한 여정을 떠날 분들을 위해 남기는 기록입니다.
| 항목 | 내용 |
|---|---|
| 진행 기간 | 2025년 8월 → 2026년 3월 (약 8개월) |
| 교재 | Kubernetes Patterns, 2nd Edition (O'Reilly) |
| 진행 방식 | 매주 블로그 작성 → 발표 → Q&A (개인당 2주에 한번씩 발표) |
| 참여 직군 | DevOps / SRE / Backend / Infra / MLOps |
| 완주 챕터 수 | 30개 이상 |
| 블로그 | https://devstory.tistory.com/category/k8s/kubernetes-pattern |
<aside> 📌
아래는 책의 파트 구성에 맞춰, 우리가 정리한 내용과 ‘인상 깊었던 포인트’를 한 번에 읽을 수 있게 재구성한 섹션입니다.
</aside>
처음에는 당연해 보이는 원칙들의 나열처럼 느껴졌습니다. 하지만 직접 실습하면서 생각이 바뀌기 시작했습니다. 리소스 requests와 limits를 제대로 선언하지 않으면 QoS 클래스가 BestEffort로 분류되어 노드 압박 시 가장 먼저 축출된다는 것, initialDelaySeconds를 너무 짧게 잡아 JVM 워밍업 전에 Liveness 체크가 실패하는 케이스 등을 확습했습니다 . Kubernetes가 왜 선언적 모델을 고집하는지, 그 철학이 각 패턴 안에 어떻게 녹아 있는지 이해하게 된 파트였습니다.
| 챕터 | 주제 | 핵심 내용 |
|---|---|---|
| Ch02 | Predictable Demands | requests / limits 선언, QoS 클래스(Guaranteed / Burstable / BestEffort) 동작 차이 |
| Ch03 | Declarative Deployment | Rolling / Blue-Green / Canary 전략 비교, maxSurge / maxUnavailable 튜닝 |
| Ch04 | Health Probe | Liveness / Readiness / Startup Probe 설계 원칙, 잘못 설정 시 발생하는 재시작 루프 케이스 |
| Ch05 | Managed Lifecycle | preStop 훅과 SIGTERM 처리, graceful shutdown 구현 방법 |
| Ch06 | Automated Placement | nodeSelector / Affinity / Taint-Toleration 조합, Pod Topology Spread Constraints |
단순히 Deployment를 쓰는 것 이상의 고민이 시작된 파트입니다. CronJob의 concurrencyPolicy 설정에 따라 잡이 쌓이거나 건너뛰어지는 동작 차이, StatefulSet의 headless service와 안정적인 네트워크 ID가 Kafka 같은 클러스터형 스토어에서 왜 중요한지를 이야기했습니다. Self Awareness 챕터에서는 Downward API로 파드가 자신의 리소스 limits를 읽어 JVM heap 크기를 동적으로 조정하는 패턴을 다뤘는데, 이 방식이 API 서버를 직접 호출하는 것보다 효율적이라는 점이 인상적이었습니다.
| 챕터 | 주제 | 핵심 내용 |
|---|---|---|
| Ch07 | Batch Job | completions / parallelism 설정, 실패 재시도 정책, Job 정리 전략 |
| Ch08 | Periodic Job | CronJob concurrencyPolicy(Allow / Forbid / Replace) 동작 차이, 타임존 설정(1.27+) |
| Ch09 | Daemon Service | DaemonSet updateStrategy, maxSurge 지원, 특정 노드 타게팅 |
| Ch10 | Singleton Service | StatefulSet 활용 단일 인스턴스 보장, PodDisruptionBudget 조합 |
| Ch11 | Stateless Service | Twelve-Factor App 원칙, HPA 연동, 세션 외부화 전략 |
| Ch12 | Stateful Service | StatefulSet headless service, 안정적 네트워크 ID, PVC 바인딩 보장 |
| Ch13 | Service Discovery | ClusterIP / Headless / ExternalName 비교, CoreDNS 동작 원리 |
| Ch14 | Self Awareness | Downward API(env / volume) 활용, 리소스 limits 기반 런타임 튜닝 |
| Ch15 | Leader Election | lease 리소스 기반 분산 락, cert-manager / controller-runtime 실제 적용 사례 |
코드를 수정하지 않고 컨테이너를 조합하는 것만으로 기능을 확장할 수 있다는 점이 핵심이었습니다. Sidecar 챕터는 Kubernetes 1.29에서 정식 도입된 Native Sidecar(restartPolicy: Always)를 기존 방식과 비교 실험하면서 가장 활발한 토론이 오간 챕터였습니다. 생명주기 보장, Job에서의 자동 종료, Istio 사이드카 프록시 연동까지 — "왜 이 기능이 필요했는가"를 함께 짚었습니다.