Auto-Sync 설정이 되어 있어도 ArgoCD는 배포된 리소스의 안전성을 위해 Git에 더이상 정의되지 않은 리소스(삭제된 리소스)를 자동으로 삭제하지 않는다. Prune Resource는 리소스를 삭제도 자동으로 처리하고 싶은 경우 사용하는 옵션이다. 그 외에도 Prune Resource와 같이 사용할 만한 Prune Last, sync-options 옵션을 같이 정리한다.
Prune Resource
1. Deployment 리소스 삭제 화면 (Out of Sync)

- 별도 설정이 없는 경우 매니페스트에서 리소스를 제거 후 다시 배포하면 리소스는 삭제되지 않고 Out of Sync만 표시된다.
- Out of Sync 표시된 리소스는 ArgoCD Web UI에서 삭제하거나 kubectl 명령어로 삭제하면 Sync 상태로 돌아온다.
- 관리자 개입 없이 삭제 과정도 자동으로 처리하고 싶은 경우 Prune Resource 옵션을 True로 변경해야 한다.
2. Prune Resource 설정
아래의 명령어를 통해 ArgoCD Application 수준에서 Prune Resource 설정을 하면 자동으로 삭제된다.
argocd app set <APPNAME> --auto-prune
...
syncPolicy:
automated:
prune: true
...
PruneLast
리소스를 삭제 작업을 기타 동기화 작업 진행 후 가장 마지막에 진행하는 옵션이다.이 옵션이 없이 리소스 삭제 외 리소스의 설정 변경이나 리소스 추가 배포 작업이 요청되면 모든 작업이 동시에 진행된다.
1. Application 수준 적용
apiVersion: argoproj.io/v1alpha1
kind: Application
spec:
syncPolicy:
syncOptions:
- PruneLast=true
...
2. 개별 리소스 수준 적용
...
metadata:
annotations:
argocd.argoproj.io/sync-options: PruneLast=true
...
3. Prune Last 설정 전/후 로그 차이
# PruneLast 설정 전
# cat argocd.log | grep -E 'pruned|created'
{"application":"argocd/aiu","kind":"Deployment","level":"info","msg":"Adding resource result, status: 'Pruned', phase: 'Succeeded', message: 'pruned'","name":"deploy-node-app-foreground","namespace":"default","phase":"Sync","syncId":"00093-piViK","time":"2025-08-21T07:51:01Z"}
{"application":"argocd/aiu","kind":"Service","level":"info","msg":"Adding resource result, status: 'Pruned', phase: 'Succeeded', message: 'pruned'","name":"svc-node-app-aiu","namespace":"default","phase":"Sync","syncId":"00093-piViK","time":"2025-08-21T07:51:01Z"}
{"application":"argocd/aiu","kind":"Deployment","level":"info","msg":"Adding resource result, status: 'Synced', phase: 'Running', message: 'deployment.apps/deploy-node-app-app created'","name":"deploy-node-app-app","namespace":"default","phase":"Sync","syncId":"00093-piViK","time":"2025-08-21T07:51:01Z"}
{"application":"argocd/aiu","kind":"Deployment","level":"info","msg":"Adding resource result, status: 'Pruned', phase: 'Succeeded', message: 'pruned'","name":"deploy-node-app-foreground","namespace":"default","phase":"Sync","syncId":"00094-JAKCe","time":"2025-08-21T07:51:02Z"}
---
# PruneLast 설정 후
# cat argocd.log | grep -E 'pruned|created'
{"application":"argocd/aiu","kind":"Service","level":"info","msg":"Adding resource result, status: 'Synced', phase: 'Running', message: 'service/svc-node-app-aiu created'","name":"svc-node-app-aiu","namespace":"default","phase":"Sync","syncId":"00095-nJEgG","time":"2025-08-21T07:55:31Z"}
{"application":"argocd/aiu","kind":"Deployment","level":"info","msg":"Adding resource result, status: 'Synced', phase: 'Running', message: 'deployment.apps/deploy-node-app-foreground created'","name":"deploy-node-app-foreground","namespace":"default","phase":"Sync","syncId":"00095-nJEgG","time":"2025-08-21T07:55:31Z"}
{"application":"argocd/aiu","level":"info","msg":"Tasks","syncId":"00096-BWEyV","tasks":"[Sync/0 resource /Service:default/svc-node-app-aiu obj-\u003eobj (Synced,Running,service/svc-node-app-aiu created), Sync/0 resource apps/Deployment:default/deploy-node-app-foreground obj-\u003eobj (Synced,Running,deployment.apps/deploy-node-app-foreground created), Sync/1 resource apps/Deployment:default/deploy-node-app-app obj-\u003enil (,,)]","time":"2025-08-21T07:55:33Z"}
{"application":"argocd/aiu","kind":"Service","level":"info","msg":"Updating resource result, status: 'Synced' -\u003e 'Synced', phase 'Running' -\u003e 'Succeeded', message 'service/svc-node-app-aiu created' -\u003e 'service/svc-node-app-aiu created'","name":"svc-node-app-aiu","namespace":"default","phase":"Sync","syncId":"00096-BWEyV","time":"2025-08-21T07:55:33Z"}
{"application":"argocd/aiu","kind":"Deployment","level":"info","msg":"Updating resource result, status: 'Synced' -\u003e 'Synced', phase 'Running' -\u003e 'Succeeded', message 'deployment.apps/deploy-node-app-foreground created' -\u003e 'deployment.apps/deploy-node-app-foreground created'","name":"deploy-node-app-foreground","namespace":"default","phase":"Sync","syncId":"00096-BWEyV","time":"2025-08-21T07:55:33Z"}
{"application":"argocd/aiu","kind":"Deployment","level":"info","msg":"Adding resource result, status: 'Pruned', phase: 'Succeeded', message: 'pruned'","name":"deploy-node-app-app","namespace":"default","phase":"Sync","syncId":"00096-BWEyV","time":"2025-08-21T07:55:33Z"}
{"application":"argocd/aiu","kind":"Deployment","level":"info","msg":"Adding resource result, status: 'Pruned', phase: 'Succeeded', message: 'pruned'","name":"deploy-node-app-app","namespace":"default","phase":"Sync","syncId":"00097-KuEpa","time":"2025-08-21T07:55:33Z"}
{"application":"argocd/aiu","kind":"Deployment","level":"info","msg":"Adding resource result, status: 'Pruned', phase: 'Succeeded', message: 'pruned'","name":"deploy-node-app-app","namespace":"default","phase":"Sync","syncId":"00098-HJGcq","time":"2025-08-21T07:55:35Z"}
{"application":"argocd/aiu","kind":"Deployment","level":"info","msg":"Adding resource result, status: 'Pruned', phase: 'Succeeded', message: 'pruned'","name":"deploy-node-app-app","namespace":"default","phase":"Sync","syncId":"00099-EnZVb","time":"2025-08-21T07:55:41Z"}
{"application":"argocd/aiu","kind":"Deployment","level":"info","msg":"Adding resource result, status: 'Pruned', phase: 'Succeeded', message: 'pruned'","name":"deploy-node-app-app","namespace":"default","phase":"Sync","syncId":"00100-DIzPE","time":"2025-08-21T07:55:59Z"}
※ Prune Resource 옵션이 같이 활성화되어 있지 않으면 리소스가 삭제되지 않는다.
ArgoCD Annotation : sync-options
1. argocd.argoproj.io/sync-options : Prune
Prune Resources 옵션을 활성화한 상태에서 일부 리소스의 삭제는 실수로 삭제되는 경우를 방지하고 싶은 경우 사용하는 옵션이다. 매니페스트 파일이 실수로 삭제되어 Git에 배포되더라도 해당 리소스 삭제되지 않고 ArgoCD에서 Out of Sync 상태로 표시된다. 매니페스트 파일을 복구하여 다시 배포하면 리소스를 새로 배포하는 대신 기존에 남아있던 리소스를 그대로 활용한다.
# 매니페스트 파일에 다음과 같이 Prune=false 옵션을 추가한다.
...
metadata:
annotations:
argocd.argoproj.io/sync-options: Prune=false
...
※ 이 옵션이 들어가 있어도 ArgoCD Application 자체가 삭제되는 경우에는 리소스가 같이 삭제된다.
2. argocd.argoproj.io/sync-options : Delete
Application 삭제 시에도 리소스를 삭제하지 않고 남기고 싶은 경우 사용하는 옵션이다. false 값을 할당하면 ArgoCD Application이 삭제되는 경우 이 옵션이 들어가 있는 리소스만 남겨두고 나머지 리소스들은 모두 삭제된다. 또한, kubectl이나 ArgoCD GUI 화면에서 삭제 작업을 진행해도 다시 복구된다.
# 매니페스트 파일에 다음과 같이 Delete=false 또는 confirm 옵션을 추가한다.
...
metadata:
annotations:
argocd.argoproj.io/sync-options: Delete=false
# argocd.argoproj.io/sync-options: Delete=confirm
...
false 대신 confirm 값을 할당하게 될 경우 ArgoCD Application을 삭제할 때 GUI 화면에서 Confirm 버튼이 추가된다.

※ 이 옵션이 들어가 있어도 매니페스트 파일에서 삭제 된 경우에는 리소스가 삭제된다.
'GitOps > ArgoCD' 카테고리의 다른 글
| [ArgoCD] Server Side Apply 옵션 (0) | 2025.12.01 |
|---|---|
| [ArgoCD] ApplyOutofSyncOnly 옵션 (0) | 2025.11.16 |
| [ArgoCD] Resource Hook (0) | 2025.11.14 |