[TIL]Kubernetes 핵심 컴포넌트 & 워크로드 컨트롤러-2025.09.05
2025. 9. 5. 14:47ㆍ대외활동/인공지능사관학교
728x90
반응형
SMALL
한 줄 요약:
Control Plane(ETCD, API Server, Controller, CoreDNS) 흐름과 kube-proxy 역할을 이해하고, Job / CronJob / DaemonSet / Headless Service / StatefulSet의 “언제, 왜, 어떻게”를 실무 관점으로 정리.

목차
- 클러스터 핵심 컴포넌트 흐름 이해
- Job / CronJob / DaemonSet / Headless Service / StatefulSet
- 실습 루틴(명령 스니펫)
- 헷갈리는 포인트 정리
- 현업 연결 포인트
- 내일 실습 로드맵
- 셀프 체크 퀴즈
1) 클러스터 핵심 컴포넌트 흐름 이해
- API Server: 모든 요청의 관문(인증/인가/검증).
- etcd: 클러스터 상태 저장소(키-값).
- Controller Manager: 원하는 상태(스펙)와 실제 상태의 차이를 감시하고 조치(Watch 루프).
- CoreDNS: 서비스명 → IP 해석.
- kube-proxy: Pod 트래픽을 실제 백엔드로 라우팅(iptables/IPVS 규칙 구성).
이해 포인트: “요청 → API Server → 상태는 etcd → Controller가 보정 → 네트워크는 CoreDNS+kube-proxy로 연결”
2) 워크로드 컨트롤러
A. Job — 끝이 있는 작업 실행기
- 언제 쓰나? ETL, 백업, 배치 메일처럼 “성공 후 종료”가 목표일 때.
- 핵심 스펙
- completions: 총 성공 횟수
- parallelism: 동시 실행 개수
- backoffLimit: 실패 재시도 횟수
- restartPolicy: OnFailure 또는 Never
- 메모: Job이 만든 Pod는 완료 후에도 남아 로그/결과 확인에 유용(자동 정리 정책 별도).
B. CronJob — 스케줄러가 Job을 주기적으로 생성
- 언제 쓰나? “매일 02:00 백업” 같은 주기 작업 자동화.
- 핵심 스펙
- schedule: Cron 표현식 ("0 2 * * *" 등)
- concurrencyPolicy: Allow / Forbid / Replace
- successfulJobsHistoryLimit / failedJobsHistoryLimit: 히스토리 관리
- 팁: 중복 실행 위험이 있으면 Forbid 또는 Replace로 제어.
C. DaemonSet — 모든(또는 특정) 노드마다 1개씩
- 언제 쓰나? 로그 수집기, 모니터링 에이전트, CNI/스토리지 데몬.
- 특징: 새 노드가 합류하면 자동으로 해당 노드에도 Pod 생성.
- 실무 팁: 컨트롤 플레인 노드에도 돌리고 싶으면 tolerations/nodeSelector 조합.
D. Headless Service — 로드밸런싱 없이 Pod 개별 식별
- 정의: spec.clusterIP: None → VIP 없이, DNS 질의 시 각 Pod의 실제 IP 목록 반환.
- 언제 쓰나?
- StatefulSet과 결합해 고유 DNS로 각 Pod 직접 접근
- 분산 시스템 피어 디스커버리
- 클라이언트 사이드 로드밸런싱 구현
E. StatefulSet — 상태 있는 앱을 위한 3가지 보장
- 안정적 네트워크 신원: <name>-<ordinal> (예: db-0, db-1) 유지
- 안정적 스토리지: Pod별 고유 PVC 자동 생성/재연결
- 순차적 롤아웃/종료: 0→1→2…로 올라오고 역순으로 내려감
- 보통 필수: Headless Service(serviceName)와 함께 사용
- 적합 사례: DB, 메시지 큐, 상태 저장 분산 시스템
- 비유: Deployment는 “가축(Cattle)”, StatefulSet은 “반려동물(Pets)”.
3) 실습 루틴(명령 스니펫)
Job
kubectl apply -f my-job.yaml
kubectl get jobs,pods
kubectl logs <job-pod>
CronJob
kubectl apply -f my-cronjob.yaml
kubectl get cronjobs
kubectl get jobs --watch
# 예: 매일 02:00 실행 (로컬 타임존 기준 설정 확인)
# schedule: "0 2 * * *"
DaemonSet
kubectl apply -f daemonset-example.yaml
kubectl get pods -o wide -l app=my-daemon
# 노드 추가/삭제 시 파드 증감 확인
Headless Service + StatefulSet
kubectl apply -f statefulset-svc.yaml # spec.clusterIP: None
kubectl apply -f statefulset.yaml # spec.serviceName: statefulset-svc
kubectl get endpoints statefulset-svc
# Pod 내부에서 DNS 확인
nslookup statefulset-svc
nslookup statefulset-0.statefulset-svc.default.svc.cluster.local
StatefulSet 스케일/순서 관찰
kubectl scale --replicas=4 statefulset/my-app
watch kubectl get pods kubectl scale --replicas=2
statefulset/my-app

