[argocd] Argo CD Finalizer로 인한 삭제 사고를 피하는 방법

2025. 6. 23. 21:36·CICD/argoCD 공부 기록

들어가기 앞서

https://hyukops.tistory.com/120

 

[kubernetes] CustomResourceDefinition(CRD)가 삭제되지 않는 현상

들어가기 앞서 현재 운영 중인 ArgoCD를 재설치해야 하는 상황이 발생하였다. 재설치를 진행하기 위해 기존 ArgoCD 구성을 완전히 제거하는 과정이 필요하였다. ArgoCD는 AppProject, ApplicationSet, Applicatio

hyukops.tistory.com

전에 올린 위의 포스팅에서 주요 원인이 된 Finalizer 옵션에 대한 추가적인 설명을 위한 포스팅입니다. 실수로 애플리케이션 하나를 삭제하는 것도 문제지만, 모든 애플리케이션이 삭제된다면 더욱 심각한 상황이 됩니다. 이 글에서는 아래와 같은 상황을 피하는 방법을 설명합니다.

  • 사용자가 문제가 있는 자원을 삭제했는데, 원했던 대로 재생성되지 않고 다른 자원까지 함께 삭제되는 상황
  • ApplicationSet Controller가 예고 없이 모든 애플리케이션을 삭제하는 상황
  • Argo CD를 업그레이드하는 도중, 관리자가 멈춰 있는 것처럼 보이는 컴포넌트들을 삭제하다가 실수로 Argo CD가 관리하는 전체 애플리케이션이 삭제되는 상황
  • 애플리케이션 삭제 후, Argo CD 컴포넌트도 삭제해 버려서 자원들이 삭제 대기 상태로 남아 재생성이 불가능해지는 상황

Argo CD Finalizer는 많은 신규 사용자에게 혼란을 주며, 주의하지 않으면 실수로 삭제를 일으킬 수도 있습니다. Argo CD로 관리되는 자원이 삭제되지 않은 채 계속 남아 있는 경우 거의 Finalizer 때문입니다. 반대로, 실수로 애플리케이션이 완전히 삭제됐다면 Finalizer를 추가했을 가능성이 높습니다. Argo CD에서는 여러 방법으로 애플리케이션과 관련 자원을 삭제할 수 있으며, 이는 서비스 중단뿐 아니라 복구조차 불가능하게 만들 수도 있습니다. 

Argo CD 자원의 동작 원리

Argo CD는 여러 컴포넌트로 구성됩니다.

  • Application Controller는 애플리케이션 정의를 통해 자원의 생성·삭제·동기화 작업을 결정하고 관리합니다.
  • ApplicationSet Controller는 개별 애플리케이션 생성과 Owner Reference 연계 역할을 하며, 실제 배포 작업은 하지 않습니다.
  • Argo CD Repository Server는 Git 저장소로부터 소스를 가져오고, 매니페스트를 렌더링하는 역할을 합니다.

Finalizer의 역할

Finalizer는 Argo CD뿐 아니라 Kubernetes 전체에서 자원의 삭제를 제어하는 수단입니다. Finalizer가 있으면, 자원이 삭제될 때 다른 자원도 함께 삭제될 수 있도록 Controller가 작업하게 됩니다. 아래는 Finalizer 예시입니다.

metadata: 
  finalizers: # 기본 동작은 포어그라운드 삭제 
  - resources-finalizer.argocd.argoproj.io 
  # 대안으로는 백그라운드 삭제도 가능 
  # - resources-finalizer.argocd.argoproj.io/background
 
 

Finalizer는 어디에 정의했는지가 중요합니다. Finalizer가 있으면 Argo CD는 삭제 시 다른 자원도 함께 삭제하는 작업을 수행합니다. 예를 들면, Finalizer가 있는 애플리케이션 삭제 시 Argo CD는 연관된 자원도 함께 삭제하는 계단식 삭제를 수행합니다. Finalizer는 일반적으로 ‘App of Apps’ 패턴 도입 시 필요하며, 기본 값은 포어그라운드 삭제입니다. UI로 애플리케이션 삭제 시 Finalizer를 설정하면, CR 삭제 후 자원 삭제가 연계됩니다.

ApplicationSet 삭제 동작

ApplicationSet은 Owner Reference를 통해 생성된 애플리케이션과 자원 간 연계가 이루어집니다. ApplicationSet 삭제 시:

  1. ApplicationSet 자원 삭제
  2. Owner Reference로 생성된 Application 삭제
  3. Application이 생성했던 자원(Deployment, Service, ConfigMap 등) 삭제

