환경Kubernetes v1.35·v1.36·v1.37 · kubectl · Deployment/StatefulSet 관리 Pod
분류컨테이너
검토일2026-09-02
진행5단계 · 조회 우선
SAFE OPERATING BOUNDARY
중단·복구 기준부터 확인하세요
STOP CONDITIONS
여기서는 멈추세요
현재 kube-context·namespace·워크로드 소유자를 확정하지 못했거나 백업 manifest와 정상 revision을 확보하지 못했다면 변경 단계로 이동하지 않습니다.
Secret 원문, 고객 데이터, 인증 토큰이 로그·yaml·공유 자료에 나타나면 수집을 중단하고 마스킹·접근 통제를 먼저 적용합니다.
DB migration·상태 저장 워크로드가 포함돼 rollback 호환성이 불명확하면 애플리케이션·데이터베이스 담당자 승인 없이 rollout을 되돌리지 않습니다.
ROLLBACK
복구 기준
적용 전 기록한 정상 revision과 백업 manifest를 기준으로 되돌립니다. Deployment rollback은 컨테이너 이미지·Pod template만 되돌릴 뿐 외부 DB migration과 영구 볼륨 데이터는 복구하지 않으므로, 데이터 호환성을 확인하고 승인된 revision 또는 GitOps 변경으로 복원한 뒤 rollout·Ready·오류율을 재검증합니다.
ESCALATION PACK
담당자에게 전달할 자료
Pod containerStatuses의 current·lastState·restartCount와 Warning 이벤트 시각
상위 workload revision, 적용 전후 diff, rollout 결과와 서비스 오류율·지연 변화
2026년 9월 2일 기준 upstream 공식 문서와 현재 지원 버전을 대조했습니다. 먼저 읽기 전용 명령으로 사실을 확인하고, 변경 명령은 영향·백업·복구 경로를 확인한 뒤 승인된 대상에만 적용하세요. <...> 자리표시자는 승인된 리터럴 값으로 직접 치환하고 외부 입력으로 shell 명령을 조립하거나 eval하지 마세요.
BEFORE YOU START
이런 증상에서 시작합니다
Pod STATUS가 CrashLoopBackOff이며 RESTARTS가 계속 증가함
lastState.reason이 OOMKilled이고 exitCode가 137임
이벤트에 Liveness probe failed 또는 Startup probe failed가 반복됨
컨테이너는 실행 중이지만 Ready가 0/1이고 서비스 트래픽을 받지 못함
CHECK THE BRANCH
놓치기 쉬운 원인 분기
01
종료 코드와 이전 로그에 애플리케이션 오류가 있는 경우
exitCode, reason, finishedAt과 --previous 로그를 같은 재시작 회차로 묶어 봅니다. 설정 누락·마이그레이션 실패·의존 서비스 오류라면 probe 지연부터 늘려 원인을 숨기지 않습니다.
02
OOMKilled 또는 노드 메모리 압박인 경우
컨테이너 limit 초과와 노드 전체 MemoryPressure를 구분합니다. limit만 즉시 높이기 전에 실제 working set, 누수 여부, request와 노드 allocatable을 함께 확인합니다.
03
Probe 실패만 반복되는 경우
startup probe가 없거나 검사 경로·포트·timeout이 실제 애플리케이션 기동 특성과 맞지 않을 수 있습니다. readiness 실패는 트래픽 제외, liveness·startup 실패는 재시작으로 이어진다는 차이를 반영합니다.
04
배포 직후 여러 Pod에서 동시에 시작된 경우
개별 Pod 수정보다 Deployment·StatefulSet의 최근 revision과 ConfigMap·Secret 참조 변경을 먼저 확인합니다. 생성된 Pod를 직접 편집하면 다음 재생성 때 사라집니다.
FOLLOW THE FLOW
순서대로 확인하기
1
조회시스템을 변경하지 않는 확인 단계
1분 점검: 상태·종료 이유·이벤트 확인
NAMESPACE와 POD를 실제 값으로 바꾸고 재시작 횟수, 현재·직전 종료 상태, 최근 이벤트를 한 번에 확인합니다.
Pod 상태와 노드
kubectl get pod -n <NAMESPACE> <POD> -o wide
컨테이너별 현재·직전 상태
kubectl get pod -n <NAMESPACE> <POD> -o jsonpath='{range .status.containerStatuses[*]}{.name}{" current="}{.state}{" last="}{.lastState}{" restarts="}{.restartCount}{"\n"}{end}'
probe 완화, 리소스 변경, 이미지·설정 변경을 한꺼번에 섞지 않습니다. diff와 복구 revision을 승인받은 뒤 실행합니다.
rollout과 새 Pod 상태
kubectl rollout status deployment/<DEPLOYMENT> -n <NAMESPACE> --timeout=5m
kubectl get pods -n <NAMESPACE> -l <LABEL_SELECTOR> -o wide
결과 읽기
새 Pod가 Ready이고 restartCount가 더 늘지 않으며 서비스 지표가 정상이어야 합니다. rollout timeout은 성공이 아니므로 이벤트와 새 Pod 로그를 다시 확인합니다.
다음 판단
실패하면 kubectl rollout undo를 즉시 실행하기보다 보존한 revision·manifest와 데이터 마이그레이션 호환성을 확인한 뒤 승인된 revision으로 되돌리고, 재발 방지를 위해 메모리·재시작·probe 실패 알림과 부하 기반 값을 운영 기준에 반영합니다.