4) 헷갈리는 포인트 정리
- Deployment vs StatefulSet
- 교체 가능(무상태) 복제 서비스면 Deployment
- 고유 신원/스토리지/순차 롤아웃이 필요하면 StatefulSet
- ClusterIP Service vs Headless Service
- 단일 진입점+LB 필요: ClusterIP
- Pod 개별 식별/직접 연결: Headless
- DaemonSet vs Deployment
- “노드마다 하나” 에이전트: DaemonSet
- 일반 앱 복제/확장: Deployment
- CronJob 동시 실행 제어
- 이미 돌고 있으면 막기: concurrencyPolicy: Forbid
- 새 작업이 이전 것을 대체: Replace
- Job 실패/재시도
- backoffLimit, activeDeadlineSeconds로 제어
5) 현업 연결 포인트
- 로그/모니터링 표준 패턴: DaemonSet(fluent-bit/Vector/Node Exporter) + 중앙 수집기
- DB 운영 패턴: StatefulSet + Headless Service + PVC로 안정적 신원/데이터 보장
- 운영 자동화: CronJob으로 백업, 리포트, 캐시 청소, 인증서 갱신
6) 실습 로드맵
- nginx StatefulSet + PVC
- Pod별 pod.html에 서로 다른 텍스트 기록 → 재스케줄 후에도 유지 확인
- Headless DNS 체감
- 각 Pod FQDN으로 curl → 라운드로빈이 아닌 개별 주소 접근 확인
- DaemonSet
- 간단 에이전트 배포 → 노드 추가/삭제 시 파드 자동 증감 관찰
- CronJob 정책 실험
- concurrencyPolicy/히스토리 제한 변경 → 동작 비교
- Job 파라미터 실험
- completions/parallelism/backoffLimit 조합별 실행 패턴 비교
7) 셀프 체크 퀴즈
- Headless Service가 필요한 대표 이유 2가지(힌트: 디스커버리/직접 연결)는?
- StatefulSet이 Deployment와 다른 3가지 보장은?
- CronJob에서 이전 작업이 돌고 있을 때 새 작업을 막으려면 어떤 옵션을 써야 할까?
- DaemonSet이 “모든 노드 1개씩”을 보장하는 이유와 대표 사용 사례 2개는?
- Job에서 completions=10, parallelism=2일 때 실행 패턴은? 실패 재시도는 무엇으로 제어하나?
마무리(느낀 점)
핵심은 “언제 무엇을 쓰는지 구분”
- 무상태/복제는 Deployment, 상태/고유성은 StatefulSet
- 모든 노드 에이전트는 DaemonSet
- “끝이 있는 일”은 Job, “주기적”이면 CronJob
- “LB 없이 Pod를 직접 찾고 싶다”면 Headless Service
728x90
반응형
LIST
'대외활동 > 인공지능사관학교' 카테고리의 다른 글
| [TIL] AWS 인프라 기초 개념-2025.09.09 (0) | 2025.09.11 |
|---|---|
| [TIL] AWS Cloud Practitioner 학습 정리-2025.09.10 (0) | 2025.09.11 |
| [AI Crew][특강][정보]네이버클라우드 9월 특강 및 자격증 준비/인공지능사관학교6기 (0) | 2025.09.04 |
| [TIL] Kubernetes 파드 생명주기 · 프로브 · HPA 정리-2025.09.04 (0) | 2025.09.04 |
| [AI Crew]네이버 기업 탐방: 1784 신사옥, 데이터센터 ‘각’, 소버린 AI, 인재 전쟁 그리고 국가대표 AI 프로젝트/인공지능사관학교6기 (0) | 2025.09.04 |