❗️ 부모 ApplicationSet이 삭제되면 다같이 삭제되므로, 방지할 무언가가 필요하다.
ApplicationSet 컨트롤러는 Application 리소스를 언제, 어떻게 수정할 지 제어할 수 있다.
예를 들어, 하위 Application을 삭제하지 못하도록 제한할 수 있다.
다음과 같은 제어가 가능하다.
- Application 리소스에 대한 수정 시점 및 방식 제어
- 해당 Application이 관리하는 클러스터 리소스(Deployment, Service 등)에 대한 영향 제어
1️⃣ ApplicationSet 수정 정책 (syncPolicy)
ApplicationSet 컨트롤러는 Argo CD Application 리소스에 어떤 변경을 허용할지 제어할 수 있다.
다음 네 가지 값 중 하나를 가질 수 있다.
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
spec:
# (...)
syncPolicy:
applicationsSync: create-only # create-update, create-delete sync
1. create-only
- 수정 및 삭제를 금지 (Application 생성만 허용)
- 단, ApplicationSet 삭제 시 ownerReference에 의해 Application이 삭제될 수 있음
2. create-update
- 삭제는 금지, 수정은 허용
- 위와 동일하게 ownerReference에 의해 삭제될 수 있음
3. create-delete
- 수정은 금지, 삭제는 허용
4. sync (기본값)
- 수정, 삭제 둘다 허용
2️⃣ ApplicationSet 삭제 시 Application 삭제 방지 방법
기본적으로 create-only 및 create-update 정책만으로는 ApplicationSet 삭제 시 Application 삭제를 완전히 막을 수 없다.
finalizer를 추가해 아래 값을 추가해야 한다.
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
finalizers:
- resources-finalizer.argocd.argoproj.io
spec:
# (...)
3️⃣ Application 삭제 시 자식 리소스(Deployment, Service 등) 삭제 방지
기본적으로 ApplicationSet 컨트롤러가 Application을 삭제하면,
그 Application이 생성한 모든 클러스터 리소스(Deployment, Service 등)도 함께 삭제된다.
따라서 해당 Application이 삭제되더라도 클러스터 리소스를 유지할 수 있도록, ApplicationSet의 syncPolicy에 아래 필드를 추가.
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
spec:
# (...)
syncPolicy:
preserveResourcesOnDeletion: true
이를 통해 application이 삭제되더라도 자식 리소스는 유지된다.
참고자료
'ArgoCD' 카테고리의 다른 글
[ArgoCD] ApplicationSet과 App of Apps 패턴 비교 (0) | 2025.05.25 |
---|