애플리케이션 정리(Pruning) & 리소스 삭제
애플리케이션 정리(Pruning) & 리소스 삭제
ApplicationSet 컨트롤러가 만든 Application 리소스는 부모 ApplicationSet을 가리키는 owner reference와 삭제 순서를 제어하는 finalizer를 갖게 돼요. 그래서 ApplicationSet을 삭제하면 연결된 Application과 그 Application이 배포한 리소스까지 함께 삭제되는 계단식(cascading) 동작이 기본이에요. 배포된 리소스를 보존하고 싶다면 syncPolicy로 조절할 수 있어요.
출처: 문서
본문
ApplicationSet 컨트롤러가 (ApplicationSet으로부터) 만든 모든 Application 리소스는 다음을 포함해요.
- 부모
ApplicationSet리소스를 가리키는.metadata.ownerReferences참조 .syncPolicy.preserveResourcesOnDeletion이 false로 설정된 경우, Application의.metadata.finalizers에 있는 Argo CDresources-finalizer.argocd.argoproj.iofinalizer
결과적으로 ApplicationSet을 삭제하면 (대략적인 순서로) 다음이 발생해요.
ApplicationSet리소스 자체가 삭제돼요.- 이
ApplicationSet에서 만들어진(owner reference로 식별되는) 모든Application리소스가 삭제돼요. - 관리 클러스터에 배포된 리소스들(
Deployments,Services,ConfigMaps등) 중에서 그Application리소스에 의해 (Argo CD가) 생성된 것들이 삭제돼요.- 이 삭제 처리는 삭제 finalizer를 통해 Argo CD가 담당해요.
- 배포된 리소스를 보존하려면 ApplicationSet에서
.syncPolicy.preserveResourcesOnDeletion을 true로 설정하세요.
따라서 ApplicationSet, Application, 그리고 Application의 리소스의 수명주기는 동일해요.
참고 — ApplicationSet 컨트롤러가 Application 리소스를 삭제·수정하지 못하게 막는 방법에 대한 자세한 내용은 리소스 수정 제어 페이지도 참고하세요.
비계단식(non-cascading) 삭제를 사용하면 Application(과 그 배포 리소스)을 삭제하지 않으면서도 ApplicationSet 리소스만 삭제할 수는 있어요.
kubectl delete ApplicationSet (NAME) --cascade=orphan
경고 — 비계단식 삭제를 쓰더라도 resources-finalizer.argocd.argoproj.io는 여전히 Application에 지정돼 있어요. 따라서 Application이 삭제되면 그 배포 리소스들도 함께 삭제돼요. (Application과 그 하위(child) 객체의 수명주기는 여전히 동일해요.)
Services, Deployments 등 Application의 리소스가 삭제되는 것을 막으려면 ApplicationSet에서 .syncPolicy.preserveResourcesOnDeletion을 true로 설정하세요. 이 syncPolicy 파라미터는 finalizer가 Application에 추가되지 않게 해요.
더 알아보기 (Learn more)
- 리소스 수정 제어 — ApplicationSet 컨트롤러가 Application을 삭제·수정하지 못하게 하는 방법.
- Application 삭제 finalizer — Argo CD가 리소스를 삭제하는 원리.