컨테이너 환경은 기존 서버 환경과 다르다. Pod가 언제든 죽고 다시 생기고, IP가 바뀌고, 스케일이 자동으로 오르내린다. 기존 방식으로 모니터링하면 놓치는 게 많다.
| 항목 | 기존 서버 환경 | K8s 환경 |
|---|---|---|
| 단위 | 서버(VM) 단위 | Pod / 컨테이너 단위 |
| IP | 고정 IP | Pod마다 IP가 바뀜 |
| 수명 | 서버가 계속 유지됨 | Pod는 언제든 죽고 새로 생김 |
| 로그 | 서버에 파일로 남음 | Pod 죽으면 로그 사라짐 |
| 스케일 | 수동으로 서버 추가 | HPA로 자동 증감 |
| 메트릭 수집 | 서버에 에이전트 설치 | DaemonSet으로 모든 노드에 자동 배포 |
| 장애 단위 | 서버 1대 다운 | Pod 재시작, 노드 NotReady 등 세분화 |
핵심 차이는 수명과 동적 변화다. 기존 환경은 "이 서버의 CPU가 높다"처럼 대상이 명확하다. K8s는 Pod가 계속 생겼다 사라지기 때문에 서비스 전체 상태를 기준으로 봐야 한다.
Pod가 정상인지 K8s가 판단하는 기준이다.
| Probe | 목적 | 실패 시 |
|---|---|---|
| Liveness Probe | Pod가 살아있는지 확인 | Pod 재시작 |
| Readiness Probe | 트래픽을 받을 준비가 됐는지 확인 | 트래픽에서 제외 |
Readiness가 없으면 앱이 뜨는 중에 트래픽이 들어와서 배포 중 503이 쏟아진다.
| 종류 | 설명 |
|---|---|
| HPA (Horizontal Pod Autoscaler) | Pod 수를 늘리거나 줄인다 |
| VPA (Vertical Pod Autoscaler) | Pod의 CPU/메모리 할당량을 조정한다 |
SLO와 연결하려면 커스텀 메트릭 기반 HPA를 쓴다. 에러율이 올라가면 Pod를 늘리는 방식이다.
로그
Pod가 죽으면 로그도 사라진다. 중앙 로그 수집이 필수다. (Fluentd, Loki 등)
메트릭
노드뿐 아니라 Pod, 컨테이너 단위 메트릭이 필요하다. Prometheus + Grafana가 K8s 표준 스택이다.
트레이싱
마이크로서비스 환경에서 요청이 여러 Pod를 거치기 때문에 Trace가 더 중요하다.
| 측정 대상 | SLI 예시 |
|---|---|
| API 서버 | 요청 성공률, 응답 시간 |
| Pod | 재시작 횟수, CrashLoopBackOff 발생률 |
| 노드 | 가용성, 리소스 포화도 |
| 패턴 | 설명 |
|---|---|
| CrashLoopBackOff | Pod가 계속 재시작 반복 |
| OOMKilled | 메모리 초과로 Pod 강제 종료 |
| Pending | 노드 리소스 부족으로 Pod가 스케줄링 안 됨 |
| ImagePullBackOff | 컨테이너 이미지를 가져오지 못함 |
K8s SRE의 핵심은 동적 환경에 맞는 관찰 방식이다. Pod가 언제든 사라질 수 있기 때문에 로그는 중앙에 수집하고, 메트릭은 서비스 전체 단위로 보고, Probe로 트래픽 유입 시점을 정확히 제어해야 한다.