애플리케이션 정리(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 CD resources-finalizer.argocd.argoproj.io finalizer

결과적으로 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)