쿠버네티스에서 리소스를 삭제할 때,
“부모 리소스를 지우면 자식 리소스는 어떻게 될까?”
이 동작을 결정하는 메커니즘이 바로 **캐스케이딩 삭제(Cascading Deletion)**다.
운영 중 Deployment, Job, ReplicaSet을 삭제하다 보면
Pod가 함께 사라지거나, 남아 있거나, 삭제가 멈춰 있는 상황을 자주 마주하게 된다.
이 글에서는 그 이유를 구조적으로 정리한다.
1. 캐스케이딩 삭제란?
캐스케이딩 삭제는
부모 리소스를 삭제할 때, 그에 의해 관리되는 하위 리소스를 함께 삭제할지 여부를 결정하는 방식이다.
쿠버네티스는 리소스 간 관계를 OwnerReference로 관리한다.
예시 구조:
Deployment
└─ ReplicaSet
└─ Pod
Deployment를 삭제하면:
- ReplicaSet을 지울지?
- Pod도 같이 지울지?
- 아니면 Pod는 남길지?
이 결정이 **삭제 전파 정책(Deletion Propagation Policy)**이다.
2. 삭제 전파 정책 (Propagation Policy)
쿠버네티스는 3가지 방식을 제공한다.
① Background (기본값)
kubectl delete deployment my-app
# 또는
kubectl delete deployment my-app --cascade=background
동작 방식
- 부모 리소스를 즉시 삭제
- 자식 리소스는 컨트롤러가 비동기로 정리
특징
- 가장 빠름
- 잠깐 동안 고아 Pod가 보일 수 있음
- 대부분의 운영 환경에서 기본 사용
실무 기준
“일반적인 서비스 삭제는 거의 다 background”
② Foreground (전면 삭제)
kubectl delete deployment my-app --cascade=foreground
동작 방식
- 자식 리소스를 먼저 전부 삭제
- 자식이 모두 삭제된 후 부모 리소스 삭제
상태 변화
- 부모 리소스에 deletionTimestamp만 찍힌 채 남아 있음
- 실제 삭제는 보류 상태
특징
- 정합성 보장
- 삭제 속도 느림
- 장애 분석, 데이터 정리 작업에 적합
③ Orphan (고아화)
kubectl delete deployment my-app --cascade=orphan
동작 방식
- 부모 리소스만 삭제
- 자식 리소스는 그대로 유지
- ownerReferences 제거
특징
- Pod가 완전히 독립됨
- 수동 관리 필요
- 디버깅/임시 유지 목적
3. 캐스케이딩 삭제의 핵심 조건: OwnerReference
자식 리소스에 아래 정보가 있어야 캐스케이딩 대상이 된다.
ownerReferences:
-apiVersion:apps/v1
kind:Deployment
name:my-app
uid:xxxx
controller:true
중요한 포인트
- ownerReferences가 없으면 삭제 전파 안 됨
- controller: true → 컨트롤러 관계
- 수동 생성 Pod는 보통 owner 없음
즉,
“부모-자식 관계는 label이 아니라 OwnerReference로 결정된다”
4. Finalizer와 캐스케이딩 삭제의 관계
캐스케이딩 삭제가 있어도
finalizer가 있으면 삭제는 멈춘다.
예시
- PVC (kubernetes.io/pvc-protection)
- Ingress (LoadBalancer 정리 대기)
- Cloud 리소스 연동 객체
이 경우 상태는:
metadata.deletionTimestamp: 있음
하지만 리소스는 계속 남아 있음
이는 오류가 아니라 의도된 보호 동작이다.
5. 흔히 헷갈리는 시나리오 정리
작업 결과
| Deployment 삭제 | ReplicaSet → Pod 삭제 |
| ReplicaSet 직접 삭제 | Pod만 삭제 |
| Pod 직접 삭제 | 영향 없음 |
| --cascade=orphan | Pod 유지 |
| Finalizer 존재 | 삭제 대기 상태 |
6. 실무에서의 선택 기준
상황 추천 정책
| 일반 서비스 삭제 | Background |
| 장애 원인 분석 | Foreground |
| Pod 유지하며 구조 변경 | Orphan |
7. 한 줄 요약
쿠버네티스의 캐스케이딩 삭제는 OwnerReference를 기준으로 부모 리소스 삭제가 자식 리소스에 어떻게 전파될지를 제어하는 메커니즘이며,
실제 삭제 여부는 propagation policy와 finalizer에 의해 결정된다.
'K8S' 카테고리의 다른 글
| Kubernetes hostNetwork & externalTrafficPolicy - AWS ALB, NLB 에서 사용하는가? (0) | 2026.01.26 |
|---|---|
| Kubernetes Windows 지원: 기능 비교와 스케줄링 방식 정리 (0) | 2026.01.23 |
| Kubernetes는 가상화 도구인가? (0) | 2026.01.22 |
| Kubernetes에서 Stateful 앱에 Blue-Green 배포를 적용할 수 있을까? (0) | 2026.01.19 |
| Kubernetes Pod 부팅 스파이크, 어떻게 해결할까? (0) | 2026.01.15 |
댓글