ApplicationSet Controller는 Finalizer를 통해 자원 삭제를 제어합니다. .syncPolicy.preserveResourcesOnDeletion 값을 true로 설정하면 삭제 시 자원은 보존됩니다.

 

예시1 - 애플리케이션 삭제

 

이 흐름은 UI에서 애플리케이션 삭제 시 Argo CD가 어떻게 동작하는지 설명합니다.

 

Git 삭제 시에도 동일하지만 Finalizer는 변경할 수 없으며, 원래 정의된 그대로 작동됩니다.

참고: Git에서 애플리케이션을 삭제하려면 prune 옵션을 활성화해야 합니다.

예시2 - 애플리케이션 삭제 사고 대응

예를 들면, 실수로 자원이 삭제된 경우 다음과 같은 절차로 상황 파악이 가능합니다.

  • Argo CD Server 로그: Deleted application 문구로 삭제된 자원 식별 가능
  • Argo CD Application Controller 로그:
    • Deleting resources 문구로 삭제 시도 상황 파악 가능
    • Objects remaining for deletion 문구로 삭제 진행 상황 확인 가능
    • Deleting application’s resources with %s propagation policy 문구로 삭제 정책 종류 판단 가능

결론

Finalizer는 자원 삭제를 제어하고 사고를 예방하는 강력한 도구입니다. 원칙은 다음과 같습니다.

  • 자원 정의를 모두 Git에 저장해 둔다.
  • Finalizer를 의도된 대로 설정한다.
  • 사고 발생 시 즉시 원복 가능하도록 관리한다.

이 원칙이 지켜지면 실수로 자원이 삭제되어도 즉시 복구 가능하며, Finalizer로 서비스 연속성을 유지할 수 있습니다.

Reference

https://codefresh.io/blog/argocd-application-deletion-finalizers/

 

Everything You Ever Wanted to Know About Deletion and Argo CD Finalizers but Were Afraid to Ask

Argo CD finalizers can confuse new users and cause accidental deletions. This post covers finalizer use cases, potential pitfalls, and methods to prevent application destruction in Argo CD.

codefresh.io

 

'CICD > argoCD 공부 기록' 카테고리의 다른 글

[argocd] argocd-cm ConfigMap  (1) 2025.06.26
[argocd] argocd-rbac-cm ConfigMap  (0) 2025.06.26
[argocd] Automated Sync Policy  (0) 2025.06.23
[argocd] 핵심 컴포넌트 정리  (0) 2025.06.20
[argocd] ArgoCD Architecture  (0) 2025.06.03
'CICD/argoCD 공부 기록' 카테고리의 다른 글
  • [argocd] argocd-rbac-cm ConfigMap
  • [argocd] Automated Sync Policy
  • [argocd] 핵심 컴포넌트 정리
  • [argocd] ArgoCD Architecture
Hyukops
Hyukops
안녕하세요
  • Hyukops
    Hyukops 님의 Tech Blog
    Hyukops
    • 분류 전체보기 (141)
      • Introduction (1)
      • Kubernetes & EKS (43)
        • k8s in action (9)
        • k8s 공부 기록 (17)
        • k8s 운영 가이드 (10)
        • k8s 운영 특이사항 (7)
      • Service Mesh (29)
        • Istio 공부 기록 (20)
        • Istio 운영 특이사항 (9)
      • CICD (10)
        • argoCD 공부 기록 (6)
        • argoCD 운영 특이사항 (4)
      • Logging & Monitoring (5)
        • Prometheus 운영 특이사항 (0)
        • fluent bit 운영 특이사항 (5)
      • Infrastructure as Code (8)
        • terraform 공부 기록 (3)
        • terraform 운영 특이사항 (5)
      • AWS (40)
        • aws 공부 기록 (29)
        • 솔루션 사례 & 문제 해결 (11)
      • Database (5)
        • postgreSQL (5)
  • 태그

    fluentbit
    Terraform
    Database
    eks
    Istio
    kubernetes
    Logging
    prometheus
    argocd
    AWS
    k8s in action
    canary
    PostgreSQL
    fluent bit
    MSK
    aws saa
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Hyukops
[argocd] Argo CD Finalizer로 인한 삭제 사고를 피하는 방법
상단으로

티스토리툴바